<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sk">
	<id>http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mayo</id>
	<title>Kiwiki - Príspevky používateľa [sk]</title>
	<link rel="self" type="application/atom+xml" href="http://www.kiwiki.info/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Mayo"/>
	<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php/%C5%A0peci%C3%A1lne:Pr%C3%ADspevky/Mayo"/>
	<updated>2026-05-01T21:02:20Z</updated>
	<subtitle>Príspevky používateľa</subtitle>
	<generator>MediaWiki 1.34.0</generator>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=5140</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=5140"/>
		<updated>2010-06-15T20:06:17Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_bloku_ram_PLC.png|framed|center|Čítanie bloku pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_konfiguracie_PLC.png|framed|center|Zápis konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_konfiguracie_PLC.png|framed|center|Čítanie konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_kontrola_IIC_PLC.png|framed|center|Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia]]&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_ukazka_komunikacie.png|framed|center|Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]]&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_univerzalny_protokol_PLC.png|framed|center|Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]] &lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie &amp;lt;code&amp;gt;printf&amp;lt;/code&amp;gt; v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Funk%C4%8Dn%C3%A9_bloky_programu_pre_1PLC&amp;diff=5139</id>
		<title>Funkčné bloky programu pre 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Funk%C4%8Dn%C3%A9_bloky_programu_pre_1PLC&amp;diff=5139"/>
		<updated>2010-06-15T20:05:52Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|4|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Riešenie funkčných blokov jazyka STL==&lt;br /&gt;
	Každý príkaz jazyka STL je potrebné prepísať do assembleru mikrokontroléra Atmel AVR. Keďže jazyk STL je zásobníkový jazyk, pri riešení blokov je vhodné využiť vstavaný zásobník mikrokontroléra a inštrukcie na prácu so zásobníkom. Prehľad príkazov v&amp;amp;nbsp;jazyku STL sa nachádza v&amp;amp;nbsp;nasledujúcich podkapitolách. &lt;br /&gt;
	&lt;br /&gt;
Ku každému príkazu je uvedená tabuľka s&amp;amp;nbsp;informáciami. Je v&amp;amp;nbsp;nej uvedený príklad zápisu príkazu v&amp;amp;nbsp;jazyku STL a čo príkaz vykonáva so zásobníkom (aké dáta z neho vyberá a aké vkladá). &lt;br /&gt;
	&lt;br /&gt;
Naskytajú sa dve možnosti implementácie blokov. Prvá je, že bloky budú uložené spolu s&amp;amp;nbsp;operačným systémom v&amp;amp;nbsp;mikrokontroléri ako podprogramy. Užívateľský program bude iba odkazovať na tieto bloky. Druhá možnosť je využiť v&amp;amp;nbsp;užívateľskom programe priamo napísané funkčné bloky a poskladať program z&amp;amp;nbsp;nich.&lt;br /&gt;
	&lt;br /&gt;
Pre realizáciu jednoduchších príkazov som vybral druhú možnosť, keďže je rýchlejšia na vykonávanie. &lt;br /&gt;
Prvá možnosť bola zvolená iba pre príkazy pracujúce s&amp;amp;nbsp;premennými v plávajúcej desatinnej čiarke (ADDF, SUBF, ... ). &lt;br /&gt;
Operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke sú pomerne pomalé, takže navýšenie času predávaním parametrov cez registre je zanedbateľný. Naproti tomu sú pomerne rozsiahle, takže ak by sa mali vkladať zakaždým, keď je v&amp;amp;nbsp;programe daný príkaz použitý, rýchlo by sa zaplnila pamäť určená pre program.&lt;br /&gt;
	&lt;br /&gt;
Aritmetické príkazy využívajú rôzne veľkosti dát (8, 16, 32-bit). V&amp;amp;nbsp;tabuľke rozsah konštánt sú uvedené rozsahy daných konštánt.&lt;br /&gt;
	&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Rozsah konštánt&lt;br /&gt;
|-&lt;br /&gt;
!Typ konštanty&lt;br /&gt;
!Rozsah dekadicky&lt;br /&gt;
|-&lt;br /&gt;
|B &lt;br /&gt;
| 0 ... 255&lt;br /&gt;
|-&lt;br /&gt;
| W &lt;br /&gt;
| -32 768 ... 32 767&lt;br /&gt;
|-&lt;br /&gt;
| D &lt;br /&gt;
| -2 147 483 648 ... 2 147 483 647&lt;br /&gt;
|-&lt;br /&gt;
| F &lt;br /&gt;
| &amp;amp;plusmn;10&amp;lt;sup&amp;gt;-45&amp;lt;/sup&amp;gt; ... &amp;amp;plusmn;10&amp;lt;sup&amp;gt;39&amp;lt;/sup&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Riadiace funkčné bloky==&lt;br /&gt;
&lt;br /&gt;
===Začiatok a koniec užívateľského programu===&lt;br /&gt;
&lt;br /&gt;
Na začiatku užívateľského programu je potrebné zálohovanie ukazateľa zásobníka. Keďže program nemusí mať rovnaký počet inštrukcií pop a push (resp. počet inštrukcií push môže prevyšovať počet inštrukcií pop, opačne nie), program by sa na konci nevrátil späť do riadiacej slučky správne. &lt;br /&gt;
&lt;br /&gt;
Na konci programu sa ukazateľ zásobníka obnoví späť na hodnotu ako mal pri zavolaní programu. Program sa ukončí inštrukciou RET (návrat z podprogramu), keďže užívateľský program je z&amp;amp;nbsp;operačného systému volaný ako podprogram (funkcia).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Funkčné bloky logických operácii==&lt;br /&gt;
===A===&lt;br /&gt;
Príkaz A vyberie z&amp;amp;nbsp;vrcholu zásobníka hodnotu a spraví logický súčin s&amp;amp;nbsp;hodnotou zadanou ako parameter príkazu. Výsledok uloží na vrchol zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| A PX.Y&amp;lt;br/&amp;gt;A V0.0&lt;br /&gt;
|-&lt;br /&gt;
| Výber zo zásobníka &lt;br /&gt;
| 1. operand&lt;br /&gt;
|-&lt;br /&gt;
| Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===AN===&lt;br /&gt;
Príkaz AN vyberie z&amp;amp;nbsp;vrcholu zásobníka hodnotu a spraví logický súčin s&amp;amp;nbsp;negovanou hodnotou zadanou ako parameter príkazu. Výsledok uloží na vrchol zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
|AN PX.Y&amp;lt;br/&amp;gt;AN V0.0&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| 1. operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===O===&lt;br /&gt;
Príkaz O vyberie z&amp;amp;nbsp;vrcholu zásobníka hodnotu a spraví logický súčet s&amp;amp;nbsp;hodnotou zadanou ako parameter príkazu. Výsledok uloží na vrchol zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| O PX.Y&amp;lt;br/&amp;gt;O V0.0&lt;br /&gt;
|-&lt;br /&gt;
| Výber zo zásobníka &lt;br /&gt;
| 1. operand&lt;br /&gt;
|-&lt;br /&gt;
| Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ON===&lt;br /&gt;
Príkaz O vyberie z&amp;amp;nbsp;vrcholu zásobníka hodnotu a spraví logický súčet s&amp;amp;nbsp;negovanou hodnotou zadanou ako parameter príkazu. Výsledok uloží na vrchol zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| ON PX.Y&amp;lt;br/&amp;gt;ON V0.0&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| 1. operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===ALD===&lt;br /&gt;
Príkaz ALD vyberie 2 hodnoty z&amp;amp;nbsp;vrcholu zásobníka a spraví s&amp;amp;nbsp;nimi logický súčin. Výsledok vloží späť do zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| ALD&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| 1.&amp;amp;nbsp;operand&amp;lt;br/&amp;gt;2.&amp;amp;nbsp;operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===OLD===&lt;br /&gt;
Príkaz OLD vyberie 2 hodnoty z&amp;amp;nbsp;vrcholu zásobníka a spraví s&amp;amp;nbsp;nimi logický súčet. Výsledok vloží späť do zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| OLD&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| 1.&amp;amp;nbsp;operand&amp;lt;br/&amp;gt;2.&amp;amp;nbsp;operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===NOT===&lt;br /&gt;
Príkaz NOT neguje hodnotu na vrchole zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| NOT&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== = ===&lt;br /&gt;
Príkaz = nastaví bit v&amp;amp;nbsp;zadanom bajte a zadanom pamäťovom priestore na hodnotu vrcholu zásobníka. Napríklad =&amp;amp;nbsp;P0.0 nastaví 0.&amp;amp;nbsp;bit v&amp;amp;nbsp;0.&amp;amp;nbsp;bajte pamäťového priestoru P na hodnotu vrcholu zásobníka. Vrchol zásobníka nijako nemení.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| = PX.Y&amp;lt;br/&amp;gt;= P0.0&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===S===&lt;br /&gt;
Príkaz S nastaví bit v&amp;amp;nbsp;zadanom bajte a zadanom pamäťovom priestore, ak je hodnota vrcholu zásobníka 1. Napríklad S&amp;amp;nbsp;P0.0 nastaví 0.&amp;amp;nbsp;bit v&amp;amp;nbsp;0.&amp;amp;nbsp;bajte pamäťového priestoru P na hodnotu 1, ak je na vrchole zásobníka 1. Vrchol zásobníka nijako nemení.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| S PX.Y&amp;lt;br/&amp;gt;S P0.0&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|-&lt;br /&gt;
| Vloženie do zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===R===&lt;br /&gt;
Príkaz R vynuluje bit v&amp;amp;nbsp;zadanom bajte a zadanom pamäťovom priestore, ak je hodnota vrcholu zásobníka 1. Napríklad S&amp;amp;nbsp;P0.0 nastaví 0.&amp;amp;nbsp;bit v&amp;amp;nbsp;0.&amp;amp;nbsp;bajte pamäťového priestoru P na hodnotu 1, ak je na vrchole zásobníka 1. Vrchol zásobníka nijako nemení.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| R PX.Y&amp;lt;br/&amp;gt;R P0.0&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===PE===&lt;br /&gt;
Príkaz PE detekuje nábežnú hranu. Predchádzajúci stav je uložený na adrese zadanej ako argument.  Príkaz vyberie z&amp;amp;nbsp;vrcholu zásobníka hodnotu a zistí, či sa zmenila zo stavu 0 do stavu 1. Ak áno uloží na vrchol zásobníka 1, inak 0.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| PE PX.Y&amp;lt;br/&amp;gt;PE V0.0&lt;br /&gt;
|-&lt;br /&gt;
| Výber zo zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|-&lt;br /&gt;
| Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===NE===&lt;br /&gt;
Príkaz NE detekuje dobežnú hranu. Predchádzajúci stav je uložený na adrese zadanej ako argument.  Príkaz vyberie z&amp;amp;nbsp;vrcholu zásobníka hodnotu a zistí, či sa zmenila zo stavu 1 do stavu 0. Ak áno uloží na vrchol zásobníka 1, inak 0.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| NE PX.Y&amp;lt;br/&amp;gt;NE V0.0&lt;br /&gt;
|-&lt;br /&gt;
| Výber zo zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Funkčné bloky pre prácu so zásobníkom==&lt;br /&gt;
&lt;br /&gt;
===LD===&lt;br /&gt;
Príkaz LD uloží na vrchol zásobníka hodnotu bitu v&amp;amp;nbsp;zadanom bajte a pamäťovom priestore. Napríklad LD P0.0 uloží 0.&amp;amp;nbsp;bit z&amp;amp;nbsp;0.&amp;amp;nbsp;bajtu v&amp;amp;nbsp;pamäťovom priestore P na vrchol zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| LD PX.Y&amp;lt;br/&amp;gt;LD P1.4&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LDN===&lt;br /&gt;
Príkaz LDN uloží na vrchol zásobníka negovanú hodnotu bitu v&amp;amp;nbsp;zadanom bajte a pamäťovom priestore. Napríklad LD P0.0 uloží negovaný 0.&amp;amp;nbsp;bit z&amp;amp;nbsp;0.&amp;amp;nbsp;bajtu v&amp;amp;nbsp;pamäťovom priestore P na vrchol zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| LDN PX.Y&amp;lt;br/&amp;gt;LDN P1.4&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| -&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| negovaný operand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LPR, LPS===&lt;br /&gt;
Príkaz LPR, LPS skopíruje hodnotu vrcholu zásobníka na vrchol zásobníka. Takže 2 vrchné bity budú mať rovnakú hodnotu.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| LPR&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| operand&amp;lt;br/&amp;gt;operand&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===LPP===&lt;br /&gt;
Príkaz LPP zahodí hodnotu z&amp;amp;nbsp;vrcholu zásobníka.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| LPP&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| operand&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| -&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Funkčné bloky na presun dát==&lt;br /&gt;
&lt;br /&gt;
===MOVB, MOVW, MOVD, MOVF===&lt;br /&gt;
Príkazy MOV kopírujú dáta (veľkosti 1B pre MOVB, 2B pre MOVW a 4B pre MOVD a MOVF) z&amp;amp;nbsp;adresy zadanej ako druhý parameter do adresy zadanej ako prvý parameter. Presun sa vykoná iba vtedy ak je na vrchole zásobníka hodnota 1. Ak je ako druhý parameter zadaná konštanta, tak sa konštanta vloží na adresu, ktorá je ako prvý parameter. &lt;br /&gt;
&lt;br /&gt;
Napríklad MOVB&amp;amp;nbsp;V0,V1 skopíruje hodnotu z&amp;amp;nbsp;adresy&amp;amp;nbsp;1 do&amp;amp;nbsp;adresy&amp;amp;nbsp;0 v&amp;amp;nbsp;pamäťovom priestore V. Príkazy nemenia vrchol zásobníka.&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| MOVB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;MOVB PX,K&amp;lt;br/&amp;gt;MOVB V0,V1&amp;lt;br/&amp;gt;MOVD V0,-2 589		&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Porovnávacie funkčné bloky==&lt;br /&gt;
&lt;br /&gt;
=== ==B, ==W, ==D, ==F ===&lt;br /&gt;
Príkazy == porovnávajú medzi sebou dve hodnoty alebo hodnotu a konštantu, zadané ako operandy v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1. Do zásobníka uloží 1 ak sa hodnoty rovnajú.&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| ==B PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;==B PX,K&amp;lt;br/&amp;gt;==B V0,V1&amp;lt;br/&amp;gt;==D V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;&amp;gt;B, &amp;lt;&amp;gt;W, &amp;lt;&amp;gt;D, &amp;lt;&amp;gt;F ===&lt;br /&gt;
Príkazy &amp;lt;&amp;gt; porovnávajú medzi sebou dve hodnoty alebo hodnotu a konštantu, zadané ako operandy v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1. Do zásobníka uloží 1 ak sa hodnoty nerovnajú.&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| &amp;lt;&amp;gt;B PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;&amp;gt;B PX,K&amp;lt;br/&amp;gt;&amp;lt;&amp;gt;B V0,V1&amp;lt;br/&amp;gt;&amp;lt;&amp;gt;D V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;B, &amp;lt;W, &amp;lt;D, &amp;lt;F ===&lt;br /&gt;
Príkazy &amp;lt; porovnávajú medzi sebou dve hodnoty alebo hodnotu a konštantu, zadané ako operandy v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1. Do zásobníka uloží 1 ak je 1. operand menší ako 2. .&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| &amp;lt;B PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;B PX,K&amp;lt;br/&amp;gt;&amp;lt;B V0,V1&amp;lt;br/&amp;gt;&amp;lt;D V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== &amp;lt;=B, &amp;lt;=W, &amp;lt;=D, &amp;lt;=F ===&lt;br /&gt;
Príkazy &amp;lt;= porovnávajú medzi sebou dve hodnoty alebo hodnotu a konštantu, zadané ako operandy v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1. Do zásobníka uloží 1 ak je 1. operand menší alebo rovný ako 2. .&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| &amp;lt;=B PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;&amp;lt;=B PX,K&amp;lt;br/&amp;gt;&amp;lt;=B V0,V1&amp;lt;br/&amp;gt;&amp;lt;=D V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;gt;B, &amp;gt;W, &amp;gt;D, &amp;gt;F ===&lt;br /&gt;
Príkazy &amp;gt; porovnávajú medzi sebou dve hodnoty alebo hodnotu a konštantu, zadané ako operandy v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1. Do zásobníka uloží 1 ak je 1. operand väčší ako 2. .&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| &amp;gt;B PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;&amp;gt;B PX,K&amp;lt;br/&amp;gt;&amp;gt;B V0,V1&amp;lt;br/&amp;gt;&amp;gt;D V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== &amp;gt;=B, &amp;gt;=W, &amp;gt;=D, &amp;gt;=F ===&lt;br /&gt;
Príkazy &amp;gt;= porovnávajú medzi sebou dve hodnoty alebo hodnotu a konštantu, zadané ako operandy v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1. Do zásobníka uloží 1 ak je 1. operand väčší alebo rovný ako 2. .&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
| Vzor príkazu &lt;br /&gt;
| &amp;gt;=B PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;&amp;gt;=B PX,K&amp;lt;br/&amp;gt;&amp;gt;=B V0,V1&amp;lt;br/&amp;gt;&amp;gt;=D V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| výsledok&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Aritmetické funkčné bloky ==&lt;br /&gt;
&lt;br /&gt;
=== ADDB, ADDW, ADDD, ADDF ===&lt;br /&gt;
Príkazy ADD sčítajú 2 hodnoty v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1.&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| ADDB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;ADDB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,K&amp;lt;br/&amp;gt;ADDW V23,V23,V16&amp;lt;br/&amp;gt;ADDD V0,V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== SUBB, SUBW, SUBD, SUBF ===&lt;br /&gt;
Príkazy SUB odčítajú 2 hodnoty v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1.&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| SUBB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;SUBB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,K&amp;lt;br/&amp;gt;SUBW V23,V23,V16&amp;lt;br/&amp;gt;SUBD V0,V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== MULB, MULW, MULD, MULF ===&lt;br /&gt;
Príkazy MUL vynásobia 2 hodnoty v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1.&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| MULB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;MULB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,K&amp;lt;br/&amp;gt;MULW V23,V23,V16&amp;lt;br/&amp;gt;MULD V0,V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DIVB, DIVW, DIVD, DIVF ===&lt;br /&gt;
Príkazy DIV vydelia 2 hodnoty v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1.&lt;br /&gt;
&lt;br /&gt;
Rozsah konštánt je uvedený v&amp;amp;nbsp;tabuľke rozsah konštánt.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| DIVB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;br/&amp;gt;DIVB PX&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;,PX&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;,K&amp;lt;br/&amp;gt;DIVW V23,V23,V16&amp;lt;br/&amp;gt;DIVD V0,V0,2 345 790&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== INCB, INCW, INCD ===&lt;br /&gt;
Príkazy INC pripočítajú 1 k&amp;amp;nbsp;hodnote v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| INCB PX&amp;lt;br/&amp;gt;INCW V12&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== DECB, DECW, DECD ===&lt;br /&gt;
Príkazy DEC odpočítajú 1 od hodnoty v&amp;amp;nbsp;prípade, že na vrchole zásobníka je 1.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| DECB PX&amp;lt;br/&amp;gt;DECW V12&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Ostatné funkčné bloky==&lt;br /&gt;
&lt;br /&gt;
=== TON ===&lt;br /&gt;
&lt;br /&gt;
Príkaz TON zapína časovač zapnutia. Ak je na vrchole zásobníka 1, časovač je rozopnutý (uloží do zásobníka 0). Po dosiahnutí zadaného času  K.rozlíšenie_časovača sa časovač zopne (uloží do zásobníka 1).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| TON TX,K&amp;lt;br/&amp;gt;TON T10,8&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| stav&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== TOFF ===&lt;br /&gt;
&lt;br /&gt;
Príkaz TON zapína časovač zapnutia. Ak je na vrchole zásobníka 1, časovač je zopnutý (uloží do zásobníka 1). Po dosiahnutí zadaného času K.rozlíšenie_časovača sa časovač rozopne (uloží do zásobníka 0).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| TOFF TX,K&amp;lt;br/&amp;gt;TOFF T10,8&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| povolenie&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| stav&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CU ===&lt;br /&gt;
&lt;br /&gt;
Príkaz CU počíta impulzy na vstupe. Vyberie z&amp;amp;nbsp;vrcholu zásobníka 2 hodnoty (prvá je reset, druhá vstup) a ak na vstupe bola nábežná hrana, tak pripočíta 1. Ak hodnota dosiahne K, tak vloží do zásobníka 1.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| CU CX,K&amp;lt;br/&amp;gt;CU C5,245&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| reset&amp;lt;br/&amp;gt;vstup&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| stav&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== CD ===&lt;br /&gt;
&lt;br /&gt;
Príkaz CD odpočítava impulzy na vstupe od hodnoty K. Vyberie z&amp;amp;nbsp;vrcholu zásobníka 2 hodnoty (prvá je reset, druhá vstup) a ak na vstupe bola nábežná hrana, tak odpočíta 1. Ak hodnota dosiahne 0, tak vloží do zásobníka 1.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|-&lt;br /&gt;
|Vzor príkazu &lt;br /&gt;
| CD CX,K&amp;lt;br/&amp;gt;CD C17,-456&lt;br /&gt;
|-&lt;br /&gt;
|Výber zo zásobníka &lt;br /&gt;
| reset&amp;lt;br/&amp;gt;vstup&lt;br /&gt;
|-&lt;br /&gt;
|Vloženie do zásobníka &lt;br /&gt;
| stav&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Diplomov%C3%A9_pr%C3%A1ce&amp;diff=5138</id>
		<title>Diplomové práce</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Diplomov%C3%A9_pr%C3%A1ce&amp;diff=5138"/>
		<updated>2010-06-15T20:01:00Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ako_pisat_wikiPracu|Juraj|Fajzen}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mainpage_topbox&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mainpage_pagetitle&amp;quot;&amp;gt;Diplomové práce 2009/2010&amp;lt;/div&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;  border=1 cellpadding=5 cellspacing=0 style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|+ Mechatronika&lt;br /&gt;
|- &lt;br /&gt;
!Autor&lt;br /&gt;
!Názov práce&lt;br /&gt;
!style=&amp;quot;width:150px&amp;quot;|Stav práce&lt;br /&gt;
!style=&amp;quot;width:90px&amp;quot;|Zadanie&lt;br /&gt;
|-&lt;br /&gt;
|Michal Janíček, Bc.&lt;br /&gt;
|[[Interaktívny simulátor DynaSim]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Interaktívny simulátor DynaSim (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Peter Loskot, Bc.&lt;br /&gt;
|[[Open source náhrada MS Small Business server 2003 so sharepoint services]]&lt;br /&gt;
|{{stav_prace|40}}&lt;br /&gt;
|[[Open source náhrada MS Small Business server 2003 so sharepoint services (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Špánik Juraj, Bc.&lt;br /&gt;
|[[Vytvorenie aplikácie implementujúcej najdôležitejšie šifry a protokoly elektronických podpisov]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Vytvorenie aplikácie implementujúcej najdôležitejšie šifry a protokoly elektronických podpisov (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Peter Jančo, Bc.&lt;br /&gt;
|[[Softvérové PLC s OS Linux]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Softvérové PLC s OS Linux (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ján Kontrík, Bc.&lt;br /&gt;
|[[Multi-platformný simulačný program vozidla v 3D, s podporou jazyka vyššej úrovne]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Multi-platformný simulačný program vozidla v 3D, s podporou jazyka vyššej úrovne (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Marián Sova, Bc.&lt;br /&gt;
|[[Návrh a realizácia jednočipového PLC]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Návrh a realizácia jednočipového PLC (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Maceovič Martin, Bc.&lt;br /&gt;
|[[Návrh a realizácia vývojového prostredia pre jednočipové PLC]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Návrh a realizácia vývojového prostredia pre jednočipové PLC (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Juraj Kollár, Bc.&lt;br /&gt;
|[[Špecializovaný prípravok na meranie GMR štruktúr]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Špecializovaný prípravok na meranie GMR štruktúr (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ján Minárik, Bc.&lt;br /&gt;
|[[Návrh a implementácia bezpečnostnej technológie pre webové služby]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Návrh a implementácia bezpečnostnej technológie pre webové služby (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Jozef Richter, Bc.&lt;br /&gt;
|[[Softvér na optimalizáciu pohybu manipulačných systémov]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Softvér na optimalizáciu pohybu manipulačných systémov (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Tomáš Fodor, Bc.&lt;br /&gt;
|[[Softvér pre bezpečný a spoľahlivý zber obchodných dát a ich štatistické spracovanie]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Softvér pre bezpečný a spoľahlivý zber obchodných dát a ich štatistické spracovanie (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Branislav Medveď, Bc.&lt;br /&gt;
|[[Univerzálny polohovací systém s piatimi stupňami voľnosti]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Univerzálny polohovací systém s piatimi stupňami voľnosti (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Gavenda Tomáš, Bc.&lt;br /&gt;
|[[Analýza vlastností  generátorov prevádzkových tokov v simulačnom  prostredí NCTUns]]&lt;br /&gt;
|{{stav_prace|50}}&lt;br /&gt;
|[[Analýza vlastností  generátorov prevádzkových tokov v simulačnom  prostredí NCTUns (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ilkyw Boris, Bc.&lt;br /&gt;
|[[Analýza diagnostických metód motorových vozidiel v prostredí CANoe]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Analýza diagnostických metód motorových vozidiel v prostredí CANoe (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Rastislav Bohuš, Bc.&lt;br /&gt;
|[[Návrh a realizácia hydromodelovania vodných elektrární vážskej kaskády]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Návrh a realizácia hydromodelovania vodných elektrární vážskej kaskády (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Matin Hakala, Bc.&lt;br /&gt;
|[[Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ján Kondrla, Bc.&lt;br /&gt;
|[[Monitorovanie infraštruktúry siete prostredníctvom OPC klientskej aplikácie]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Monitorovanie infraštruktúry siete prostredníctvom OPC klientskej aplikácie (Zadanie)|Zadanie DP]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible sortable&amp;quot;  border=1 cellpadding=5 cellspacing=0 style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|+ Manažérstvo kvality produkcie&lt;br /&gt;
|- style=&amp;quot;background-color:yellow&amp;quot;&lt;br /&gt;
! Autor&lt;br /&gt;
! Názov práce&lt;br /&gt;
!style=&amp;quot;width:150px&amp;quot;|Stav práce&lt;br /&gt;
!style=&amp;quot;width:90px&amp;quot;|Zadanie&lt;br /&gt;
|-&lt;br /&gt;
|Michal Páleník, Bc.&lt;br /&gt;
|[[Zabezpečenie spôsobilosti výrobného procesu]]&lt;br /&gt;
|{{stav_prace|60}}&lt;br /&gt;
|[[Zabezpečenie spôsobilosti výrobného procesu (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Martina Pileková, Bc.&lt;br /&gt;
|[[Zjednotenie posudzovania kvality dielov]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Zjednotenie posudzovania kvality dielov (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Evgeniya Mikheeva, Bc.&lt;br /&gt;
|[[Zavedenie systému manažérstva kvality vo firme s hlavnými činnosťami v oblasti projektového riadenia]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Zavedenie systému manažérstva kvality vo firme s hlavnými činnosťami v oblasti projektového riadenia (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ekaterina Kadatskaya, Bc.&lt;br /&gt;
|[[Využitie vybraných metód a nástrojov manažérstva kvality pre zvyšovanie výkonnosti firmy ROSNETF]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Využitie vybraných metód a nástrojov manažérstva kvality pre zvyšovanie výkonnosti firmy ROSNETF (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Roman Minárech, Bc.&lt;br /&gt;
|[[Návrh súboru opatrení na zlepšenie kvality výroby v spoločnosti matador automotive, A.S]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Návrh súboru opatrení na zlepšenie kvality výroby v spoločnosti matador automotive, A.S (Zadanie)|Zadanie DP]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Študentské práce]]&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=5137</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=5137"/>
		<updated>2010-06-15T19:59:56Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Hardvérová realizácia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_bloku_ram_PLC.png|framed|center|Čítanie bloku pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_konfiguracie_PLC.png|framed|center|Zápis konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_konfiguracie_PLC.png|framed|center|Čítanie konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_kontrola_IIC_PLC.png|framed|center|Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia]]&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_ukazka_komunikacie.png|framed|center|Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]]&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_univerzalny_protokol_PLC.png|framed|center|Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]] &lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie &amp;lt;code&amp;gt;printf&amp;lt;/code&amp;gt; v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=5136</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=5136"/>
		<updated>2010-06-15T19:59:36Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Hardvérová realizácia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_bloku_ram_PLC.png|framed|center|Čítanie bloku pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_konfiguracie_PLC.png|framed|center|Zápis konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_konfiguracie_PLC.png|framed|center|Čítanie konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_kontrola_IIC_PLC.png|framed|center|Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia]]&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_ukazka_komunikacie.png|framed|center|Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]]&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_univerzalny_protokol_PLC.png|framed|center|Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]] &lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie &amp;lt;code&amp;gt;printf&amp;lt;/code&amp;gt; v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5135</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5135"/>
		<updated>2010-06-15T19:52:11Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Modul sériovej komunikácie */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc &amp;lt;ref&amp;gt;''avr-libc'': Reference manual 1.6.1 [online]. [cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/ref&amp;gt; (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole [[Prepojenie_1PLC_s_počítačom#Komunika.C4.8Dn.C3.BD_protokol|Komunikačný protokol]]) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku:&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Virtualna_ram_1PLC.png|framed|center|Rozdelenie virtuálnej pamäte]]&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zaloha_ram_1PLC.png|framed|center|Záloha pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
Je to časť schémy riadiacej jednotky. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozdelenie_pamate_T_1PLC.png|framed|center|Rozdelenie pamäte T]]&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu [[Prepojenie_1PLC_s_počítačom#Univerz.C3.A1lny_protokol|Univerzálny protokol]])&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5134</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5134"/>
		<updated>2010-06-15T19:46:20Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Modul komunikácie s&amp;amp;nbsp;perifériami */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc &amp;lt;ref&amp;gt;''avr-libc'': Reference manual 1.6.1 [online]. [cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/ref&amp;gt; (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku:&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Virtualna_ram_1PLC.png|framed|center|Rozdelenie virtuálnej pamäte]]&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zaloha_ram_1PLC.png|framed|center|Záloha pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
Je to časť schémy riadiacej jednotky. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozdelenie_pamate_T_1PLC.png|framed|center|Rozdelenie pamäte T]]&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu [[Prepojenie_1PLC_s_počítačom#Univerz.C3.A1lny_protokol|Univerzálny protokol]])&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5133</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5133"/>
		<updated>2010-06-15T19:41:40Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Záloha RAM pri výpadku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc &amp;lt;ref&amp;gt;''avr-libc'': Reference manual 1.6.1 [online]. [cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/ref&amp;gt; (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku:&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Virtualna_ram_1PLC.png|framed|center|Rozdelenie virtuálnej pamäte]]&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zaloha_ram_1PLC.png|framed|center|Záloha pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
Je to časť schémy riadiacej jednotky. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozdelenie_pamate_T_1PLC.png|framed|center|Rozdelenie pamäte T]]&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu \ref{sec:uni_protokol})&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5132</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5132"/>
		<updated>2010-06-15T19:38:27Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Modul prístupu k&amp;amp;nbsp;pamäti údajov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc &amp;lt;ref&amp;gt;''avr-libc'': Reference manual 1.6.1 [online]. [cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/ref&amp;gt; (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku:&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Virtualna_ram_1PLC.png|framed|center|Rozdelenie virtuálnej pamäte]]&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zaloha_ram_1PLC.png|framed|center|Záloha pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
Je to časť schémy riadiacej jednotky uvedenej v&amp;amp;nbsp;prílohe \ref{sec:sch_rj}. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozdelenie_pamate_T_1PLC.png|framed|center|Rozdelenie pamäte T]]&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu \ref{sec:uni_protokol})&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5130</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=5130"/>
		<updated>2010-06-15T19:34:58Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /*  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc &amp;lt;ref&amp;gt;''avr-libc'': Reference manual 1.6.1 [online]. [cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/ref&amp;gt; (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku \ref{obr:rozdelenie_ram}.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Virtualna_ram_1PLC.png|framed|center|Rozdelenie virtuálnej pamäte]]&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zaloha_ram_1PLC.png|framed|center|Záloha pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
Je to časť schémy riadiacej jednotky uvedenej v&amp;amp;nbsp;prílohe \ref{sec:sch_rj}. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozdelenie_pamate_T_1PLC.png|framed|center|Rozdelenie pamäte T]]&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu \ref{sec:uni_protokol})&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Hardv%C3%A9r_(jedno%C4%8Dipov%C3%A9_PLC)&amp;diff=5128</id>
		<title>Hardvér (jednočipové PLC)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Hardv%C3%A9r_(jedno%C4%8Dipov%C3%A9_PLC)&amp;diff=5128"/>
		<updated>2010-06-15T19:28:26Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /*  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Popis mikrokontroléra AVR==&lt;br /&gt;
Rodina Atmel AVR sú 8-bitové RISC mikrokontroléry s&amp;amp;nbsp;harwardskou štruktúrou (to znamená oddelenú pamäť programu a pamäť dát). &lt;br /&gt;
&lt;br /&gt;
	Za zrodom AVR stoja dvaja študenti z&amp;amp;nbsp;Nórskeho technického inštitútu: Alf-Egil Bogen a Vegard Wollan. Skratka AVR je zložená zo začiatočných písmen mien autorov a názvu arcitektúry (Alf Vegard RISC) ale oficiálne znamená Advanced Virtual RISC.&lt;br /&gt;
	&lt;br /&gt;
	Jadro AVR sa podobá jadru väčšiny RISC-procesorov. AVR jadro sa skladá z&amp;amp;nbsp;32 rovnakých 8-bitových registrov, ktoré môžu obsahovať dáta alebo adresy. Posledných 6 registrov môžeme použiť vo dvojiciach ako ukazatele adresy pre nepriame adresovanie pamäti dát (16-bitové adresy).&lt;br /&gt;
&lt;br /&gt;
	AVR architektúra má 5 adresovacích módov pre pamäť dát: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;priame adresovanie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie s&amp;amp;nbsp;posunutím (6-bitový posun)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepiame adresovanie s&amp;amp;nbsp;dekrementáciou ukazateľa adresy pred spracovaním inštrukcie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie s&amp;amp;nbsp;inkrementáciou ukazateľa adresy po spracovaní inštrukcie&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Registre sú zobrazované priamo do pamäti dát. Preto je možné s každým registrom zaobchádzať ako s&amp;amp;nbsp;akýmkoľvek iným pamäťovým miestom. Rozdelenie pamäti dát je na obrázku [sem vložiť odkaz na literatúru].&lt;br /&gt;
&lt;br /&gt;
[[Súbor:rozdelenie_ram_avr.png|framed|center|Rozdelenie pamäti dát&amp;lt;ref name=&amp;quot;m8&amp;quot;&amp;gt;Atmel: Katalógový list ATMega 8. ATMEL Corporation, 2003 [http://www.atmel.com/atmel/acrobat/2486s.pdf]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
	Pamäť programu je dostupná pomocou dvojstupňovej pipeline. To znamená, že keď sa inštrukcia začína vykonávať, ďalšia je už pripravená k&amp;amp;nbsp;spracovaniu. Táto konštrukcia umožňuje spracovávať inštrukcie vždy v&amp;amp;nbsp;jednom hodinovom cykle. Pamäť programu je rozdelená na 2 časti:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Aplikačná časť pamäte programu – slúži na uloženie užívateľského programu.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Boot sekcia pamäte programu – slúži na uloženie programu, ktorý má prepisovať užívateľskú časť programu.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad základných vlastností mikrokontrolérov tejto rodiny sa nachádza v&amp;amp;nbsp;nasledujúcej tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Prehľad vlastností mikrokontrolérov rady ATMega&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!ATMega 8&lt;br /&gt;
!ATMega 16&lt;br /&gt;
!ATMega 32&lt;br /&gt;
!ATMega 128&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte programu &lt;br /&gt;
| 8kiB &lt;br /&gt;
| 16kiB &lt;br /&gt;
| 32kiB &lt;br /&gt;
| 128kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte programu &lt;br /&gt;
| 8kiB&lt;br /&gt;
| 16kiB &lt;br /&gt;
| 32kiB &lt;br /&gt;
| 128kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte údajov &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 2kiB &lt;br /&gt;
| 4kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte EEPROM &lt;br /&gt;
| 512B &lt;br /&gt;
| 512B &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 4kiB&lt;br /&gt;
|-&lt;br /&gt;
| Počet 8-bitových časovačov &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Počet 16-bitových časovačov &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
|-&lt;br /&gt;
| Počet PWM kanálov &lt;br /&gt;
| 3 &lt;br /&gt;
| 4 &lt;br /&gt;
| 4 &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Počet kanálov A/D prevodníka &lt;br /&gt;
| 5 (10bit) &lt;br /&gt;
| 8 (10bit) &lt;br /&gt;
| 8 (10bit) &lt;br /&gt;
| 8 (10bit)&lt;br /&gt;
|-&lt;br /&gt;
| Počet sériových kanálov UART &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
|-&lt;br /&gt;
| Zbernica I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Rozhranie SPI &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Watchdog &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Analógový komparátor &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Počet vstupov externých prerušení &lt;br /&gt;
| 2 &lt;br /&gt;
| 3 &lt;br /&gt;
| 3 &lt;br /&gt;
| 8 &lt;br /&gt;
|-&lt;br /&gt;
| Maximálny výpočtový výkon &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
|-&lt;br /&gt;
| Počet digitálnych vstupno/výstupných vodičov &lt;br /&gt;
| 23 &lt;br /&gt;
| 32 &lt;br /&gt;
| 32 &lt;br /&gt;
| 53 &lt;br /&gt;
|-&lt;br /&gt;
| Púzdro &lt;br /&gt;
| DIP 32 &amp;lt;br/&amp;gt; TQFP 32 &lt;br /&gt;
| DIP 40 &amp;lt;br/&amp;gt; TQFP 44&lt;br /&gt;
| DIP 40 &amp;lt;br/&amp;gt; TQFP 44 &lt;br /&gt;
| TQFP 64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Zapojenie vývodov==&lt;br /&gt;
Zapojenie vývodov jednotlivých mikrokontrolérov uvedených v&amp;amp;nbsp;tabuľke vyššie je uvedené na nasledujúcich obrázkoch:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m8.png|framed|center|Zapojenie vývodov ATMega 8&amp;lt;ref name=&amp;quot;m8&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m16_32.png|framed|center|Zapojenie vývodov ATMega 16&amp;lt;ref&amp;gt;Atmel: Katalógový list ATMega 16. ATMEL Corporation, 2003 [http://www.atmel.com/atmel/acrobat/doc2466.pdf]&amp;lt;/ref&amp;gt; a ATMega 32&amp;lt;ref&amp;gt;Atmel: Katalógový list ATMega 32. ATMEL Corporation, 2003 [http://www.atmel.com/atmel/acrobat/doc2466.pdf]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m128.png|framed|center|Zapojenie vývodov ATMega 128&amp;lt;ref&amp;gt;Atmel: Katalógový list ATMega 128. ATMEL Corporation, 2003 [http://www.atmel.com/atmel/acrobat/doc2467.pdf]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==Vlastnosti verzií==&lt;br /&gt;
V&amp;amp;nbsp;nasledujúcej tabuľke sú rozpísané vlastnosti jednotlivých PLC založených na mikrokontroléroch opísaných v&amp;amp;nbsp;predchádzajúcej kapitole.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Prehľad vlastností verzií&lt;br /&gt;
|-&lt;br /&gt;
! Založené na&lt;br /&gt;
! ATMega 8 &lt;br /&gt;
! ATMega 16 &lt;br /&gt;
! ATMega 32 &lt;br /&gt;
! ATMega 128&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť P &lt;br /&gt;
| 4B &lt;br /&gt;
| 4B &lt;br /&gt;
| 4B &lt;br /&gt;
| 7B&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť PA &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť SP &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B&lt;br /&gt;
|-&lt;br /&gt;
| Počet 1ms časovačov &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Počet 10ms časovačov &lt;br /&gt;
| 8 &lt;br /&gt;
| 8 &lt;br /&gt;
| 32 &lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| Počet 100ms časovačov &lt;br /&gt;
| 22 &lt;br /&gt;
| 22 &lt;br /&gt;
| 92 &lt;br /&gt;
| 92&lt;br /&gt;
|-&lt;br /&gt;
| Počet čítačov &lt;br /&gt;
| 32 &lt;br /&gt;
| 32 &lt;br /&gt;
| 128 &lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť V &lt;br /&gt;
| 570B &lt;br /&gt;
| 570B &lt;br /&gt;
| 720B &lt;br /&gt;
| 2800B&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte pre program &lt;br /&gt;
| 4860B &lt;br /&gt;
| 13055B &lt;br /&gt;
| 25600B &lt;br /&gt;
| 122600B&lt;br /&gt;
|-&lt;br /&gt;
| Float operácie &lt;br /&gt;
| nie &lt;br /&gt;
| nie &lt;br /&gt;
| áno &lt;br /&gt;
| áno&lt;br /&gt;
|-&lt;br /&gt;
| Pripojiteľnosť periférii &lt;br /&gt;
| nie &lt;br /&gt;
| nie &lt;br /&gt;
| áno &lt;br /&gt;
| áno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Hardv%C3%A9r_(jedno%C4%8Dipov%C3%A9_PLC)&amp;diff=5126</id>
		<title>Hardvér (jednočipové PLC)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Hardv%C3%A9r_(jedno%C4%8Dipov%C3%A9_PLC)&amp;diff=5126"/>
		<updated>2010-06-15T19:19:41Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /*  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Popis mikrokontroléra AVR==&lt;br /&gt;
Rodina Atmel AVR sú 8-bitové RISC mikrokontroléry s&amp;amp;nbsp;harwardskou štruktúrou (to znamená oddelenú pamäť programu a pamäť dát). &lt;br /&gt;
&lt;br /&gt;
	Za zrodom AVR stoja dvaja študenti z&amp;amp;nbsp;Nórskeho technického inštitútu: Alf-Egil Bogen a Vegard Wollan. Skratka AVR je zložená zo začiatočných písmen mien autorov a názvu arcitektúry (Alf Vegard RISC) ale oficiálne znamená Advanced Virtual RISC.&lt;br /&gt;
	&lt;br /&gt;
	Jadro AVR sa podobá jadru väčšiny RISC-procesorov. AVR jadro sa skladá z&amp;amp;nbsp;32 rovnakých 8-bitových registrov, ktoré môžu obsahovať dáta alebo adresy. Posledných 6 registrov môžeme použiť vo dvojiciach ako ukazatele adresy pre nepriame adresovanie pamäti dát (16-bitové adresy).&lt;br /&gt;
&lt;br /&gt;
	AVR architektúra má 5 adresovacích módov pre pamäť dát: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;priame adresovanie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie s&amp;amp;nbsp;posunutím (6-bitový posun)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepiame adresovanie s&amp;amp;nbsp;dekrementáciou ukazateľa adresy pred spracovaním inštrukcie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie s&amp;amp;nbsp;inkrementáciou ukazateľa adresy po spracovaní inštrukcie&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Registre sú zobrazované priamo do pamäti dát. Preto je možné s každým registrom zaobchádzať ako s&amp;amp;nbsp;akýmkoľvek iným pamäťovým miestom. Rozdelenie pamäti dát je na obrázku [sem vložiť odkaz na literatúru].&lt;br /&gt;
&lt;br /&gt;
[[Súbor:rozdelenie_ram_avr.png|framed|center|Rozdelenie pamäti dát]]&lt;br /&gt;
&lt;br /&gt;
	Pamäť programu je dostupná pomocou dvojstupňovej pipeline. To znamená, že keď sa inštrukcia začína vykonávať, ďalšia je už pripravená k&amp;amp;nbsp;spracovaniu. Táto konštrukcia umožňuje spracovávať inštrukcie vždy v&amp;amp;nbsp;jednom hodinovom cykle. Pamäť programu je rozdelená na 2 časti:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Aplikačná časť pamäte programu – slúži na uloženie užívateľského programu.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Boot sekcia pamäte programu – slúži na uloženie programu, ktorý má prepisovať užívateľskú časť programu.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad základných vlastností mikrokontrolérov tejto rodiny sa nachádza v&amp;amp;nbsp;nasledujúcej tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Prehľad vlastností mikrokontrolérov rady ATMega&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!ATMega 8&lt;br /&gt;
!ATMega 16&lt;br /&gt;
!ATMega 32&lt;br /&gt;
!ATMega 128&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte programu &lt;br /&gt;
| 8kiB &lt;br /&gt;
| 16kiB &lt;br /&gt;
| 32kiB &lt;br /&gt;
| 128kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte programu &lt;br /&gt;
| 8kiB&lt;br /&gt;
| 16kiB &lt;br /&gt;
| 32kiB &lt;br /&gt;
| 128kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte údajov &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 2kiB &lt;br /&gt;
| 4kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte EEPROM &lt;br /&gt;
| 512B &lt;br /&gt;
| 512B &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 4kiB&lt;br /&gt;
|-&lt;br /&gt;
| Počet 8-bitových časovačov &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Počet 16-bitových časovačov &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
|-&lt;br /&gt;
| Počet PWM kanálov &lt;br /&gt;
| 3 &lt;br /&gt;
| 4 &lt;br /&gt;
| 4 &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Počet kanálov A/D prevodníka &lt;br /&gt;
| 5 (10bit) &lt;br /&gt;
| 8 (10bit) &lt;br /&gt;
| 8 (10bit) &lt;br /&gt;
| 8 (10bit)&lt;br /&gt;
|-&lt;br /&gt;
| Počet sériových kanálov UART &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
|-&lt;br /&gt;
| Zbernica I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Rozhranie SPI &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Watchdog &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Analógový komparátor &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Počet vstupov externých prerušení &lt;br /&gt;
| 2 &lt;br /&gt;
| 3 &lt;br /&gt;
| 3 &lt;br /&gt;
| 8 &lt;br /&gt;
|-&lt;br /&gt;
| Maximálny výpočtový výkon &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
|-&lt;br /&gt;
| Počet digitálnych vstupno/výstupných vodičov &lt;br /&gt;
| 23 &lt;br /&gt;
| 32 &lt;br /&gt;
| 32 &lt;br /&gt;
| 53 &lt;br /&gt;
|-&lt;br /&gt;
| Púzdro &lt;br /&gt;
| DIP 32 &amp;lt;br/&amp;gt; TQFP 32 &lt;br /&gt;
| DIP 40 &amp;lt;br/&amp;gt; TQFP 44&lt;br /&gt;
| DIP 40 &amp;lt;br/&amp;gt; TQFP 44 &lt;br /&gt;
| TQFP 64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Zapojenie vývodov==&lt;br /&gt;
Zapojenie vývodov jednotlivých mikrokontrolérov uvedených v&amp;amp;nbsp;tabuľke vyššie je uvedené na nasledujúcich obrázkoch:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m8.png|framed|center|Zapojenie vývodov ATMega 8&amp;lt;ref&amp;gt;Atmel: Katalógový list ATMega 8. ATMEL Corporation, 2003 [http://www.atmel.com/atmel/acrobat/2486s.pdf]&amp;lt;/ref&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m16_32.png|framed|center|Zapojenie vývodov ATMega 16&amp;lt;ref&amp;gt;Atmel: Katalógový list ATMega 16. ATMEL Corporation, 2003 [http://www.atmel.com/atmel/acrobat/doc2466.pdf]&amp;lt;/ref&amp;gt; a ATMega 32&amp;lt;ref&amp;gt;Atmel: Katalógový list ATMega 32. ATMEL Corporation, 2003 [http://www.atmel.com/atmel/acrobat/doc2466.pdf]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m128.png|framed|center|Zapojenie vývodov ATMega 128&amp;lt;ref&amp;gt;Atmel: Katalógový list ATMega 128. ATMEL Corporation, 2003 [http://www.atmel.com/atmel/acrobat/doc2467.pdf]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
==Vlastnosti verzií==&lt;br /&gt;
V&amp;amp;nbsp;nasledujúcej tabuľke sú rozpísané vlastnosti jednotlivých PLC založených na mikrokontroléroch opísaných v&amp;amp;nbsp;predchádzajúcej kapitole.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Prehľad vlastností verzií&lt;br /&gt;
|-&lt;br /&gt;
! Založené na&lt;br /&gt;
! ATMega 8 &lt;br /&gt;
! ATMega 16 &lt;br /&gt;
! ATMega 32 &lt;br /&gt;
! ATMega 128&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť P &lt;br /&gt;
| 4B &lt;br /&gt;
| 4B &lt;br /&gt;
| 4B &lt;br /&gt;
| 7B&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť PA &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť SP &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B&lt;br /&gt;
|-&lt;br /&gt;
| Počet 1ms časovačov &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Počet 10ms časovačov &lt;br /&gt;
| 8 &lt;br /&gt;
| 8 &lt;br /&gt;
| 32 &lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| Počet 100ms časovačov &lt;br /&gt;
| 22 &lt;br /&gt;
| 22 &lt;br /&gt;
| 92 &lt;br /&gt;
| 92&lt;br /&gt;
|-&lt;br /&gt;
| Počet čítačov &lt;br /&gt;
| 32 &lt;br /&gt;
| 32 &lt;br /&gt;
| 128 &lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť V &lt;br /&gt;
| 570B &lt;br /&gt;
| 570B &lt;br /&gt;
| 720B &lt;br /&gt;
| 2800B&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte pre program &lt;br /&gt;
| 4860B &lt;br /&gt;
| 13055B &lt;br /&gt;
| 25600B &lt;br /&gt;
| 122600B&lt;br /&gt;
|-&lt;br /&gt;
| Float operácie &lt;br /&gt;
| nie &lt;br /&gt;
| nie &lt;br /&gt;
| áno &lt;br /&gt;
| áno&lt;br /&gt;
|-&lt;br /&gt;
| Pripojiteľnosť periférii &lt;br /&gt;
| nie &lt;br /&gt;
| nie &lt;br /&gt;
| áno &lt;br /&gt;
| áno&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;references/&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Hardv%C3%A9r_(jedno%C4%8Dipov%C3%A9_PLC)&amp;diff=5125</id>
		<title>Hardvér (jednočipové PLC)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Hardv%C3%A9r_(jedno%C4%8Dipov%C3%A9_PLC)&amp;diff=5125"/>
		<updated>2010-06-15T19:13:20Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Zapojenie vývodov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Popis mikrokontroléra AVR==&lt;br /&gt;
Rodina Atmel AVR sú 8-bitové RISC mikrokontroléry s&amp;amp;nbsp;harwardskou štruktúrou (to znamená oddelenú pamäť programu a pamäť dát). &lt;br /&gt;
&lt;br /&gt;
	Za zrodom AVR stoja dvaja študenti z&amp;amp;nbsp;Nórskeho technického inštitútu: Alf-Egil Bogen a Vegard Wollan. Skratka AVR je zložená zo začiatočných písmen mien autorov a názvu arcitektúry (Alf Vegard RISC) ale oficiálne znamená Advanced Virtual RISC.&lt;br /&gt;
	&lt;br /&gt;
	Jadro AVR sa podobá jadru väčšiny RISC-procesorov. AVR jadro sa skladá z&amp;amp;nbsp;32 rovnakých 8-bitových registrov, ktoré môžu obsahovať dáta alebo adresy. Posledných 6 registrov môžeme použiť vo dvojiciach ako ukazatele adresy pre nepriame adresovanie pamäti dát (16-bitové adresy).&lt;br /&gt;
&lt;br /&gt;
	AVR architektúra má 5 adresovacích módov pre pamäť dát: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;priame adresovanie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie s&amp;amp;nbsp;posunutím (6-bitový posun)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepiame adresovanie s&amp;amp;nbsp;dekrementáciou ukazateľa adresy pred spracovaním inštrukcie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie s&amp;amp;nbsp;inkrementáciou ukazateľa adresy po spracovaní inštrukcie&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Registre sú zobrazované priamo do pamäti dát. Preto je možné s každým registrom zaobchádzať ako s&amp;amp;nbsp;akýmkoľvek iným pamäťovým miestom. Rozdelenie pamäti dát je na obrázku [sem vložiť odkaz na literatúru].&lt;br /&gt;
&lt;br /&gt;
[[Súbor:rozdelenie_ram_avr.png|framed|center|Rozdelenie pamäti dát]]&lt;br /&gt;
&lt;br /&gt;
	Pamäť programu je dostupná pomocou dvojstupňovej pipeline. To znamená, že keď sa inštrukcia začína vykonávať, ďalšia je už pripravená k&amp;amp;nbsp;spracovaniu. Táto konštrukcia umožňuje spracovávať inštrukcie vždy v&amp;amp;nbsp;jednom hodinovom cykle. Pamäť programu je rozdelená na 2 časti:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Aplikačná časť pamäte programu – slúži na uloženie užívateľského programu.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Boot sekcia pamäte programu – slúži na uloženie programu, ktorý má prepisovať užívateľskú časť programu.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad základných vlastností mikrokontrolérov tejto rodiny sa nachádza v&amp;amp;nbsp;nasledujúcej tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Prehľad vlastností mikrokontrolérov rady ATMega&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!ATMega 8&lt;br /&gt;
!ATMega 16&lt;br /&gt;
!ATMega 32&lt;br /&gt;
!ATMega 128&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte programu &lt;br /&gt;
| 8kiB &lt;br /&gt;
| 16kiB &lt;br /&gt;
| 32kiB &lt;br /&gt;
| 128kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte programu &lt;br /&gt;
| 8kiB&lt;br /&gt;
| 16kiB &lt;br /&gt;
| 32kiB &lt;br /&gt;
| 128kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte údajov &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 2kiB &lt;br /&gt;
| 4kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte EEPROM &lt;br /&gt;
| 512B &lt;br /&gt;
| 512B &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 4kiB&lt;br /&gt;
|-&lt;br /&gt;
| Počet 8-bitových časovačov &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Počet 16-bitových časovačov &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
|-&lt;br /&gt;
| Počet PWM kanálov &lt;br /&gt;
| 3 &lt;br /&gt;
| 4 &lt;br /&gt;
| 4 &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Počet kanálov A/D prevodníka &lt;br /&gt;
| 5 (10bit) &lt;br /&gt;
| 8 (10bit) &lt;br /&gt;
| 8 (10bit) &lt;br /&gt;
| 8 (10bit)&lt;br /&gt;
|-&lt;br /&gt;
| Počet sériových kanálov UART &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
|-&lt;br /&gt;
| Zbernica I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Rozhranie SPI &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Watchdog &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Analógový komparátor &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Počet vstupov externých prerušení &lt;br /&gt;
| 2 &lt;br /&gt;
| 3 &lt;br /&gt;
| 3 &lt;br /&gt;
| 8 &lt;br /&gt;
|-&lt;br /&gt;
| Maximálny výpočtový výkon &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
|-&lt;br /&gt;
| Počet digitálnych vstupno/výstupných vodičov &lt;br /&gt;
| 23 &lt;br /&gt;
| 32 &lt;br /&gt;
| 32 &lt;br /&gt;
| 53 &lt;br /&gt;
|-&lt;br /&gt;
| Púzdro &lt;br /&gt;
| DIP 32 &amp;lt;br/&amp;gt; TQFP 32 &lt;br /&gt;
| DIP 40 &amp;lt;br/&amp;gt; TQFP 44&lt;br /&gt;
| DIP 40 &amp;lt;br/&amp;gt; TQFP 44 &lt;br /&gt;
| TQFP 64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Zapojenie vývodov==&lt;br /&gt;
Zapojenie vývodov jednotlivých mikrokontrolérov uvedených v&amp;amp;nbsp;tabuľke vyššie je uvedené na nasledujúcich obrázkoch:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m8.png|framed|center|Zapojenie vývodov ATMega 8&amp;lt;ref&amp;gt;[Atmel: Katalógový list ATMega 8. ATMEL Corporation, 2003|http://www.atmel.com/atmel/acrobat/2486s.pdf]&amp;lt;/ref&amp;gt;]] &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m16_32.png|framed|center|Zapojenie vývodov ATMega 16 a ATMega 32]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m128.png|framed|center|Zapojenie vývodov ATMega 128]]&lt;br /&gt;
&lt;br /&gt;
==Vlastnosti verzií==&lt;br /&gt;
V&amp;amp;nbsp;nasledujúcej tabuľke sú rozpísané vlastnosti jednotlivých PLC založených na mikrokontroléroch opísaných v&amp;amp;nbsp;predchádzajúcej kapitole.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Prehľad vlastností verzií&lt;br /&gt;
|-&lt;br /&gt;
! Založené na&lt;br /&gt;
! ATMega 8 &lt;br /&gt;
! ATMega 16 &lt;br /&gt;
! ATMega 32 &lt;br /&gt;
! ATMega 128&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť P &lt;br /&gt;
| 4B &lt;br /&gt;
| 4B &lt;br /&gt;
| 4B &lt;br /&gt;
| 7B&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť PA &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť SP &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B&lt;br /&gt;
|-&lt;br /&gt;
| Počet 1ms časovačov &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Počet 10ms časovačov &lt;br /&gt;
| 8 &lt;br /&gt;
| 8 &lt;br /&gt;
| 32 &lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| Počet 100ms časovačov &lt;br /&gt;
| 22 &lt;br /&gt;
| 22 &lt;br /&gt;
| 92 &lt;br /&gt;
| 92&lt;br /&gt;
|-&lt;br /&gt;
| Počet čítačov &lt;br /&gt;
| 32 &lt;br /&gt;
| 32 &lt;br /&gt;
| 128 &lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť V &lt;br /&gt;
| 570B &lt;br /&gt;
| 570B &lt;br /&gt;
| 720B &lt;br /&gt;
| 2800B&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte pre program &lt;br /&gt;
| 4860B &lt;br /&gt;
| 13055B &lt;br /&gt;
| 25600B &lt;br /&gt;
| 122600B&lt;br /&gt;
|-&lt;br /&gt;
| Float operácie &lt;br /&gt;
| nie &lt;br /&gt;
| nie &lt;br /&gt;
| áno &lt;br /&gt;
| áno&lt;br /&gt;
|-&lt;br /&gt;
| Pripojiteľnosť periférii &lt;br /&gt;
| nie &lt;br /&gt;
| nie &lt;br /&gt;
| áno &lt;br /&gt;
| áno&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Hardv%C3%A9r_(jedno%C4%8Dipov%C3%A9_PLC)&amp;diff=5124</id>
		<title>Hardvér (jednočipové PLC)</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Hardv%C3%A9r_(jedno%C4%8Dipov%C3%A9_PLC)&amp;diff=5124"/>
		<updated>2010-06-15T19:10:49Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /*  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|2|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Popis mikrokontroléra AVR==&lt;br /&gt;
Rodina Atmel AVR sú 8-bitové RISC mikrokontroléry s&amp;amp;nbsp;harwardskou štruktúrou (to znamená oddelenú pamäť programu a pamäť dát). &lt;br /&gt;
&lt;br /&gt;
	Za zrodom AVR stoja dvaja študenti z&amp;amp;nbsp;Nórskeho technického inštitútu: Alf-Egil Bogen a Vegard Wollan. Skratka AVR je zložená zo začiatočných písmen mien autorov a názvu arcitektúry (Alf Vegard RISC) ale oficiálne znamená Advanced Virtual RISC.&lt;br /&gt;
	&lt;br /&gt;
	Jadro AVR sa podobá jadru väčšiny RISC-procesorov. AVR jadro sa skladá z&amp;amp;nbsp;32 rovnakých 8-bitových registrov, ktoré môžu obsahovať dáta alebo adresy. Posledných 6 registrov môžeme použiť vo dvojiciach ako ukazatele adresy pre nepriame adresovanie pamäti dát (16-bitové adresy).&lt;br /&gt;
&lt;br /&gt;
	AVR architektúra má 5 adresovacích módov pre pamäť dát: &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;priame adresovanie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie s&amp;amp;nbsp;posunutím (6-bitový posun)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepiame adresovanie s&amp;amp;nbsp;dekrementáciou ukazateľa adresy pred spracovaním inštrukcie&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;nepriame adresovanie s&amp;amp;nbsp;inkrementáciou ukazateľa adresy po spracovaní inštrukcie&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	Registre sú zobrazované priamo do pamäti dát. Preto je možné s každým registrom zaobchádzať ako s&amp;amp;nbsp;akýmkoľvek iným pamäťovým miestom. Rozdelenie pamäti dát je na obrázku [sem vložiť odkaz na literatúru].&lt;br /&gt;
&lt;br /&gt;
[[Súbor:rozdelenie_ram_avr.png|framed|center|Rozdelenie pamäti dát]]&lt;br /&gt;
&lt;br /&gt;
	Pamäť programu je dostupná pomocou dvojstupňovej pipeline. To znamená, že keď sa inštrukcia začína vykonávať, ďalšia je už pripravená k&amp;amp;nbsp;spracovaniu. Táto konštrukcia umožňuje spracovávať inštrukcie vždy v&amp;amp;nbsp;jednom hodinovom cykle. Pamäť programu je rozdelená na 2 časti:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Aplikačná časť pamäte programu – slúži na uloženie užívateľského programu.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;Boot sekcia pamäte programu – slúži na uloženie programu, ktorý má prepisovať užívateľskú časť programu.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad základných vlastností mikrokontrolérov tejto rodiny sa nachádza v&amp;amp;nbsp;nasledujúcej tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Prehľad vlastností mikrokontrolérov rady ATMega&lt;br /&gt;
|-&lt;br /&gt;
!&lt;br /&gt;
!ATMega 8&lt;br /&gt;
!ATMega 16&lt;br /&gt;
!ATMega 32&lt;br /&gt;
!ATMega 128&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte programu &lt;br /&gt;
| 8kiB &lt;br /&gt;
| 16kiB &lt;br /&gt;
| 32kiB &lt;br /&gt;
| 128kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte programu &lt;br /&gt;
| 8kiB&lt;br /&gt;
| 16kiB &lt;br /&gt;
| 32kiB &lt;br /&gt;
| 128kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte údajov &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 2kiB &lt;br /&gt;
| 4kiB&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte EEPROM &lt;br /&gt;
| 512B &lt;br /&gt;
| 512B &lt;br /&gt;
| 1kiB &lt;br /&gt;
| 4kiB&lt;br /&gt;
|-&lt;br /&gt;
| Počet 8-bitových časovačov &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 2&lt;br /&gt;
|-&lt;br /&gt;
| Počet 16-bitových časovačov &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
|-&lt;br /&gt;
| Počet PWM kanálov &lt;br /&gt;
| 3 &lt;br /&gt;
| 4 &lt;br /&gt;
| 4 &lt;br /&gt;
| 6&lt;br /&gt;
|-&lt;br /&gt;
| Počet kanálov A/D prevodníka &lt;br /&gt;
| 5 (10bit) &lt;br /&gt;
| 8 (10bit) &lt;br /&gt;
| 8 (10bit) &lt;br /&gt;
| 8 (10bit)&lt;br /&gt;
|-&lt;br /&gt;
| Počet sériových kanálov UART &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 1 &lt;br /&gt;
| 2 &lt;br /&gt;
|-&lt;br /&gt;
| Zbernica I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Rozhranie SPI &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Watchdog &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Analógový komparátor &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
| áno &lt;br /&gt;
|-&lt;br /&gt;
| Počet vstupov externých prerušení &lt;br /&gt;
| 2 &lt;br /&gt;
| 3 &lt;br /&gt;
| 3 &lt;br /&gt;
| 8 &lt;br /&gt;
|-&lt;br /&gt;
| Maximálny výpočtový výkon &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
| 16Mips &lt;br /&gt;
|-&lt;br /&gt;
| Počet digitálnych vstupno/výstupných vodičov &lt;br /&gt;
| 23 &lt;br /&gt;
| 32 &lt;br /&gt;
| 32 &lt;br /&gt;
| 53 &lt;br /&gt;
|-&lt;br /&gt;
| Púzdro &lt;br /&gt;
| DIP 32 &amp;lt;br/&amp;gt; TQFP 32 &lt;br /&gt;
| DIP 40 &amp;lt;br/&amp;gt; TQFP 44&lt;br /&gt;
| DIP 40 &amp;lt;br/&amp;gt; TQFP 44 &lt;br /&gt;
| TQFP 64&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Zapojenie vývodov==&lt;br /&gt;
Zapojenie vývodov jednotlivých mikrokontrolérov uvedených v&amp;amp;nbsp;tabuľke vyššie je uvedené na nasledujúcich obrázkoch:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m8.png|framed|center|Zapojenie vývodov ATMega 8]] &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m16_32.png|framed|center|Zapojenie vývodov ATMega 16 a ATMega 32]]&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Vyvody_m128.png|framed|center|Zapojenie vývodov ATMega 128]]&lt;br /&gt;
&lt;br /&gt;
==Vlastnosti verzií==&lt;br /&gt;
V&amp;amp;nbsp;nasledujúcej tabuľke sú rozpísané vlastnosti jednotlivých PLC založených na mikrokontroléroch opísaných v&amp;amp;nbsp;predchádzajúcej kapitole.&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Prehľad vlastností verzií&lt;br /&gt;
|-&lt;br /&gt;
! Založené na&lt;br /&gt;
! ATMega 8 &lt;br /&gt;
! ATMega 16 &lt;br /&gt;
! ATMega 32 &lt;br /&gt;
! ATMega 128&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť P &lt;br /&gt;
| 4B &lt;br /&gt;
| 4B &lt;br /&gt;
| 4B &lt;br /&gt;
| 7B&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť PA &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B &lt;br /&gt;
| 14B&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť SP &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B &lt;br /&gt;
| 20B&lt;br /&gt;
|-&lt;br /&gt;
| Počet 1ms časovačov &lt;br /&gt;
| 2 &lt;br /&gt;
| 2 &lt;br /&gt;
| 4 &lt;br /&gt;
| 4&lt;br /&gt;
|-&lt;br /&gt;
| Počet 10ms časovačov &lt;br /&gt;
| 8 &lt;br /&gt;
| 8 &lt;br /&gt;
| 32 &lt;br /&gt;
| 32&lt;br /&gt;
|-&lt;br /&gt;
| Počet 100ms časovačov &lt;br /&gt;
| 22 &lt;br /&gt;
| 22 &lt;br /&gt;
| 92 &lt;br /&gt;
| 92&lt;br /&gt;
|-&lt;br /&gt;
| Počet čítačov &lt;br /&gt;
| 32 &lt;br /&gt;
| 32 &lt;br /&gt;
| 128 &lt;br /&gt;
| 128&lt;br /&gt;
|-&lt;br /&gt;
| Pamäť V &lt;br /&gt;
| 570B &lt;br /&gt;
| 570B &lt;br /&gt;
| 720B &lt;br /&gt;
| 2800B&lt;br /&gt;
|-&lt;br /&gt;
| Veľkosť pamäte pre program &lt;br /&gt;
| 4860B &lt;br /&gt;
| 13055B &lt;br /&gt;
| 25600B &lt;br /&gt;
| 122600B&lt;br /&gt;
|-&lt;br /&gt;
| Float operácie &lt;br /&gt;
| nie &lt;br /&gt;
| nie &lt;br /&gt;
| áno &lt;br /&gt;
| áno&lt;br /&gt;
|-&lt;br /&gt;
| Pripojiteľnosť periférii &lt;br /&gt;
| nie &lt;br /&gt;
| nie &lt;br /&gt;
| áno &lt;br /&gt;
| áno&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4884</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4884"/>
		<updated>2010-06-01T11:54:54Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Softvérová realizácia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_bloku_ram_PLC.png|framed|center|Čítanie bloku pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_konfiguracie_PLC.png|framed|center|Zápis konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_konfiguracie_PLC.png|framed|center|Čítanie konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_kontrola_IIC_PLC.png|framed|center|Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia]]&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_ukazka_komunikacie.png|framed|center|Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]]&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_univerzalny_protokol_PLC.png|framed|center|Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]] &lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie &amp;lt;code&amp;gt;printf&amp;lt;/code&amp;gt; v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=N%C3%A1vrh_a_realiz%C3%A1cia_jedno%C4%8Dipov%C3%A9ho_PLC&amp;diff=4357</id>
		<title>Návrh a realizácia jednočipového PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=N%C3%A1vrh_a_realiz%C3%A1cia_jedno%C4%8Dipov%C3%A9ho_PLC&amp;diff=4357"/>
		<updated>2010-05-18T17:03:06Z</updated>

		<summary type="html">&lt;p&gt;Mayo: Revízia 4356 používateľa Mayo (diskusia) bola vrátená&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Marián Sova|&lt;br /&gt;
Ing. Viliam Šimovič, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|V&amp;amp;nbsp;úvode práce je spracovaná teória PLC automatov a rozobrané vlastnosti mikrokontrolérov AVR. Hlavná časť práce je venovaná návrhu operačného systému pre jednočipové PLC. Sú v&amp;amp;nbsp;nej rozpracované jednotlivé časti navrhovaného operačného systému sprístupňujúce hardvér mikrokontroléra užívateľskému programu. Ďalej sa zaoberá implementáciou príkazov jazyka STL pre použitie v&amp;amp;nbsp;mikrokontroléri. V&amp;amp;nbsp;poslednej časti je rozobrané pripojenie periférnych zariadení, návrh terminálového modulu a vstupno/výstupného modulu.&lt;br /&gt;
|This work presents a proposal of an operating system for one-chip PLC based on AVR micro-controllers. There are desribed parts of an operating system used for access of the user program to the hardware of micro-controller. In the next part it deals with an implementation of the STL language usable on the micro-controller. At the end there is a complete description of a peripheral devices connection and the proposal of a terminal and I/O module.&lt;br /&gt;
}}&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Dnes sú PLC automaty hojne využívané najmä v&amp;amp;nbsp;priemysle a automatizácii na riadenie výrobných liniek, strojov, robotov, … . Ich výhody sú ľahké programovanie, rozšíriteľnosť a prepojiteľnosť. Ich cena je však napríklad pre použitie na menej náročné úlohy (ako napríklad automatizácia v&amp;amp;nbsp;domácnosti) privysoká. Tak vznikla myšlienka spraviť PLC čo najlacnejšie. Postupnými úvahami sa zjednodušenie dostalo až do takej miery, že z&amp;amp;nbsp;toho vzniklo jednočipové PLC. Keďže v&amp;amp;nbsp;jednoduchších aplikáciach stačí spínanie malých výkonov, postačí na realizáciu obyčajný mikrokontrolér. Ak by bolo potrebné spínať vyššie výkon, nie je problém doplniť mikrokontrolér potrebnými obvodmi. Naproti mikrokontroléru bude mať takéto PLC všetky výhody „veľkých“ PLC. Teda ľahké programovanie, sledovanie bežiaceho programu a neskôr aj rozšíriteľnosť o moduly.&lt;br /&gt;
&lt;br /&gt;
Úlohou zadania je vytvoriť operačný systém, ktorý spraví z&amp;amp;nbsp;mikrokontroléra PLC. Keďže sa využije všetok hardvér mikrokontroléra je potrebné napísať funkcie, ktoré zabezpečia prístup k&amp;amp;nbsp;hardvéru.&lt;br /&gt;
&lt;br /&gt;
Ďalej je potrebné prepísať programovací jazyk používaný v&amp;amp;nbsp;PLC (jazyk STL) do jazyka mikrokontroléra (assembler pre Atmel AVR). Je potrebné navrhnúť spôsob prepojenia s&amp;amp;nbsp;počítačom a komunikačný protokol.&lt;br /&gt;
&lt;br /&gt;
Ďalšou dôležitou časťou PLC je jeho vývojové prostredie pre počítač. Bez neho by nebolo možné do PLC nahrávať program, nebolo by možné sledovať beh programu. Vývojové prostredie je popísané v&amp;amp;nbsp;práci [[Návrh a realizácia vývojového prostredia pre jednočipové PLC]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Programovateľné logické automaty=&lt;br /&gt;
Programovateľný logický automat (PLC - Programmble Logic Controller) je relatívne malý priemyselný počítač používaný pre automatizáciu procesov v&amp;amp;nbsp;reálnom čase - riadenie strojov alebo výrobných liniek v&amp;amp;nbsp;továrni. Pre PLC je charakteristické, že program sa vykonáva v&amp;amp;nbsp;cykloch. &lt;br /&gt;
&lt;br /&gt;
PLC automaty sú odlišné od bežných počítačov nielen tým, že spracovávajú program cyklicky ale aj tým, že ich periférie sú priamo prispôsobené na napojení na technologické procesy. Prevažnú časť periférií v&amp;amp;nbsp;tomto prípade tvoria digitálne vstupy (DI) a digitálne výstupy (DO). Pre ďalšie spracovanie signálov a napojenie na technológiu sú určené analógové vstupy (AI) a analógové výstupy (AO) pre spracovanie spojitých signálov. S&amp;amp;nbsp;rozvojom automatizácie v&amp;amp;nbsp;priemysle sú používané aj ďalšie moduly periférnych jednotiek pripojiteľných k&amp;amp;nbsp;PLC, ktoré sú nazývané funkčné moduly (FM) napríklad pre polohovanie, komunikačné procesory (CP) pre zber a prenos dát a ďalšie špecifické moduly podľa výrobcu konkrétneho systému.&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;hľadiska konštrukcie môžeme PLC rozdeliť na:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modulárne – jednotlivé komponenty sú rozdelené do oddelených modulov (modul CPU, modul napájania, modul vstupov, modul výstupov, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Kompaktné – systém obsahuje všetko potrebné v&amp;amp;nbsp;jednom zariadení (CPU, vstupy, výstupy, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=N%C3%A1vrh_a_realiz%C3%A1cia_jedno%C4%8Dipov%C3%A9ho_PLC&amp;diff=4356</id>
		<title>Návrh a realizácia jednočipového PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=N%C3%A1vrh_a_realiz%C3%A1cia_jedno%C4%8Dipov%C3%A9ho_PLC&amp;diff=4356"/>
		<updated>2010-05-18T17:02:12Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Marián Sova|&lt;br /&gt;
Ing. Viliam Šimovič, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomová práca&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|V&amp;amp;nbsp;úvode práce je spracovaná teória PLC automatov a rozobrané vlastnosti mikrokontrolérov AVR. Hlavná časť práce je venovaná návrhu operačného systému pre jednočipové PLC. Sú v&amp;amp;nbsp;nej rozpracované jednotlivé časti navrhovaného operačného systému sprístupňujúce hardvér mikrokontroléra užívateľskému programu. Ďalej sa zaoberá implementáciou príkazov jazyka STL pre použitie v&amp;amp;nbsp;mikrokontroléri. V&amp;amp;nbsp;poslednej časti je rozobrané pripojenie periférnych zariadení, návrh terminálového modulu a vstupno/výstupného modulu.&lt;br /&gt;
|This work presents a proposal of an operating system for one-chip PLC based on AVR micro-controllers. There are desribed parts of an operating system used for access of the user program to the hardware of micro-controller. In the next part it deals with an implementation of the STL language usable on the micro-controller. At the end there is a complete description of a peripheral devices connection and the proposal of a terminal and I/O module.&lt;br /&gt;
}}&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Dnes sú PLC automaty hojne využívané najmä v&amp;amp;nbsp;priemysle a automatizácii na riadenie výrobných liniek, strojov, robotov, … . Ich výhody sú ľahké programovanie, rozšíriteľnosť a prepojiteľnosť. Ich cena je však napríklad pre použitie na menej náročné úlohy (ako napríklad automatizácia v&amp;amp;nbsp;domácnosti) privysoká. Tak vznikla myšlienka spraviť PLC čo najlacnejšie. Postupnými úvahami sa zjednodušenie dostalo až do takej miery, že z&amp;amp;nbsp;toho vzniklo jednočipové PLC. Keďže v&amp;amp;nbsp;jednoduchších aplikáciach stačí spínanie malých výkonov, postačí na realizáciu obyčajný mikrokontrolér. Ak by bolo potrebné spínať vyššie výkon, nie je problém doplniť mikrokontrolér potrebnými obvodmi. Naproti mikrokontroléru bude mať takéto PLC všetky výhody „veľkých“ PLC. Teda ľahké programovanie, sledovanie bežiaceho programu a neskôr aj rozšíriteľnosť o moduly.&lt;br /&gt;
&lt;br /&gt;
Úlohou zadania je vytvoriť operačný systém, ktorý spraví z&amp;amp;nbsp;mikrokontroléra PLC. Keďže sa využije všetok hardvér mikrokontroléra je potrebné napísať funkcie, ktoré zabezpečia prístup k&amp;amp;nbsp;hardvéru.&lt;br /&gt;
&lt;br /&gt;
Ďalej je potrebné prepísať programovací jazyk používaný v&amp;amp;nbsp;PLC (jazyk STL) do jazyka mikrokontroléra (assembler pre Atmel AVR). Je potrebné navrhnúť spôsob prepojenia s&amp;amp;nbsp;počítačom a komunikačný protokol.&lt;br /&gt;
&lt;br /&gt;
Ďalšou dôležitou časťou PLC je jeho vývojové prostredie pre počítač. Bez neho by nebolo možné do PLC nahrávať program, nebolo by možné sledovať beh programu. Vývojové prostredie je popísané v&amp;amp;nbsp;práci [[Návrh a realizácia vývojového prostredia pre jednočipové PLC]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=Programovateľné logické automaty=&lt;br /&gt;
Programovateľný logický automat (PLC - Programmble Logic Controller) je relatívne malý priemyselný počítač používaný pre automatizáciu procesov v&amp;amp;nbsp;reálnom čase - riadenie strojov alebo výrobných liniek v&amp;amp;nbsp;továrni. Pre PLC je charakteristické, že program sa vykonáva v&amp;amp;nbsp;cykloch. &lt;br /&gt;
&lt;br /&gt;
PLC automaty sú odlišné od bežných počítačov nielen tým, že spracovávajú program cyklicky ale aj tým, že ich periférie sú priamo prispôsobené na napojení na technologické procesy. Prevažnú časť periférií v&amp;amp;nbsp;tomto prípade tvoria digitálne vstupy (DI) a digitálne výstupy (DO). Pre ďalšie spracovanie signálov a napojenie na technológiu sú určené analógové vstupy (AI) a analógové výstupy (AO) pre spracovanie spojitých signálov. S&amp;amp;nbsp;rozvojom automatizácie v&amp;amp;nbsp;priemysle sú používané aj ďalšie moduly periférnych jednotiek pripojiteľných k&amp;amp;nbsp;PLC, ktoré sú nazývané funkčné moduly (FM) napríklad pre polohovanie, komunikačné procesory (CP) pre zber a prenos dát a ďalšie špecifické moduly podľa výrobcu konkrétneho systému.&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;hľadiska konštrukcie môžeme PLC rozdeliť na:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Modulárne – jednotlivé komponenty sú rozdelené do oddelených modulov (modul CPU, modul napájania, modul vstupov, modul výstupov, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Kompaktné – systém obsahuje všetko potrebné v&amp;amp;nbsp;jednom zariadení (CPU, vstupy, výstupy, ...)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Diplomov%C3%A9_pr%C3%A1ce&amp;diff=4355</id>
		<title>Diplomové práce</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Diplomov%C3%A9_pr%C3%A1ce&amp;diff=4355"/>
		<updated>2010-05-18T17:01:30Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Ako_pisat_wikiPracu|Juraj|Fajzen}}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;mainpage_topbox&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;mainpage_pagetitle&amp;quot;&amp;gt;Diplomové práce 2009/2010&amp;lt;/div&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable sortable&amp;quot;  border=1 cellpadding=5 cellspacing=0 style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|+ Mechatronika&lt;br /&gt;
|- &lt;br /&gt;
!Autor&lt;br /&gt;
!Názov práce&lt;br /&gt;
!style=&amp;quot;width:150px&amp;quot;|Stav práce&lt;br /&gt;
!style=&amp;quot;width:90px&amp;quot;|Zadanie&lt;br /&gt;
|-&lt;br /&gt;
|Michal Janíček, Bc.&lt;br /&gt;
|[[Interaktívny simulátor DynaSim]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Interaktívny simulátor DynaSim (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Peter Loskot, Bc.&lt;br /&gt;
|[[Open source náhrada MS Small Business server 2003 so sharepoint services]]&lt;br /&gt;
|{{stav_prace|40}}&lt;br /&gt;
|[[Open source náhrada MS Small Business server 2003 so sharepoint services (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Špánik Juraj, Bc.&lt;br /&gt;
|[[Vytvorenie aplikácie implementujúcej najdôležitejšie šifry a protokoly elektronických podpisov]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Vytvorenie aplikácie implementujúcej najdôležitejšie šifry a protokoly elektronických podpisov (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Peter Jančo, Bc.&lt;br /&gt;
|[[Softvérové PLC s OS Linux]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Softvérové PLC s OS Linux (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ján Kontrík, Bc.&lt;br /&gt;
|[[Multi-platformný simulačný program vozidla v 3D, s podporou jazyka vyššej úrovne]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Multi-platformný simulačný program vozidla v 3D, s podporou jazyka vyššej úrovne (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Marián Sova, Bc.&lt;br /&gt;
|[[Návrh a realizácia jednočipového PLC]]&lt;br /&gt;
|{{stav_prace|90}}&lt;br /&gt;
|[[Návrh a realizácia jednočipového PLC (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Maceovič Martin, Bc.&lt;br /&gt;
|[[Návrh a realizácia vývojového prostredia pre jednočipové PLC]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Návrh a realizácia vývojového prostredia pre jednočipové PLC (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Juraj Kollár, Bc.&lt;br /&gt;
|[[Špecializovaný prípravok na meranie GMR štruktúr]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Špecializovaný prípravok na meranie GMR štruktúr (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ján Minárik, Bc.&lt;br /&gt;
|[[Návrh a implementácia bezpečnostnej technológie pre webové služby]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Návrh a implementácia bezpečnostnej technológie pre webové služby (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Jozef Richter, Bc.&lt;br /&gt;
|[[Softvér na optimalizáciu pohybu manipulačných systémov]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Softvér na optimalizáciu pohybu manipulačných systémov (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Tomáš Fodor, Bc.&lt;br /&gt;
|[[Softvér pre bezpečný a spoľahlivý zber obchodných dát a ich štatistické spracovanie]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Softvér pre bezpečný a spoľahlivý zber obchodných dát a ich štatistické spracovanie (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Branislav Medveď, Bc.&lt;br /&gt;
|[[Univerzálny polohovací systém s piatimi stupňami voľnosti]]&lt;br /&gt;
|{{stav_prace|0}}&lt;br /&gt;
|[[Univerzálny polohovací systém s piatimi stupňami voľnosti (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Gavenda Tomáš, Bc.&lt;br /&gt;
|[[Analýza vlastností  generátorov prevádzkových tokov v simulačnom  prostredí NCTUns]]&lt;br /&gt;
|{{stav_prace|50}}&lt;br /&gt;
|[[Analýza vlastností  generátorov prevádzkových tokov v simulačnom  prostredí NCTUns (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ilkyw Boris, Bc.&lt;br /&gt;
|[[Analýza diagnostických metód motorových vozidiel v prostredí CANoe]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Analýza diagnostických metód motorových vozidiel v prostredí CANoe (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Rastislav Bohuš, Bc.&lt;br /&gt;
|[[Návrh a realizácia hydromodelovania vodných elektrární vážskej kaskády]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Návrh a realizácia hydromodelovania vodných elektrární vážskej kaskády (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Matin Hakala, Bc.&lt;br /&gt;
|[[Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Určenie doby výpočtu vybraných úloh v prostredí súčasných operačných systémov (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ján Kondrla, Bc.&lt;br /&gt;
|[[Monitorovanie infraštruktúry siete prostredníctvom OPC klientskej aplikácie]]&lt;br /&gt;
|{{stav_prace|70}}&lt;br /&gt;
|[[Monitorovanie infraštruktúry siete prostredníctvom OPC klientskej aplikácie (Zadanie)|Zadanie DP]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable collapsible sortable&amp;quot;  border=1 cellpadding=5 cellspacing=0 style=&amp;quot;width:100%&amp;quot;&lt;br /&gt;
|+ Manažérstvo kvality produkcie&lt;br /&gt;
|- style=&amp;quot;background-color:yellow&amp;quot;&lt;br /&gt;
! Autor&lt;br /&gt;
! Názov práce&lt;br /&gt;
!style=&amp;quot;width:150px&amp;quot;|Stav práce&lt;br /&gt;
!style=&amp;quot;width:90px&amp;quot;|Zadanie&lt;br /&gt;
|-&lt;br /&gt;
|Michal Páleník, Bc.&lt;br /&gt;
|[[Zabezpečenie spôsobilosti výrobného procesu]]&lt;br /&gt;
|{{stav_prace|60}}&lt;br /&gt;
|[[Zabezpečenie spôsobilosti výrobného procesu (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Martina Pileková, Bc.&lt;br /&gt;
|[[Zjednotenie posudzovania kvality dielov]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Zjednotenie posudzovania kvality dielov (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Evgeniya Mikheeva, Bc.&lt;br /&gt;
|[[Zavedenie systému manažérstva kvality vo firme s hlavnými činnosťami v oblasti projektového riadenia]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Zavedenie systému manažérstva kvality vo firme s hlavnými činnosťami v oblasti projektového riadenia (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Ekaterina Kadatskaya, Bc.&lt;br /&gt;
|[[Využitie vybraných metód a nástrojov manažérstva kvality pre zvyšovanie výkonnosti firmy ROSNETF]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Využitie vybraných metód a nástrojov manažérstva kvality pre zvyšovanie výkonnosti firmy ROSNETF (Zadanie)|Zadanie DP]]&lt;br /&gt;
|-&lt;br /&gt;
|Roman Minárech, Bc.&lt;br /&gt;
|[[Návrh súboru opatrení na zlepšenie kvality výroby v spoločnosti matador automotive, A.S]]&lt;br /&gt;
|{{stav_prace|100}}&lt;br /&gt;
|[[Návrh súboru opatrení na zlepšenie kvality výroby v spoločnosti matador automotive, A.S (Zadanie)|Zadanie DP]]&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategória:Študentské práce]]&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=N%C3%A1vrh_a_realiz%C3%A1cia_v%C3%BDvojov%C3%A9ho_prostredia_pre_jedno%C4%8Dipov%C3%A9_PLC&amp;diff=4354</id>
		<title>Návrh a realizácia vývojového prostredia pre jednočipové PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=N%C3%A1vrh_a_realiz%C3%A1cia_v%C3%BDvojov%C3%A9ho_prostredia_pre_jedno%C4%8Dipov%C3%A9_PLC&amp;diff=4354"/>
		<updated>2010-05-18T17:00:27Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Hlavička_FM|{{PAGENAME}}|Bc. Martin Maceovič|&lt;br /&gt;
Ing. Viliam Šimovič, PhD.|&lt;br /&gt;
2009/2010&lt;br /&gt;
|Diplomový projekt&lt;br /&gt;
|Mechatronika&lt;br /&gt;
}}&lt;br /&gt;
{{Praca_uvod|1|Návrh a realizácia vývojového prostredia pre jednočipové PLC|Kompilátor jazyka ST|Kompilátor IIC modulov|Komunikačný modul|Používateľské prostredie 1PLC|||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
{{Abstrakt&lt;br /&gt;
|&lt;br /&gt;
Cieľom tejto diplomovej práce je vytvoriť softvérové vybavenie na prácu s jednočipovým PLC. Aplikácia bola vytvorená v jazyku Python s použitím API knižnice wxWidgets a pozostáva s niekoľkých modulov. Najdôležitejšou časťou aplikácie je prekladač jazyka STL. Výsledkom prekladu je strojový kód mikrokontroléra Atmel AVR. &lt;br /&gt;
&lt;br /&gt;
Ďalej aplikácia dokáže zabezpečovať komunikáciu s PLC cez sériový alebo USB port, konfigurovať a používať ovládače IIC zariadení a terminálového modulu. &lt;br /&gt;
&lt;br /&gt;
Súčasťou je aj editor a simulátor v jazyku LAD, nastroj na online sledovanie stavu pamäti. &lt;br /&gt;
|&lt;br /&gt;
The intention of this thesis to realize software tool for work with single-chip PLC. Application was developed in Python programing language. It used API library wxWidgets and it consist of several modules. The most important part of application is STL compiler. The result of STL program compilation is Atmel AVR processor code.&lt;br /&gt;
&lt;br /&gt;
Next, application can control serial or USB communication with PLC,it can configure or use IIC and terminal drivers. &lt;br /&gt;
&lt;br /&gt;
Part of application is LAD editor, simulator and online memory watching tool. &lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
'''Úvod'''&lt;br /&gt;
&lt;br /&gt;
Cieľom práce Návrh a realizácia vývojového prostredia pre jednočipové PLC je vytvoriť užívateľský program na obsluhu, programovanie a debuggovanie jednočipových PLC. Táto práca úzko súvisí s prácou Bc. Mariána Sovu s názvom „[[Návrh a realizácia jednočipového PLC]]“, keďže sa tieto práce vzájomne dopĺňajú. Navrhovaný program by mal spĺňať niekoľko základných parametrov. Multiplatformovosť, intuitívne ovládanie, možnosť programovania v jazyku ST, LAD. Ďalej by mal obsahovať nástroj na odhaľovanie chýb, editor ovládačov externých IIC zariadení, nástroj na kontrolu stavu pamäte simuláciu a iné pokročilé možnosti pri projektovaní zariadenia s PLC.&lt;br /&gt;
&lt;br /&gt;
V prvej kapitole sa zaoberám kompilátorom jazyka ST. Rozoberám štruktúru súborov lexikálnej a syntaktickej analýzy a tiež konfiguráciu rôznych typov PLC.&lt;br /&gt;
&lt;br /&gt;
V druhej kapitole rozoberám realizáciu kompilátora IIC datablokov a spôsoby použitia v projekte. &lt;br /&gt;
&lt;br /&gt;
V tretej kapitole sa zaoberám komunikáciou s PLC. Formátom odosielaných dát a tiež základnými pravidlami riadenia komunikácie medzi PLC a počítačom. &lt;br /&gt;
&lt;br /&gt;
V poslednej, štvrtej kapitole opisujem užívateľské prostredie a konkrétne možnosti využitia modulov z predchádzajúcich kapitol. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Kompilátor jazyka ST  =&lt;br /&gt;
Účelom tejto kapitoly je vytvoriť prekladač zdrojového kódu jazyka ST. Prekladač alebo tiež kompilátor, je možné definovať prostredníctvom konečného stavového automatu. Pre jazyk Python je k dispozícii modul &amp;lt;tt&amp;gt;ply.py&amp;lt;/tt&amp;gt;. Je to čisto Pytonovská implementácia nástrojov na vytváranie komilátora, LEX a YACC. Tieto moduly slúžia na vytvorenie takéhoto konečného stavového automatu. Súčasne musí výsledný kompilátor umožňovať užívateľskú konfiguráciu. Pre tento účel bol zvolený jednoduchý model konfiguračných súborov XML. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;[[Súbor:Obr1.gif]]&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;''Obrázok 1: Kompilačná sekvencia''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Lexikálna analýza zdrojového kódu ==&lt;br /&gt;
Modul &amp;lt;tt&amp;gt;lex.py&amp;lt;/tt&amp;gt; slúži na spracovanie vstupného textu do kolekcie tokenov, vytvorenej prostredníctvom množiny regulárnych výrazov. Zjednodušene, lexikálna analýza tokenizuje vstupný reťazec. &amp;lt;nowiki&amp;gt;Informácie v tejto časti sú čerpané z [9],[10].&amp;lt;/nowiki&amp;gt; &lt;br /&gt;
&lt;br /&gt;
 Vstupný reťazec &lt;br /&gt;
     x = 3 + 42 * (s – t)&lt;br /&gt;
&lt;br /&gt;
Tokenizér rozdelí na individuálne tokeny&lt;br /&gt;
&lt;br /&gt;
     'x','=', '3', '+', '42', '*', '(', 's', '-', 't', ')'&lt;br /&gt;
&lt;br /&gt;
Tokenom sú potom pridelené mená kvôli identifikácii&lt;br /&gt;
&lt;br /&gt;
 'ID','EQUALS','NUMBER','PLUS','NUMBER','TIMES',&lt;br /&gt;
 'LPAREN','ID','MINUS','ID','RPAREN'&lt;br /&gt;
&lt;br /&gt;
Nakoniec je vstup rozdelený do párov pozostávajúcich s typu tokenu a hodnoty.&lt;br /&gt;
&lt;br /&gt;
 ('ID','x'), ('EQUALS','='), ('NUMBER','3'), &lt;br /&gt;
 ('PLUS','+'), ('NUMBER','42'), ('TIMES','*'),&lt;br /&gt;
 ('LPAREN','('), ('ID','s'), ('MINUS','-'),&lt;br /&gt;
 ('ID','t'), ('RPAREN',')'&lt;br /&gt;
&lt;br /&gt;
===Štruktúra zdrojového kódu pre LEX ===&lt;br /&gt;
Implementované pravidlá lexikálnej analýzy tvoria samostatný modul ktorý používa knižnica LEX. Výstup tohto modulu, sled tokenov, využíva modul YACC pre syntaktickú analýzu. Syntax zápisu modulu pozostáva z niekoľkých častí. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
 |&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;import ply.lex as lex&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Zoznam mien tokenov&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 tokens = ('ID','ID2',...)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Regulárne výrazy pre jednoduché tokeny&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# 't_'+Meno_tokenu&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 t_ID = r'regulárny výraz' &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Regulárny výraz so zdrojovým kódom &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 def t_ID2(t):&lt;br /&gt;
         r'regulárny_výraz'&lt;br /&gt;
         t.value=10&lt;br /&gt;
         …&lt;br /&gt;
         return t&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Definovanie pravidla pre sledovanie počtu riadkov&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 def t_newline(t):&lt;br /&gt;
         r'\n+'&lt;br /&gt;
         t.lexer.lineno+=len(t.value)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Ignorované reťazce&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 t_ignore=r' \t'&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Zachytávanie chýb&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 def t_error(t):&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;print &amp;quot;Illegal character '%s'&amp;quot; % t.value[0]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         t.lexer.skip(1)&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Vytvoríme samotný lexer&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 lex.lex()&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 1: Štruktúra zdrojového kódu pre LEX''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Prvou povinnou časťou je importovanie modulu LEX a definovanie listu tokenov. Tento list je takisto povinný a obsahuje všetky možne mená tokenov, ktoré môžu byť vytvorené lexerom. Tento list taktiež využíva modul &amp;lt;tt&amp;gt;yacc.py&amp;lt;/tt&amp;gt; na identifikovanie výrazov. &lt;br /&gt;
&lt;br /&gt;
Každý token je špecifikovaný regulárnym výrazom. Každé toto pravidlo je definované pomocou premennej s predponou t_ ktorá identifikuje premennú ako token. Pre jednoduché výrazy, definujeme regulárny výraz ako reťazec ktorý je obsahom premennej. Pre zložitejšie výrazy je token definovaný ako funkcia. Regulárny výraz je zadaný ako dokumentačný reťazec za hlavičkou funkcie. Funkcia vždy preberá jeden argument ktorý je inštancia &amp;lt;tt&amp;gt;LexTokenu.&amp;lt;/tt&amp;gt; Tento objekt ma viacero atribútov, t.type typ tokenu (reťazec), t.value je lexovaný výraz, t.lineno je aktuálne číslo riadku, t.lexpos pozícia tokenu relatívne od začiatku vstupného textu, t.type meno tokenu.&lt;br /&gt;
&lt;br /&gt;
Pretože &amp;lt;tt&amp;gt;lex.py&amp;lt;/tt&amp;gt; nevie nič o počtu riadkov, je potrebné aktualizovať tieto informácie pomocou špeciálneho pravidla.&lt;br /&gt;
&lt;br /&gt;
Špeciálne pravidlo t_ignore je rezervované modulom lex.py pre ignorované znaky. Najčastejšie sa používa pre „biele miesta“ vo vstupnom prúde.&lt;br /&gt;
&lt;br /&gt;
Nakoniec t_error je funkcia na zachytávanie chýb v lexikálnej analýze. Táto funkcia je volaná zakaždým keď je detekovaný neprípustný reťazec. &lt;br /&gt;
&lt;br /&gt;
===Lexikálna analýza jazyka STL ===&lt;br /&gt;
Zoznam tokenov, alebo tiež zoznam príkazov jazyka STL, je rozdelený do štyroch skupín, podľa počtu parametrov s ktorými asociovaný príkaz pracuje. Toto delenie je dôležite pre následnú syntaktickú analýzu, kde slúži na odhaľovanie chýb. V spracovávanom texte sú vyhľadávané znaky a symboly definovane ako t_ pravidla. Ak pre daný reťazec nieje definovaný token, je vykonaná záverečná kontrola či sa nenachádza v niektorom zo štyroch zoznamov príkazov alebo nejde o definíciu adresy pamäti. V prípade úspechu je návratovou hodnotou príslušný token, v opačnom prípade navracia token error. Pre jazyk STL sme definovali tieto základné tipy tokenov:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  t_ignore = ' \t\r'&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 2: Definícia tokenu (t_ignore)''&amp;lt;/center&amp;gt;'''ignore''' – pomocný token odstraňujúci zo spracovávaného textu znaky bez informačnej hodnoty. Tento token sa ďalej v syntaktickej analýze nepoužíva. &lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  t_NUMBER =      r'\d+'&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 3: Definícia tokenu (t_NUMBER)''&amp;lt;/center&amp;gt;'''NUMBER''' – token definujúci celočíselnú kladnú konštantu. &lt;br /&gt;
# '''PLUS''' – token znamienka (+).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  t_PLUS =      r'\+'&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 4: Definícia tokenu (t_PLUS)''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# '''MINUS''' – token znamienka (-).&lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  t_MINUS =      r'-'&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 5: Definícia tokenu (t_MINUS)''&amp;lt;/center&amp;gt;'''DOT''' – token znamienka (.) .&lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  t_DOT =      r'\.'&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 6: Definícia tokenu (t_DOT)''&amp;lt;/center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def t_COMMA(t):&amp;lt;br/&amp;gt;      r'\,'&amp;lt;br/&amp;gt;      global mem&amp;lt;br/&amp;gt;      mem = False    &amp;lt;br/&amp;gt;      return t&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 7: Definícia tokenu (t_COMMA)''&amp;lt;/center&amp;gt;'''COMMA''' – token znamienka (,). Veľmi často sa používa v syntaktickej analýze na identifikovanie príkazov, kde oddeľuje jednotlive parametre.&lt;br /&gt;
# '''BIT''' – token reprezentujúci bitovú časť adresy. Hodnota tokenu je číslo predstavujúce adresu bitu. &lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def t_BIT(t):&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;r'\.[0-7]'&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      global mem&amp;lt;br/&amp;gt;      mem = False&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;t.value = t.value[1]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      return t&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 8: Definícia tokenu (t_BIT)''&amp;lt;/center&amp;gt;'''FLOAT''' – token reprezentujúci číselnú premennú typu float. Zápis tejto premennej je možný v rôznych tvaroch. Napr. (3.14 1e100 3.14e-10 0e0 -1.14e-3). Tento token sa ďalej v syntaktickej analýze nevyskytuje. Ak sa jedná o číselnú konštantu a nie adresu v pamäti, je hodnota float uložená ako token NUMBER a jeho hodnota je skutočný tvar premennej float. (tzn. bajtová reprezentácia čísla v pamäti)&lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  &amp;lt;nowiki&amp;gt;def t_FLOAT(t):&lt;br /&gt;
r'[-+]?[0-9]*\.[0-9]+([eE][-+]?[0-9]+)?'    &lt;br /&gt;
       if mem: &lt;br /&gt;
            global mem&lt;br /&gt;
            mem = False&lt;br /&gt;
            t.type = 'FULLBIT'           &lt;br /&gt;
            return &lt;br /&gt;
      global mem&lt;br /&gt;
      mem = False &lt;br /&gt;
      t.value = exp(expf(float(t.value)))&lt;br /&gt;
      t.type = 'NUMBER'&lt;br /&gt;
      return t&lt;br /&gt;
&amp;lt;/nowiki&amp;gt;     &lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 9: Definícia tokenu (t_FLOAT)''&amp;lt;/center&amp;gt;'''ID''' – token symbolizujúci reťazec ktorý nebol doposiaľ identifikovaný ako token. Jedná sa o pomocný token, ktorý vyhodnocuje či ide o token COMM (command „príkaz“), alebo MEMO (memory „pamäť“). &lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def t_ID(t):&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;r'[a-zA-Z=&amp;lt;&amp;gt;][a-zA-Z=&amp;lt;&amp;gt;]*'&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt; &lt;br /&gt;
     if t.value.upper() in keywords:&amp;lt;br/&amp;gt;          global mem  &amp;lt;br/&amp;gt;          mem = False&amp;lt;br/&amp;gt;          t.type = 'COMM'&amp;lt;br/&amp;gt;          t.value = t.value.upper()&amp;lt;br/&amp;gt;      elif t.value.upper() in memory:&amp;lt;br/&amp;gt;          t.type = 'MEMO'&amp;lt;br/&amp;gt;          global mem&amp;lt;br/&amp;gt;          mem = True&amp;lt;br/&amp;gt;          t.value = t.value.upper()&amp;lt;br/&amp;gt;      elif t.value == '=': &amp;lt;br/&amp;gt;          print mem&amp;lt;br/&amp;gt;          mem = False&amp;lt;br/&amp;gt;          t.type = 'COMM'      &amp;lt;br/&amp;gt;      return t&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 10: Definícia tokenu (t_ID)''&amp;lt;/center&amp;gt;'''COMM''' – token príkazu ktorého meno je uložené v zozname keywords. Hodnota tokenu predstavuje jeho meno.&lt;br /&gt;
# '''MEMO''' – token špecifikujúci oblasť pamäti. Je súčasťou plnej adresy PLC. Jeho možné tvary sú definované v zozname memory.&lt;br /&gt;
# '''COMMENT''' – token poznámky alebo komentára. Slúži len pre potrebu programátora pracujúceho v STL kóde alebo pomôcka na identifikáciu vo vývojovom prostredí. &lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def t_COMMENT(t):&amp;lt;br/&amp;gt;      r'\#.*'&amp;lt;br/&amp;gt;      global mem&amp;lt;br/&amp;gt;      mem = False&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 11: Definícia tokenu (t_COMMENT)''&amp;lt;/center&amp;gt;'''NEWLINE''' – token nového riadku. Používa sa v dvoch prípadoch. Ako identifikátor nového riadku pre počítadlo a tiež ako ukončenie výrazu v syntaktickej analýze. &lt;br /&gt;
# &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def t_NEWLINE(t):&amp;lt;br/&amp;gt;      r'\n|\r'&amp;lt;br/&amp;gt;      global mem&amp;lt;br/&amp;gt;      mem = False&amp;lt;br/&amp;gt;      if first: &amp;lt;br/&amp;gt;            t.lexer.lineno = 0&amp;lt;br/&amp;gt;            global first&amp;lt;br/&amp;gt;            first=0&amp;lt;br/&amp;gt;      t.lexer.lineno += len(t.value)&amp;lt;br/&amp;gt;      global size&amp;lt;br/&amp;gt;      size+=1&amp;lt;br/&amp;gt;      return t&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 12: Definícia tokenu (t_NEWLINE)''&amp;lt;/center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def t_error(t):&amp;lt;br/&amp;gt; &lt;br /&gt;
     &amp;lt;nowiki&amp;gt;print &amp;quot;Illegal character '%s' &amp;quot; % (t.value[0])&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      t.lexer.skip(1)&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 13: Definícia tokenu (t_ERROR)''&amp;lt;/center&amp;gt;'''ERROR''' – token chybového stavu. Je ním identifikovaný každý výraz ktorý nemá definovaný token. Ak je token ERROR identifikovaný, lexikálna analýza sa ukončí a program vypíše chybové hlásenie.&lt;br /&gt;
&lt;br /&gt;
==  Syntaktická analýza ==&lt;br /&gt;
Nástrojom na syntaktickú analýzu je modul &amp;lt;tt&amp;gt;yacc.py&amp;lt;/tt&amp;gt;. Tento modul umožňuje v spolupráci s modulom &amp;lt;tt&amp;gt;lex.py&amp;lt;/tt&amp;gt;&amp;lt;nowiki&amp;gt; definovať pravidlá, ako má budúci jazyk vyzerať. Tzn. umožňuje vytvárať programátorské konštrukcie a zápisy. YACC využíva parsovacie techniky známe ako LR-parsing alebo shift-reduce parsing. Informácie v tejto časti sú čerpané z [9],[10].&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Štruktúra zdrojového kódu pre YACC ===&lt;br /&gt;
Zdrojový kód pre YACC tvorí samostatný modul pozostávajúci z niekoľkých častí.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|       import ply.yacc as yacc&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# List tokenov&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 from userlex import tokens&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Gramatické pravidlá&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 def p_expression(p):&lt;br /&gt;
     'expression : expression PLUS term'&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = p[1] + p[3]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 def p_expression_term(p):&lt;br /&gt;
     'expression : term'&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = p[1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 def p_term_factor(p):&lt;br /&gt;
     'term : factor'&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = p[1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 def p_factor_id(p):&lt;br /&gt;
     'factor : ID'&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = p[1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;# Pravidlo pre chyby&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 def p_error(p):&lt;br /&gt;
     print &amp;quot;Syntax error in input!&amp;quot;&lt;br /&gt;
 yacc.yacc()&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 14: Štruktúra zdrojového kódu pre YACC''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
 Prvou povinnou časťou je importovanie modulu yacc.py a listu tokenov zo zdrojového súboru, modulu lexikálnej analýzy. &lt;br /&gt;
&lt;br /&gt;
Každé gramatické pravidlo je definované ako Pythonovská funkcia, kde dokumentačný reťazec obsahuje presnú gramatickú štruktúru daného pravidla. Každá funkcia preberá argument p ktorý je sekvencia obsahujúca hodnotu každého gramatického symbolu podľa odpovedajúceho pravidla. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|   def p_expression_plus(p):&lt;br /&gt;
     'expression : expression PLUS term'&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt;  ^            ^        ^    ^&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;# &amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;p[0] &amp;lt;/nowiki&amp;gt;        &amp;lt;nowiki&amp;gt;p[1] &amp;lt;/nowiki&amp;gt;    &amp;lt;nowiki&amp;gt;p[2] p[3]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = p[1] + p[3]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 15: Definovanie gramatického pravidla''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Pravidlo p_error(p) je definované pre zachytávanie syntaktických chýb. Keď sa vyskytne syntaktická chyba počas analýzy, je ihneď zachytená. Túto chybu je nutné ďalej spracovať kvôli debugging-u.&lt;br /&gt;
&lt;br /&gt;
Na vytvorenie inštancie parseru, je nutné volať funkciu yacc.yacc(). Táto funkcia vytvorí LR parsovacie tabuľky podľa preddefinovanej gramatiky. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Syntaktická analýza jazyka STL  ===&lt;br /&gt;
Syntax jazyka STL je definovaná veľmi jednoducho. Celý program pozostáva s príkazov a parametrov príkazu. Syntaktické pravidlo pre program je teda definované, ako kolekcia príkazov a ich parametrov. Výsledkom je list pevne usporiadaných príkazov a parametrov vhodných na spracovanie. Syntaktické pravidlo príkazu je definované odlišne. Počet parametrov ako aj ich typ, je závislý od príkazu. V tomto kroku používame štyri kategórie príkazov zadefinovaných v module lexikálnej analýzy. Podľa zoznamu v ktorom sa príkaz nachádza, sa k príkazu pripoja príslušné parametre. Parameter príkazu definuje číslo alebo adresa. Syntax adresy je dvojakého druhu. Adresa bitová a bajtová. &lt;br /&gt;
&lt;br /&gt;
Modul syntaktickej analýzy &amp;lt;tt&amp;gt;STLParser.py&amp;lt;/tt&amp;gt; obsahuje niekoľko gramatických pravidiel ktoré popisujú jazyk STL:&lt;br /&gt;
&lt;br /&gt;
'''Adresy''' – Na opísanie adresy v pamäti PLC je definovaných niekoľko pravidiel, aby parser dokázal identifikovať všetky možné kombinácie a tvary adresného reťazca a tiež slúžia na odhaľovanie chybného tvaru adresy. * &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_adress_bite(p):&amp;lt;br/&amp;gt;      '''adress : MEMO NUMBER BIT'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;p[0] = (p[1],int(p[2]),int(p[3]))&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 16: Definícia tokenu (&amp;lt;tt&amp;gt;adress : MEMO NUMBER BIT&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Adresa definovaná identifikátorom pamäti, bajtom a bitim&lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_adress_fullbite(p):&amp;lt;br/&amp;gt;      '''adress : MEMO FULLBIT'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;i = p[2].find('.')&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;p[0] = (p[1],int(p[2][:i]),int(p[2][i+1:]))&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 17: Definícia tokenu (&amp;lt;tt&amp;gt;adress : MEMO FULLBIT&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Adresa definovaná identifikátorom pamäti a desatinným číslom&lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_adress_byte(p):&amp;lt;br/&amp;gt;      '''adressb : MEMO NUMBER'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;#print p&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;p[0] = (p[1],int(p[2]),0)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 18: Definícia tokenu (&amp;lt;tt&amp;gt;adressb : MEMO NUMBER&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Adresa definovaná ako identifikátor pamäti a číslo – bajtová adresa&lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_adress_byte_bad(p):&amp;lt;br/&amp;gt;      '''adressb : MEMO error'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;#print p&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;p[0]= '&amp;lt;ERROR&amp;gt; WRONG BYTE ADRESS IN LINE %d ' % (p[2].lineno-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 19: Definícia tokenu (&amp;lt;tt&amp;gt;adressb : MEMO error&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Chybne definovaná adresa s chybou v bajtovej časti adresy. Návratová hodnota je chybový reťazec s popisom chyby a jej umiestnením. &lt;br /&gt;
* Chybne definovaná adresa s chybou v bitovej časti adresy. Návratová hodnota je chybový reťazec s popisom chyby a jej umiestnením. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_adress_bite_bad(p):&lt;br /&gt;
     '''adress : MEMO NUMBER error'''&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0]= '&amp;lt;ERROR&amp;gt; WRONG BITE OR BYTE ADRESS IN LINE %d ' % (p[3].lineno-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 20: Definícia tokenu (&amp;lt;tt&amp;gt;adress : MEMO NUMBER error&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Príkazy''' – Príkazy STL sú rozdelené do niekoľkých skupín podľa parametrov ktoré daný príkaz vyžaduje, preto aj gramatické pravidlá delíme na tieto skupiny. V každej definícii je urobená kontrola do ktorej skupiny identifikovaný príkaz patrí a skontroluje sa počet parametrov. &lt;br /&gt;
&lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command(p):&amp;lt;br/&amp;gt;      '''command : COMM'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;if p[1] in ONE:&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=(p[1],None)&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;else: p[0] = '&amp;lt;ERROR&amp;gt; WRONG ARGUMENTS COUNT ET &amp;quot; %s &amp;quot; &amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;IN LINE %d'% (p[1],p.lineno(1)-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 21: Definícia tokenu (&amp;lt;tt&amp;gt;command : COMM&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Bezparametrový príkaz. Jediný token ktorý tvorý príkaz je samotný token COMM. &lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte(p):&amp;lt;br/&amp;gt;      '''command : COMM adressb'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;if isinstance(p[2],str):&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[2]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif p[1] in TWO: &amp;lt;/nowiki&amp;gt;  &amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0] = (p[1],p[2])&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;else: p[0] = '&amp;lt;ERROR&amp;gt; WRONG ARGUMENTS COUNT ET &amp;quot; %s &amp;quot; &amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;IN LINE %d'% (p[1],p.lineno(1)-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 22: Definícia tokenu (&amp;lt;tt&amp;gt;command : COMM adressb&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Jednoparametrový príkaz. Token je tvorený s kombinácie príkazu a adresy bajtu alebo bitu. &lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_bite(p):&amp;lt;br/&amp;gt;      '''command : COMM adress '''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;if isinstance(p[2],str):&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[2]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif p[1] in TWO : &amp;lt;/nowiki&amp;gt;   &amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0] = (p[1],p[2])&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;else: p[0] = '&amp;lt;ERROR&amp;gt; WRONG ARGUMENTS COUNT ET &amp;quot; %s &amp;quot; &amp;lt;/nowiki&amp;gt; &amp;lt;nowiki&amp;gt;IN LINE %d'% (p[1],p.lineno(1)-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 23: Definícia tokenu (&amp;lt;tt&amp;gt;command : COMM adress&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Chybný príkaz s jedným parametrom. &lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_bite_bad(p):&amp;lt;br/&amp;gt;      '''command : COMM error '''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;#print p[0],p[1],p[2]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;p[0] = '&amp;lt;ERROR&amp;gt; BAD ADRESS SYNTAX ET &amp;quot; %s &amp;quot; IN LINE %d ' % (p[1],p[2].lineno-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 24: Definícia tokenu (&amp;lt;tt&amp;gt;command : COMM error &amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Dvojparametrový príkaz. Token tvorí identifikátor príkazu, adresa, čiarka a posledný parameter môže byť adresa alebo konštanta. &lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte_value_bad(p):&amp;lt;br/&amp;gt;      '''command : COMM adressb COMMA error'''&amp;lt;br/&amp;gt; &lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = '&amp;lt;ERROR&amp;gt; BAD SYNTAX ET &amp;quot; %s &amp;quot; IN LINE %d ' % (p[1],p[4].lineno-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 27: Definícia tokenu ( &amp;lt;tt&amp;gt;command : COMM adressb COMMA error&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte_value(p):&amp;lt;br/&amp;gt;      '''command : COMM adressb COMMA NUMBER'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;#print p[1],THREE&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;if isinstance(p[2],str):&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[2]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif p[1] in THREE:&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0] = (p[1],p[2],int(p[4]))&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;else: p[0] = '&amp;lt;ERROR&amp;gt; WRONG ARGUMENT COUNT IN LINE '+str(p.lineno(1))&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 26: Definícia tokenu ( &amp;lt;tt&amp;gt;command : COMM adressb COMMA NUMBER&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte_byte(p):&amp;lt;br/&amp;gt;      '''command : COMM adressb COMMA adressb'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;#print p[1],THREE&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;if isinstance(p[2],str): &amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[2]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif isinstance(p[4],str): &amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[4] &amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif p[1] in THREE:&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0] = (p[1],p[2],p[4])&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;else: p[0] = '&amp;lt;ERROR&amp;gt; WRONG ARGUMENT COUNT IN LINE '+str(p.lineno(1))&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 25: Definícia tokenu ( &amp;lt;tt&amp;gt;command : COMM adressb COMMA adressb&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Chybný príkaz s dvoma parametrami. Ak nastane problém v prvom parametri zachytí sa táto chyba ako u jednoparametrového príkazu, preto stačí definovať chybný token pre druhý parameter. &lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte_value_bad_con(p):&amp;lt;br/&amp;gt;      '''command : COMM adressb error'''&amp;lt;br/&amp;gt; &lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = '&amp;lt;ERROR&amp;gt; BAD SYNTAX ET &amp;quot; %s &amp;quot; IN LINE %d ' % (p[1],p[3].lineno-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 28: Definícia tokenu ( &amp;lt;tt&amp;gt;command : COMM adressb error&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Trojparametrový príkaz. Tvorí ho identifikátor príkazu, čiarka, adresa, čiarka, adresa a posledný parameter je konštanta alebo adresa. &lt;br /&gt;
* &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte_byte_number(p):&amp;lt;br/&amp;gt;      '''command : COMM adressb COMMA adressb COMMA NUMBER'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;#print p[1],THREE&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;if isinstance(p[2],str):&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[2]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif isinstance(p[4],str):&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[4]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif p[1] in FOUR:&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0] = (p[1],p[2],p[4],int(p[6]))&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;else: p[0] = '&amp;lt;ERROR&amp;gt; WRONG ARGUMENT COUNT IN LINE '+str(p.lineno(1))&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 29: Definícia tokenu ( &amp;lt;tt&amp;gt;command : COMM adressb COMMA adressb COMMA NUMBER&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte_byte_byte(p):&amp;lt;br/&amp;gt;      '''command : COMM adressb COMMA adressb COMMA adressb'''&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;#print p[1],THREE&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;if isinstance(p[2],str):&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[2]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif isinstance(p[4],str):&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[4]&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif isinstance(p[6],str):&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0]=p[6] &amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;elif p[1] in FOUR:&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;          &amp;lt;nowiki&amp;gt;p[0] = (p[1],p[2],p[4],p[6])&amp;lt;/nowiki&amp;gt;&amp;lt;br/&amp;gt;      &amp;lt;nowiki&amp;gt;else: p[0] = '&amp;lt;ERROR&amp;gt; WRONG ARGUMENT COUNT IN LINE '+str(p.lineno(1))&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 30: Definícia tokenu ( &amp;lt;tt&amp;gt;command : COMM adressb COMMA adressb COMMA adressb&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;Chybný príkaz s tromi parametrami, s chybou v poslednom parametre. Rovnako ako u dvojparametrového definovania chyby aj v tomto prípade zachytí chybu v prvom parametre jednoparametrová chyba a v druhom dvojparametrová chyba. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte_byte_value_bad(p):&lt;br /&gt;
     '''command : COMM adressb COMMA adressb COMMA error'''&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = '&amp;lt;ERROR&amp;gt; BAD SYNTAX ET &amp;quot; %s &amp;quot; IN LINE %d ' % (p[1],p[6].lineno-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 31: Definícia tokenu ( &amp;lt;tt&amp;gt;command : COMM adressb COMMA adressb COMMA error&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_command_byte_byte_value_bad(p):&lt;br /&gt;
     '''command : COMM adressb COMMA adressb COMMA error'''&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = '&amp;lt;ERROR&amp;gt; BAD SYNTAX ET &amp;quot; %s &amp;quot; IN LINE %d ' % (p[1],p[6].lineno-_LINES)&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 32: Definícia tokenu ( &amp;lt;tt&amp;gt;command : COMM adressb COMMA adressb COMMA error&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
'''Výrazy''' – Pod pojmom výraz v STL parsere, rozumieme akýkoľvek príkaz alebo token ukončený enterom. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_statement(p):&lt;br /&gt;
     '''statement : command NEWLINE&lt;br /&gt;
                  | command'''&lt;br /&gt;
&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;if isinstance(p[1],str):&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;print p[1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;p[0] = None&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         p.parser.error = 1&lt;br /&gt;
     else:&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;p[0] = (p[1])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 33: Definícia tokenu ( &amp;lt;tt&amp;gt;statement : command NEWLINE | command&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== &lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_statement_bad(p):&lt;br /&gt;
     '''statement : error NEWLINE'''&lt;br /&gt;
     print &amp;quot;&amp;lt;ERROR&amp;gt; MALFORMED STATEMENT AT LINE:&amp;quot;, p[1].lineno-_LINES&lt;br /&gt;
     p[0] = None&lt;br /&gt;
     p.parser.error = 1&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;Ukážka 35: Definícia tokenu ( statement : error NEWLINE)&amp;lt;/center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_statement_newline(p):&lt;br /&gt;
     '''statement : NEWLINE'''&lt;br /&gt;
     p[0] = None&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;Ukážka 34: Definícia tokenu ( statement : NEWLINE)&amp;lt;/center&amp;gt; ==&lt;br /&gt;
'''Program''' – Program predstavuje kolekciu po sebe idúcich výrazov s ktorých žiaden nieje token error. Ide od výsledok parsovacieho procesu a vstup do záverečného modulu kompilátora. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_program(p):&lt;br /&gt;
     '''program : program statement&lt;br /&gt;
                | statement'''&lt;br /&gt;
     p.parser.lineno=0&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;if len(p) == 2 and p[1]:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;p[0] = []&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
        &amp;lt;nowiki&amp;gt;p[0].append(p[1])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     elif len(p) ==3:&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;p[0]=p[1]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;if not p[0]: p[0]=[]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
         &amp;lt;nowiki&amp;gt;if p[2]:&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
             &amp;lt;nowiki&amp;gt;p[0].append(p[2])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 36: Definícia tokenu ( &amp;lt;tt&amp;gt;program : program statement | statement&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def p_program_error(p):&lt;br /&gt;
     '''program : error'''&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;p[0] = None&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     p.parser.error = 1&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 37: Definícia tokenu ( &amp;lt;tt&amp;gt;program : error&amp;lt;/tt&amp;gt;)''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Definovanie konfiguračného súboru PLC ==&lt;br /&gt;
Kvôli miernej odlišnosti architektúry jednotlivých typov mikrokontrolérov AVR, je nutné definovať pre každý typ mikrokontroléra konfiguračný súbor. Tento súbor obsahuje špecifické informácie o pamäťových oblastiach, podporovaných príkazoch STL a pod.. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Štruktúra konfiguračného súboru PLC ===&lt;br /&gt;
Konfiguračný súbor PLC je XML súbor s pevne definovanou stromovou štruktúrou. Jednoduchosť textového formátu a prehľadnosť zápisu, umožňuje rýchlo a flexibilne nakonfigurovať nový typ PLC, bez nutnosti prepisovania zdrojových kódov kompilátora.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  &amp;lt;nowiki&amp;gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;MCU type=&amp;quot;myPLC32&amp;quot; description=&amp;quot;Zakladna verzia plc zalozena na ATMega32&amp;quot;&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&amp;lt;Adress&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
   &amp;lt;nowiki&amp;gt;&amp;lt;P &amp;lt;/nowiki&amp;gt;  count=&amp;quot;4&amp;quot;   memory=&amp;quot;0000&amp;quot; size=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;nowiki&amp;gt;&amp;lt;PA &amp;lt;/nowiki&amp;gt; count=&amp;quot;16&amp;quot;  memory=&amp;quot;0005&amp;quot; size=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;nowiki&amp;gt;&amp;lt;SP &amp;lt;/nowiki&amp;gt; count=&amp;quot;10&amp;quot;  memory=&amp;quot;0015&amp;quot; size=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;nowiki&amp;gt;&amp;lt;T &amp;lt;/nowiki&amp;gt;  count=&amp;quot;384&amp;quot; memory=&amp;quot;0029&amp;quot; size=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;nowiki&amp;gt;&amp;lt;C &amp;lt;/nowiki&amp;gt;  count=&amp;quot;384&amp;quot; memory=&amp;quot;01A9&amp;quot; size=&amp;quot;16&amp;quot; /&amp;gt;&lt;br /&gt;
   &amp;lt;nowiki&amp;gt;&amp;lt;V &amp;lt;/nowiki&amp;gt;  count=&amp;quot;377&amp;quot; memory=&amp;quot;0329&amp;quot; size=&amp;quot;1&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&amp;lt;/Adress&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&amp;lt;Command list=&amp;quot;LD LDN A AN O ON ALD OLD LPR LPS LPP NOT S R PE NE TON TOFF = MOVB ADDB SUBB ==B &amp;amp;lt;&amp;amp;gt;B &amp;amp;lt;B &amp;amp;gt;B &amp;amp;lt;=B &amp;amp;gt;=B INCB DECB&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&amp;lt;Config&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;Datablock size=&amp;quot;128&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;Memory offset=&amp;quot;006E&amp;quot;/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;&amp;lt;Port list='FF FF BF B0 00 00 00'/&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
  &amp;lt;nowiki&amp;gt;&amp;lt;/Config&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;&amp;lt;/MCU&amp;gt;&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 38: Štruktúra konfiguračného súboru PLC''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prvou časťou súboru je hlavička xml s definovanou verziou xml a kódovaním znakovej sady. Nasleduje koreňová sekcia ''MCU'' s parametrami ''type'' definuje typ PLC a ''description'' so základným popisom PLC. Táto sekcia obsahuje vetvu ''Address'' ktorej podvetvy definuje adresný priestor PLC a vetvu ''Command'' s parametrom ''list'', obsahujúcim príkazy jazyka ST ktoré PLC podporuje. Adresa je definovaná menom podvetvy, počtom bytov ''count'', začiatočnou 16bitovou adresou v pamäti mikrokontroléru ''memory'' a veľkosťou jednej bunky definovaného adresného priestoru v bitoch ''size''. Je dôležité spomenúť, že kompilátor umožňuje prekrývanie pamäťového priestoru, tzn. jedinečne adresované miesto mikrokontroléra môže byť adresované pomocou viacerých adries PLC. Vetva Config definuje špecifické parametre PLC, ako veľkosť dátového bloku odosielaného programu, offset pamäte a porty ktoré obsahuje PLC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Spolupráca programov LEX a YACC ==&lt;br /&gt;
V tejto časti popisujem spoluprácu programových modulov lex.py a yacc.py pri vytvorení prekladača jazyka ST. Výsledný modul STL.py bude kompilovať zdrojový kód v jazyku ST na strojový kód mikrokontroléra Atmel AVR. Princíp činnosti je vysvetlený na obrázku 2. &lt;br /&gt;
&lt;br /&gt;
Princíp spolupráce je možne opísať v niekoľkých bodoch:&lt;br /&gt;
&lt;br /&gt;
# Nakonfigurovaný lexikálny analyzátor STLex.py vyhľadá v zdrojovom kóde tzv. Tokeny (definované kľúčové slová).&lt;br /&gt;
# Zadefinujeme syntaktický analyzátor STLparser.py (vyhľadá možné kombinácie tokenov a spracováva chybové stavy).&lt;br /&gt;
# Definujeme konfiguračný súbor PLC pre ktoré je program kompilovaný.&lt;br /&gt;
# Kompilačnému modulu STL.py načítame konfiguračný súbor a zdrojový kód jazyka ST.&lt;br /&gt;
# Skompilovaný program je sekvencia strojových kódov, určených pre zadefinované PLC.&lt;br /&gt;
&lt;br /&gt;
[[Image:|thumb|&amp;lt;center&amp;gt;''Obrázok 2: Princíp tvorby a funkcie prekladača jazyka definovaného pomocou programov LEX a YACC''&amp;lt;/center&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;Spomenuté možnosti a využitie modulu ply.py a teda programov LEX a YACC nevysvetľuje všetky možnosti využitia ktoré tieto programy ponúkajú. Ide o zhrnutie využitých vlastností počas vývoja kompilátora. Podrobnejšie informácie nájdete v literatúre [9] a [10].&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Generovanie strojového kódu ==&lt;br /&gt;
Vstupom generátora strojového kódu je výstupná sekvencia parseru jazyka ST. Generátor identifikuje prvky sekvencie podľa Id, ktoré je prvým prvkom každého člena sekvencie.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  &amp;lt;nowiki&amp;gt;[('LD', ('P', 0, 0)), ('LPS', None), ('LD', ('P', 0, 5)), ('O', ('P', 0, 7)), ('LD', ('P', 2, 1)), ('O', ('P', 1, 3)), ('=', ('P', 6, 0)), ('=', ('P', 1, 1)), ('A', ('P', 1, 0)), ('=', ('P', 3, 0))]&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 39: Výstupná sekvencia parseru''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Druhým prvkom je parameter funkcie, ktorá sa zavolá podľa Id. Týmto parametrom býva najčastejšie adresa PLC. Pre generovanie strojového kódu je nezbytné aby tejto adrese odpovedala adresa mikrokontroléru. Hodnota adresy PLC je rôzna, pre rôzne mikrokontroléry na ktorých je PLC postavené. Tieto adresy sú definované v konfiguračnom súbore aktualizovanom pred samotným generovaním. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  def cmd_LD(adr):&lt;br /&gt;
     &amp;quot;&amp;quot;&amp;quot; Prikaz jazyka STL - LD adr&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
     &amp;lt;nowiki&amp;gt;return adr_htoi(['00','91'])+adr_FlipSplit(adr_ADR(adr))+ &amp;lt;/nowiki&amp;gt;   &amp;lt;nowiki&amp;gt;[adr[2]]+adr_htoi(['FB','00','27','00','F9','0F','93'])&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 40: Definovanie funkcie generátora''&amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Z ukážky je zrejmé ako je definovaný generátor strojového kódu, konkrétne príkazu LD. Parameter &amp;lt;tt&amp;gt;adr&amp;lt;/tt&amp;gt; je adresa bitovej premennej. Návratovou hodnotou je list strojových kódov. Funkcie &amp;lt;tt&amp;gt;adr_htoi&amp;lt;/tt&amp;gt; prevedú list čísel v hexadecimálnej sústave na list typu int. Funkcia &amp;lt;tt&amp;gt;adr_ADR&amp;lt;/tt&amp;gt; prevádza adresu PLC na adresu mikrokontroléra a funkcia&amp;lt;tt&amp;gt; adr_FlipSplit&amp;lt;/tt&amp;gt; rozdelí 16 bitovú adresu na dve 8 bitové a tie medzi sebou zamení. &lt;br /&gt;
&lt;br /&gt;
== Prevod programu LAD do STL ==&lt;br /&gt;
Program jazyka LAD je dátovo reprezentovaný ako matica zoznamov predstavujúcich jednotlivé LAD symboly. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;prettytable&amp;quot;&lt;br /&gt;
|  &amp;lt;nowiki&amp;gt;[ &amp;lt;/nowiki&amp;gt;&lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[False,“LD”,['V',100,1],False],[False,“LD”,['V',200,1],False], .. &amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
 &amp;lt;nowiki&amp;gt;[False,“LD”,['V',101,0],False],[False,“LD”,['V',201,0],False], .. &amp;lt;/nowiki&amp;gt;  &lt;br /&gt;
 ..&lt;br /&gt;
 ]&lt;br /&gt;
&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;center&amp;gt;''Ukážka 41: LAD program''&amp;lt;/center&amp;gt;Elementom takejto matice je teda zoznam. Jeho obsah je definovaný ako:&lt;br /&gt;
&lt;br /&gt;
# element – Udáva či je objekt vertikálne prepojený s objektom v riadku pod ním&lt;br /&gt;
# element – Identifikátor príkazu &lt;br /&gt;
# element – Parametre. Ich počet je variabilný a závisí od príkazu.&amp;lt;br/&amp;gt; n. element - Posledný element predstavuje logicky stav v ktorom sa LAD objekt nachádza.  Je dôležitý iba počas simulácie&lt;br /&gt;
&lt;br /&gt;
Pri prevode program prechádza po riadkoch maticu LAD a ukladá do poľa blokov všetkých sériovo usporiadaných objektov. Ak je program prepojený s riadkom pod ním, je celá prepojená skupina uložená ako jeden blok. Tento blok je vnútorne rozdelený na jednotlivé paralelné vetvy.&lt;br /&gt;
&lt;br /&gt;
[[Image:|thumb|''Obrázok 3: Princíp blokového rozdelenia LAD programu'']]Rozdeľovanie na paralelné vetvy sa vykonáva rekurzívne a preto môžu vzniknúť mnohonásobné vnorené štruktúry. Takto rozdelené pole je už možné jednoduchým spôsobom previesť na STL kód, prechádzaním elementov poľa.&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:IIC_univerzalny_protokol_PLC.png&amp;diff=4353</id>
		<title>Súbor:IIC univerzalny protokol PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:IIC_univerzalny_protokol_PLC.png&amp;diff=4353"/>
		<updated>2010-05-18T16:58:02Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:IIC_ukazka_komunikacie.png&amp;diff=4352</id>
		<title>Súbor:IIC ukazka komunikacie.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:IIC_ukazka_komunikacie.png&amp;diff=4352"/>
		<updated>2010-05-18T16:57:45Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4351</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4351"/>
		<updated>2010-05-18T16:57:27Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Univerzálny protokol */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_bloku_ram_PLC.png|framed|center|Čítanie bloku pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_konfiguracie_PLC.png|framed|center|Zápis konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_konfiguracie_PLC.png|framed|center|Čítanie konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_kontrola_IIC_PLC.png|framed|center|Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia]]&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_ukazka_komunikacie.png|framed|center|Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]]&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:IIC_univerzalny_protokol_PLC.png|framed|center|Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici]] &lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_kontrola_IIC_PLC.png&amp;diff=4350</id>
		<title>Súbor:Komunikacia kontrola IIC PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_kontrola_IIC_PLC.png&amp;diff=4350"/>
		<updated>2010-05-18T16:55:16Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_citanie_konfiguracie_PLC.png&amp;diff=4349</id>
		<title>Súbor:Komunikacia citanie konfiguracie PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_citanie_konfiguracie_PLC.png&amp;diff=4349"/>
		<updated>2010-05-18T16:55:03Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_zapis_konfiguracie_PLC.png&amp;diff=4348</id>
		<title>Súbor:Komunikacia zapis konfiguracie PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_zapis_konfiguracie_PLC.png&amp;diff=4348"/>
		<updated>2010-05-18T16:54:44Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_citanie_bloku_ram_PLC.png&amp;diff=4347</id>
		<title>Súbor:Komunikacia citanie bloku ram PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_citanie_bloku_ram_PLC.png&amp;diff=4347"/>
		<updated>2010-05-18T16:54:32Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_citanie_ram_PLC.png&amp;diff=4346</id>
		<title>Súbor:Komunikacia citanie ram PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_citanie_ram_PLC.png&amp;diff=4346"/>
		<updated>2010-05-18T16:54:16Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_citanie_programu_PLC.png&amp;diff=4345</id>
		<title>Súbor:Komunikacia citanie programu PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_citanie_programu_PLC.png&amp;diff=4345"/>
		<updated>2010-05-18T16:49:33Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_zapis_programu_PLC.png&amp;diff=4344</id>
		<title>Súbor:Komunikacia zapis programu PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_zapis_programu_PLC.png&amp;diff=4344"/>
		<updated>2010-05-18T16:49:14Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_prepinanie_rezimu_PLC.png&amp;diff=4343</id>
		<title>Súbor:Komunikacia prepinanie rezimu PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_prepinanie_rezimu_PLC.png&amp;diff=4343"/>
		<updated>2010-05-18T16:42:57Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_identifikacia_PLC.png&amp;diff=4342</id>
		<title>Súbor:Komunikacia identifikacia PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Komunikacia_identifikacia_PLC.png&amp;diff=4342"/>
		<updated>2010-05-18T16:37:33Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4341</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4341"/>
		<updated>2010-05-18T16:34:57Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Kontrola pripravenosti I2C zariadenia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_bloku_ram_PLC.png|framed|center|Čítanie bloku pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_konfiguracie_PLC.png|framed|center|Zápis konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_konfiguracie_PLC.png|framed|center|Čítanie konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_kontrola_IIC_PLC.png|framed|center|Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia]]&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4340</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4340"/>
		<updated>2010-05-18T16:34:16Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Zápis a čítanie konfiguračného bloku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_bloku_ram_PLC.png|framed|center|Čítanie bloku pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_konfiguracie_PLC.png|framed|center|Zápis konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_konfiguracie_PLC.png|framed|center|Čítanie konfiguračného bloku]]&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4339</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4339"/>
		<updated>2010-05-18T16:33:07Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Čítanie bloku pamäte RAM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_bloku_ram_PLC.png|framed|center|Čítanie bloku pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4338</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4338"/>
		<updated>2010-05-18T16:32:30Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Čítanie pamäte RAM */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_citanie_ram_PLC.png|framed|center|Čítanie pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie bloku pamäte RAM&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4337</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4337"/>
		<updated>2010-05-18T16:31:46Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Zápis a čítanie programu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_zapis_programu_PLC.png|framed|center|Zápis programu]]&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Komunikacia_citanie_programu_PLC.png|framed|center|Čítanie programu]]&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie pamäte RAM&lt;br /&gt;
	&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie bloku pamäte RAM&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4336</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4336"/>
		<updated>2010-05-18T16:29:47Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Prepínanie režimu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_prepinanie_rezimu_PLC.png|framed|center|Prepínanie režimu]]&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis programu&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
Obrázok: Čítanie programu&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie pamäte RAM&lt;br /&gt;
	&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie bloku pamäte RAM&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4335</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4335"/>
		<updated>2010-05-18T16:28:08Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Identifikácia PLC */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Komunikacia_identifikacia_PLC.png|framed|center|Identifikácia PLC]]&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Prepínanie režimu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis programu&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
Obrázok: Čítanie programu&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie pamäte RAM&lt;br /&gt;
	&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie bloku pamäte RAM&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Prevodnik_USB_UART.png&amp;diff=4334</id>
		<title>Súbor:Prevodnik USB UART.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Prevodnik_USB_UART.png&amp;diff=4334"/>
		<updated>2010-05-18T16:23:19Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4333</id>
		<title>Prepojenie 1PLC s počítačom</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Prepojenie_1PLC_s_po%C4%8D%C3%ADta%C4%8Dom&amp;diff=4333"/>
		<updated>2010-05-18T16:20:31Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Prevodník USB - UART */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|5|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Mikrokontrolér AVR|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Možnosti prepojenia==&lt;br /&gt;
Mikrokontrolér obsahuje sériový kanál UART. Najvhodnejšie na komunikáciu s&amp;amp;nbsp;počítačom je použitie tohto kanálu. &lt;br /&gt;
	&lt;br /&gt;
Na PC sa používa na sériovú komunikáciu protokol RS232 (označované ako COM). Medzi protokolom RS232 a UARTom je rozdiel iba v&amp;amp;nbsp;napäťových úrovniach. Takže je možné použiť prevodník UART - RS232 (napríklad obvod MAX232).&lt;br /&gt;
&lt;br /&gt;
V&amp;amp;nbsp;poslednej dobe sa ale z&amp;amp;nbsp;počítačov (najmä prenosných) stratili aj porty COM a tak sa ako vhodnejšie riešenie naskytá použiť prevodník USB-UART. USB zbernica je v&amp;amp;nbsp;dnešných počítačoch najviac používaná na pripojenie periférii. &lt;br /&gt;
&lt;br /&gt;
==Prevodník USB - UART==&lt;br /&gt;
Na realizáciu prevodníka som vybral integrovaný obvod od firmy FTDI FT232R. Integrovaný obvod potrebuje na svoju činnosť minimum externých súčiastok. Schéma zapojenia je na obrázku: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Prevodnik_USB_UART.png|framed|center|Schéma zapojenia prevodníka USB-UART]]&lt;br /&gt;
&lt;br /&gt;
Zapojenie obvodu je čerpané z&amp;amp;nbsp;jeho katalógového listu.&lt;br /&gt;
&lt;br /&gt;
==Komunikačný protokol==&lt;br /&gt;
	&lt;br /&gt;
Aby bolo možné vymieňať informácie medzi počítačom a PLC, nestačí mať iba hardvérové prepojenie. Je potrebné navrhnúť aj komunikačný protokol.&lt;br /&gt;
	 &lt;br /&gt;
Pri návrhu boli na protokol kladené nasledujúce požiadavky:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Čo najjednoduchší&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Komunikáciu riadi počítač&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Protokol má obsahovať mechanizmus na hlásenie chýb&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Správa posielaná z&amp;amp;nbsp;počítača vždy začína príkazom. Podľa príkazu nasledujú ďalšie dáta. Príkazy a dáta sú potvrdzované dvoma spôsobmi:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;OK - vyslaný znak 0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že je všetko v&amp;amp;nbsp;poriadku&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;KO - vyslaný znak F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; - znamená, že poslaný príkaz neexistuje alebo ak sa použije &lt;br /&gt;
ako potvrdenie dát, tak znamená, že dáta neprišli správne.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Prehľad všetkých príkazov protokolu aj s&amp;amp;nbsp;grafickým znázornením prenosu je v&amp;amp;nbsp;nasledujúcich podkapitolách. Vo vrchnej časti obrázkov sú dáta odosielané z&amp;amp;nbsp;PC do PLC, v&amp;amp;nbsp;dolnej časti sú dáta vysielané z&amp;amp;nbsp;PLC do PC.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Identifikácia PLC===&lt;br /&gt;
	Na príkaz 01&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; reaguje PLC odoslaním identifikácie. Identifikácia sa skladá zo signatúry použitého mikrokontroléra (bajty SIG 1 - SIG 3), adresou, na ktorej začína virtuálna pamäť (bajty RAM H, RAM L; táto adresa, je vlastne 0 pre virtuálnu pamäť), a stavu PLC (bajt STAT; 1 pre run program, 0 pre stop režim). &lt;br /&gt;
	&lt;br /&gt;
Obrázok: Identifikácia PLC&lt;br /&gt;
&lt;br /&gt;
===Prepínanie režimu===&lt;br /&gt;
	Prepínanie režimu sa deje príkazmi 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Príkaz 02&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do režimu run (vykonáva sa užívateľský program). Príkaz 03&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; prepne PLC do stop režimu (užívateľský program sa nevykonáva). PLC odpovie potvrdením OK (0F&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Prepínanie režimu&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie programu===&lt;br /&gt;
	Na zápis programu do PLC slúži príkaz 04&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Program sa zapisuje po blokoch. Ich veľkosť záleží od použitého mikrokontroléra (pre ATMega 8 je to 64B, pre ATMega 16 a 32 je to 128B a pre ATMega 128 je to 256B). Koniec programu sa označí potvrdením 2x za sebou (teda OK OK). Ak je prijatý blok prijatý nesprávne, PLC odpovie potvrdením KO (F0&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;) a je potrebné vyslať ten istý blok znovu (táto funkcia zatiaľ nie je implementovaná, takže PLC vždy odpovie OK).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis programu&lt;br /&gt;
	&lt;br /&gt;
Čítanie programu je veľmi podobné zápisu. V&amp;amp;nbsp;tomto prípade ale posiela program PLC a odpovedá PC. Koniec programu je značený rovnako ako pri zápise.&lt;br /&gt;
&lt;br /&gt;
Obrázok: Čítanie programu&lt;br /&gt;
&lt;br /&gt;
Ak nie je dĺžka programu celočíselne deliteľná veľkosťou bloku, doplní sa na takú dĺžku aby bola znakmi FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Napríklad program veľkosti 116B sa pri veľkosti bloku 64B doplní na veľkosť 128B (Na koniec sa pridá 12B znakov FF&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Čítanie pamäte RAM===&lt;br /&gt;
	Príkaz 06&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie hodnoty na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L). PLC odpovie hodnotou na zadanej adrese.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie pamäte RAM&lt;br /&gt;
	&lt;br /&gt;
===Čítanie bloku pamäte RAM===&lt;br /&gt;
	Príkaz 07&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na prečítanie bloku začínajúceho na adrese ADR (zloženej z&amp;amp;nbsp;2 bajtov ADR&amp;amp;nbsp;H a ADR&amp;amp;nbsp;L) a veľkosti bloku. PLC odpovie odoslaním bloku od zadanej adresy.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie bloku pamäte RAM&lt;br /&gt;
&lt;br /&gt;
===Zápis a čítanie konfiguračného bloku===&lt;br /&gt;
	Príkazom 08&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; sa zapisuje do PLC konfiguračný blok. Prvá časť konfiguračného bloku obsahuje nastavenie či je daný vývod portu vstupný alebo výstupný (prvých 7B; 1B pre každý port PORTA-PORTG). Ak je daný bit 1, znamená to výstup. Druhá časť konfiguračného bloku obsahuje hodnoty výstupov v&amp;amp;nbsp;stop režime (druhých 7B; 1B pre každý port PORTA-PORTG).&lt;br /&gt;
&lt;br /&gt;
Obrázok: Zápis konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
	Príkaz 09&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na čítanie konfiguračného bloku. Čítanie je podobné zápisu, s&amp;amp;nbsp;tým rozdielom, že PLC odošle konfiguračný blok v&amp;amp;nbsp;rovnakom tvare ako pri zápise.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Čítanie konfiguračného bloku&lt;br /&gt;
&lt;br /&gt;
===Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia===&lt;br /&gt;
&lt;br /&gt;
	Príkaz 0A&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; slúži na zistenie, či zariadenie s&amp;amp;nbsp;danou adresou je pripojené k&amp;amp;nbsp;PLC. PLC odpovie OK, ak také zariadenie je pripojené a je pripravené na komunikáciu a KO, ak zariadenie so zadanou adresou nie je pripojené.&lt;br /&gt;
	&lt;br /&gt;
Obrázok: Kontrola pripravenosti I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenia&lt;br /&gt;
&lt;br /&gt;
=Periférie=&lt;br /&gt;
&lt;br /&gt;
Aj keď hardvérová výbava mikrokontrolérov rodiny AVR je pomerne veľká, nie vždy bude dostatočná. Preto je vhodné vytvoriť rozhranie na pripojenie periférnych zariadení. Samotný mikrokontrolér obsahuje rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C a SPI. Z týchto dvoch rozhraní sa ideálne hodí na pripojenie periférii rozhranie I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Umožňuje pripojiť až 128 zariadení po dvojvodičovej zbernici. Rozhranie SPI by potrebovalo ku každej periférii zvlášť vývod. Takže by rástol počet vodičov potrebných na prepojenie spolu s&amp;amp;nbsp;počtom periférii a tým by uberal vstupno/výstupné porty.&lt;br /&gt;
&lt;br /&gt;
==Opis I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C==&lt;br /&gt;
I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C je počítačová sériová zbernica typu multi-master (viac riadiacich členov) vyvinutá firmou Philips. Na zbernicu môžu byť pripojené zariadenia v&amp;amp;nbsp;2 režimoch - master (riadiaci) a slave (ovládaný). V&amp;amp;nbsp;jednom okamžiku môže byť na zbernici iba jedno zariadenie v&amp;amp;nbsp;režime master.&lt;br /&gt;
&lt;br /&gt;
Zbernica umožňuje pripojenie 128 zariadení pomocou 2 vodičov. Jeden vodič je dátový označený ako SDA. Druhý vodič je nositeľom hodinového signálu označený ako SCL (hodinový signál vysiela master). Oba signálové vodiče musia byť pripojené pull-up rezistormi (udržujú zbernicu v&amp;amp;nbsp;logickej 1 ak je neaktívna) na napájacie napätie. Maximálna prenosová rýchlosť I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice je šdandardne 100kbit/s (niektoré neskoršie verzie umožňujú rýchlosť až 3,4Mbit/s). Zbernica neumožňuje duplexný (obojsmerný) prenos. V&amp;amp;nbsp;jednom okamžiku sa môžu dáta prenášať iba jedným smerom. Každé zariadenie musí mať svoju jedinečnú 7&amp;amp;nbsp;bitovú adresu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Univerzálny protokol==&lt;br /&gt;
Aby bolo možné použiť ľubovoľné I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadenie, tak je potrebné spraviť univerzálny protokol na komunikáciu. Ten musí zahŕňať všetky možnosti, ktoré sa môžu na I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici vyskytnúť. &lt;br /&gt;
&lt;br /&gt;
Typická ukážka komunikácie po zbernici je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Ukážka komunikácie po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
Z&amp;amp;nbsp;obrázka je vidieť, že komunikácia vždy začína štartovacou podmienkou (''S''), nasleduje adresovaním zariadenia a určením, či sa bude čítať alebo zapisovať (''R/W''). Potom nasledujú samotné dáta. Každý bajt je ukončený potvrdením (''A''), až na jednu výnimku. Ak sa zo zariadenia číta, tak posledný bajt sa neukončuje potvrdením. Je to preto, aby zariadenie už neposlalo ďalší bajt (napríklad pri sekvenčonom čítaní zariadenie posiela postupne dáta od zadanej adresy, pokiaľ sa mu posiela potvrdenie prijímu). Komunikácia je ukončená stop podmienkou (''K''). &lt;br /&gt;
&lt;br /&gt;
Mnou navrhnutý protokol umožňuje komunikáciu s&amp;amp;nbsp;akýmkoľvek zariadením. Stačí si nadefinovať potrebné bajty podľa katalógového listu k&amp;amp;nbsp;zariadeniu. Tento protokol sa prechádza v&amp;amp;nbsp;každej slučke a tým zabezpečí oslovenie každého želaného zariadenia. &lt;br /&gt;
&lt;br /&gt;
Protokol je uvedený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Univerzálny protokol na komunikáciu po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Vysvetlivky k&amp;amp;nbsp;jednotlivým bajtom na obrázku:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SKOK - Adresa posunutia nasledujúceho bajtu SKOK. Ak je 0, tak to značí koniec. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBL, PBH - Adresa povoľovacieho bajtu vo virtuálnej RAM (L dolný bajt, H horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PBB - Maska povoľovacieho bitu (V0.5 - Na 5. mieste bude 1, ostatné 0 = 00100000&amp;lt;sub&amp;gt;b&amp;lt;/sub&amp;gt;). &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; ADR - Adresa zariadenia. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; N - Počet čítacích/zapisovacích blokov. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; R/W - Určuje, či sa nasledujúci blok dát bude čítať alebo zapisovať. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; M - Počet slov dát. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; DATL, DATH - Samotné dáta (L - dolný bajt, H - horný bajt). &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ako dáta sa dajú prenášať buď konštanty alebo dáta uložené na adresách 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt; a vyšších vo virtuálnej pamäti. Za konštantu sa považuje akékoľvek číslo menšie ako 100&amp;lt;sub&amp;gt;h&amp;lt;/sub&amp;gt;. Všetko ostatné je považované za adresu. Konštanty majú význam iba pri posielaní dát (bol by nezmysel načítavať dáta do konštanty). DAT vlastne vyjadruje jeden bajt odoslaný/prijatý po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici.&lt;br /&gt;
&lt;br /&gt;
==Terminálový modul==&lt;br /&gt;
Terminálový modul slúži na uľahčenie obsluhy PLC systému. Obsahuje displej, ktorý zobrazuje nadefinované informácie, tlačítka a piezo bzučiak na zvukovú signalizáciu.&lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_term}. Celý modul je ovládaný mikrokontrolérom ATMega8. O&amp;amp;nbsp;zobrazovanie sa stará dvojriadkový LCD modul. Klávesnica je realizovaná mikrospínačmi zapojenými do matice 3x4. &lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť sa skladá z týchto častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia po I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernici v&amp;amp;nbsp;režime slave &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; komunikácia s&amp;amp;nbsp;LCD modulom &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; obsluha maticovej klávesnice &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Komunikačný protokol terminálového modulu je zobrazený na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Komunikačný protokol terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Kvôli jednoduchšiemu zápisu a čítaniu údajov modulu je protokol navrhnutý rovnako ako na externých pamätiach. Modul má vytvorenú virtuálnu pamäť, ktorá je adresovateľná po zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. Rozdelenie tejto pamäte je na obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte terminálového modulu&lt;br /&gt;
&lt;br /&gt;
Prvé 2 bajty slúžia na uchovávanie stavu tlačítok. Od adresy 2 až po adresu 200 je oblasť pre ukladanie premenných zobrazovaných na displeji. &lt;br /&gt;
Na adrese 200 začína oblasť aktuálne zobrazenej &amp;quot;obrazovky&amp;quot;. Obrazovka sa skladá z troch častí:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; formátovací reťazec - rovnaký ako pri použití funkcie \texttt{printf} v&amp;amp;nbsp;jazyku C. Reťazec musí byť ukončený znakom 0. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; adresy premenných použitých pri zobrazení na displeji &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; dĺžka pípnutia pri zobrazení obrazovky (0-255) &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Výkonový vstupno/výstupný modul==&lt;br /&gt;
Vstupno výstupný modul slúži na rozšírenie riadiacej jednotky o&amp;amp;nbsp;vstupy a výkonové výstupy. &lt;br /&gt;
&lt;br /&gt;
===Hardvérová realizácia===&lt;br /&gt;
Schéma zapojenia sa nachádza v&amp;amp;nbsp;prílohe \ref{sec:sch_io}. Celý modul je ovládaný mikrokontrolérom ATMega8. Pre výkonové výstupy je použitých 8 MOSFET tranzistorov IRFR024N. Tieto tranzistory sa vyznačujú nízkym prechodovým odporom v&amp;amp;nbsp;zopnutom stave, takže sa zahrievajú veľmi málo aj pri väčších prúdoch. Je možné ich použiť do napätia 55V a prúdu 17A. Vstupy sú chránené odporovým deličom a znenerovou diódou na 5V. Tým je možné pripojenie logickej 1 až do úrovne 40V.&lt;br /&gt;
&lt;br /&gt;
===Softvérová realizácia===&lt;br /&gt;
Softvérová časť je zhodná s&amp;amp;nbsp;terminálovým modulom. Sú z&amp;amp;nbsp;nej len odstránené časti na ovládanie displeja a maticovej klávesnice. Virtuálna pamäť má len 2 bajty. Prvý slúži na uchovávanie stavu vstupov a druhý na uchovávanie stavu výstupov. Pridaná je možnosť nastavenia spodných 4 bitov adresy modulu. Takto je možné použiť až 16 vstupno/výstupných modulov.&lt;br /&gt;
&lt;br /&gt;
=Záver=&lt;br /&gt;
V&amp;amp;nbsp;práci som mal za úlohu navrhnúť operačný systém pre jednočipové PLC. Ako hardvér PLC sú zvolené mikrokontroléry firmy Atmel rady ATMega. Začal som návrhom jednotlivých modulov operačného systému. Každý modul obsluhuje svoju časť hardvéru. Moduly operačného systému som zväčša písal v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;využitím knižníc avr-libc. Niektoré časti sú do kódu v&amp;amp;nbsp;jazyku C vkladané v&amp;amp;nbsp;jazyku symbolických adries (napríklad záloha registrov, pred skokom do užívateľského programu).&lt;br /&gt;
&lt;br /&gt;
	Ďalšou väčšou časťou bolo prepísanie príkazov jazyka STL do jazyka symbolických adries pre AVR. Bolo treba sa oboznámiť s&amp;amp;nbsp;príkazmi a po zistení ich funkčnosti napísať rovnakú funkčnosť v&amp;amp;nbsp;jazyku symbolických adries. Jazyk STL využíva zásobníkovú pamäť, takže najjednoduchšie riešenie bolo využiť inštrukcie práce so zásobníkom, ktoré AVR obsahuje. Vytvoril som obsiahlu sadu príkazov - aritmetické 8, 16 a 32-bitové operácie, operácie v&amp;amp;nbsp;plávajúcej desatinnej čiarke, logické, časovače, čítače.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;nasledujúcej časti sa venujem prepojeniu PLC s&amp;amp;nbsp;počítačom a návrhu komunikačného protokolu, ktorý je využitý pri komunikácii s&amp;amp;nbsp;vývojovým prostredím. Na prepojenie s&amp;amp;nbsp;počítačom som navrhol prevodník USB-UART.&lt;br /&gt;
	&lt;br /&gt;
	V&amp;amp;nbsp;poslednej časti som opísal návrh univerzálneho protokolu na komunikáciu s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami. Pripojením rozširujúcich zariadení sa zvýšia možnosti PLC. Na konci tejto kapitoly sú uvedené návrhy dvoch rozširujúcich modulov. A to terminálového modulu slúžiaceho na zjednodušenie obsluhy PLC a modulu výkonových výstupov a vstupov slúžiaci na rozšírenie vstupov a výstupov pre PLC.&lt;br /&gt;
&lt;br /&gt;
=Literatúra=&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;''Architektura AVR v kostce'' [online]. [cit: 5.1.2009], Dostupný na internete: http://avr.hw.cz/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;Atmel:Katalógový list ATMega 128. ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 16.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 32.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Atmel: ''Katalógový list ATMega 8.''&lt;br /&gt;
		ATMEL Corporation, 2003&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
	 	&amp;lt;li&amp;gt;''avr-libc Reference manual 1.6.1'' [online]. &lt;br /&gt;
		[cit: 1.2.2009], Dostupný na internete: http://www.nongnu.org/avr-libc/&amp;lt;/li&amp;gt;&lt;br /&gt;
	 &lt;br /&gt;
		&amp;lt;li&amp;gt;''I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C'' [online]. &lt;br /&gt;
		[cit: 30.12.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/I2C/&amp;lt;/li&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;li&amp;gt;Future Technology Devices International Ltd.: ''Katalógový list FT232R USB UART I.C.''.&lt;br /&gt;
		Future Technology Devices International Ltd., 2005&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;''Programovatelný logický automat'' [online]. &lt;br /&gt;
		[cit: 5.1.2009], Dostupný na internete: http://cs.wikipedia.org/wiki/Programovatelný_logický_automat&amp;lt;/li&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
		&amp;lt;li&amp;gt;Siemens: ''Programovatelný automat S7-200.''&lt;br /&gt;
		Systémový manuál, Siemens, 2004&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;li&amp;gt;Váňa, V.: ''Mikrokontroléry ATMEL AVR – Popis procesoru a instrukční soubor.''&lt;br /&gt;
		BEN - technická literatura, Praha 2003. ISBN 80-7300-083-0&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Rozdelenie_pamate_T_1PLC.png&amp;diff=4332</id>
		<title>Súbor:Rozdelenie pamate T 1PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Rozdelenie_pamate_T_1PLC.png&amp;diff=4332"/>
		<updated>2010-05-18T16:17:27Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=4331</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=4331"/>
		<updated>2010-05-18T16:16:22Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Modul časovačov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc \cite{lit:avr_libc} (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku \ref{obr:rozdelenie_ram}.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Virtualna_ram_1PLC.png|framed|center|Rozdelenie virtuálnej pamäte]]&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zaloha_ram_1PLC.png|framed|center|Záloha pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
Je to časť schémy riadiacej jednotky uvedenej v&amp;amp;nbsp;prílohe \ref{sec:sch_rj}. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
[[Súbor:Rozdelenie_pamate_T_1PLC.png|framed|center|Rozdelenie pamäte T]]&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu \ref{sec:uni_protokol})&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zaloha_ram_1PLC.png&amp;diff=4330</id>
		<title>Súbor:Zaloha ram 1PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zaloha_ram_1PLC.png&amp;diff=4330"/>
		<updated>2010-05-18T16:15:19Z</updated>

		<summary type="html">&lt;p&gt;Mayo: bola nahraná nová verzia „Súbor:Zaloha ram 1PLC.png“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zaloha_ram_1PLC.png&amp;diff=4329</id>
		<title>Súbor:Zaloha ram 1PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Zaloha_ram_1PLC.png&amp;diff=4329"/>
		<updated>2010-05-18T16:14:15Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=4328</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=4328"/>
		<updated>2010-05-18T16:13:52Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Záloha RAM pri výpadku */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc \cite{lit:avr_libc} (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku \ref{obr:rozdelenie_ram}.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Virtualna_ram_1PLC.png|framed|center|Rozdelenie virtuálnej pamäte]]&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Zaloha_ram_1PLC.png|framed|center|Záloha pamäte RAM]]&lt;br /&gt;
&lt;br /&gt;
Je to časť schémy riadiacej jednotky uvedenej v&amp;amp;nbsp;prílohe \ref{sec:sch_rj}. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie pamäte T&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu \ref{sec:uni_protokol})&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Virtualna_ram_1PLC.png&amp;diff=4327</id>
		<title>Súbor:Virtualna ram 1PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Virtualna_ram_1PLC.png&amp;diff=4327"/>
		<updated>2010-05-18T16:12:49Z</updated>

		<summary type="html">&lt;p&gt;Mayo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=4326</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=4326"/>
		<updated>2010-05-18T16:11:14Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Rozdelenie virtuálnej pamäte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc \cite{lit:avr_libc} (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku \ref{obr:rozdelenie_ram}.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
[[Súbor:Virtualna_ram_1PLC.png|framed|center|Rozdelenie virtuálnej pamäte]]&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Obrázok: Záloha pamäte RAM&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. Je to časť schémy riadiacej jednotky uvedenej v&amp;amp;nbsp;prílohe \ref{sec:sch_rj}. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie pamäte T&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu \ref{sec:uni_protokol})&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:Rozdelenie_ram_1PLC.png&amp;diff=4325</id>
		<title>Súbor:Rozdelenie ram 1PLC.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:Rozdelenie_ram_1PLC.png&amp;diff=4325"/>
		<updated>2010-05-18T16:06:56Z</updated>

		<summary type="html">&lt;p&gt;Mayo: Rozdelenie pamäte jednočipového PLC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rozdelenie pamäte jednočipového PLC&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=4324</id>
		<title>Softvér 1PLC</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=Softv%C3%A9r_1PLC&amp;diff=4324"/>
		<updated>2010-05-18T16:06:31Z</updated>

		<summary type="html">&lt;p&gt;Mayo: /* Modul prístupu k&amp;amp;nbsp;pamäti údajov */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Kategória:Študentské práce]][[Kategória:Diplomové práce]][[Kategória:Operačné systémy]]&lt;br /&gt;
{{Praca_uvod|3|Návrh a realizácia jednočipového PLC|Programovateľné logické automaty|Hardvér (jednočipové PLC)|Softvér 1PLC|Funkčné bloky programu pre 1PLC|Prepojenie 1PLC s počítačom||||||}}&lt;br /&gt;
__TOC__&lt;br /&gt;
= =&lt;br /&gt;
==Opis operačného systému==&lt;br /&gt;
&lt;br /&gt;
Operačný systém (OS) má za úlohu umožniť užívateľskému programu pristupovať k&amp;amp;nbsp;jednotlivým častiam hardvéru. Operačný systém je zväčša písaný v&amp;amp;nbsp;jazyku C s&amp;amp;nbsp;použitím knižníc avr-libc \cite{lit:avr_libc} (odstraňujú rozdiely pri programovaní jednotlivých typov mikroprocesorov Atmel AVR). Niektoré špecifické časti sú písané v&amp;amp;nbsp;jazyku assembler. Operačný systém musí zabezpečiť komunikáciu s&amp;amp;nbsp;počítačom, aby bolo možné nahrať užívateľský program a za behu programu sledovať, prípadne aj meniť hodnoty v&amp;amp;nbsp;pamäti RAM. Ďalej musí zabezpečiť beh obslužnej slučky PLC, tzn. načítavanie vstupov, posielanie údajov na výstupy, zmenu hodnôt časovačov.&lt;br /&gt;
	&lt;br /&gt;
Operačný systém je rozdelený do niekoľkých modulov. Každý modul obsahuje funkcie potrebné na prístup k&amp;amp;nbsp;danému hardvéru alebo zabezpečuje potrebné softvérové funkcie (napríklad softvérové časovače). Každý modul má kvôli prehľadnosti zdrojový kód napísaný v&amp;amp;nbsp;oddelenom súbore. Popismi jednotlivých modulov sa zaoberá kapitola \ref{sec:moduly}.&lt;br /&gt;
&lt;br /&gt;
==Riadiaca slučka==&lt;br /&gt;
&lt;br /&gt;
PLC vykonávajú program v&amp;amp;nbsp;neustále sa opakujúcej riadiacej slučke. Po zapnutí sa vykoná inicializácia PLC. Na začiatku slučky najprv prebehne komunikácia s&amp;amp;nbsp;PC alebo periférnymi zariadeniami. Potom sa spraví obraz vstupov (hodnoty na vstupoch sa zapíšu do pamäte). Následne sa vykoná užívateľský program. Ako posledné sa zapíšu obrazy výstupov na výstupné porty PLC. Celý cyklus je zobrazený na obrázku \ref{obr:slucka}.&lt;br /&gt;
&lt;br /&gt;
[[Súbor:PLC_slucka.png|framed|center|Riadiaca slučka PLC]]&lt;br /&gt;
&lt;br /&gt;
==Moduly operačného systému==&lt;br /&gt;
&lt;br /&gt;
===Modul sériovej komunikácie===&lt;br /&gt;
Modul sériovej komunikácie slúži na komunikáciu s&amp;amp;nbsp;počítačom. Sériový modul sa skladá z&amp;amp;nbsp;niekoľkých funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt; Inicializácia – slúži na nastavenie prenosovej rýchlosti a povolenie prerušení od sériového kanálu. Parametre sériového kanálu sú uvedené v tabuľke parametre sériovej komunikácie.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia príjmu – Funkcia je vyvolaná po prijatí znaku cez sériovú linku. Znak je zapísaný do vyrovnávacej pamäte príjmu. &amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Obsluha prerušenia vysielania – Funkcia je vyvolaná po odvysielaní znaku. Znamená, že posledný vysielaný znak sa odoslal a linka je schopná odoslať ďalší znak. Vyberie sa ďalší znak z&amp;amp;nbsp;vyrovnávacej pamäte vysielania (ak tam ešte nejaký je) a vyšle sa.&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Funkcia na spracovanie prijatých dát – funkcia sa stará o rozpoznanie prijatého príkazu (príkazy sú vysvetlené v&amp;amp;nbsp;kapitole \ref{sec:prikazy}) a poslanie patričnej odpovede. Táto funkcia je volaná po každom cykle riadiacej slučky.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Veľkosť vyrovnávacej pamäte závisí od typu mikroprocesora. Je nastavená na veľkosť aká je potrebná na zápis bloku do pamäte programu (pozri nasledujúcu podkapitolu).&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Parametre sériovej komunikácie&lt;br /&gt;
|-&lt;br /&gt;
! Prenosová rýchlosť&lt;br /&gt;
! Počet stop bitov&lt;br /&gt;
! Počet dátových bitov&lt;br /&gt;
! Parita&lt;br /&gt;
|-&lt;br /&gt;
| 115200baud&lt;br /&gt;
| 1&lt;br /&gt;
| 8&lt;br /&gt;
| Nie&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Modul prístupu k pamäti programu==&lt;br /&gt;
Tento modul obsahuje funkcie potrebné na čítanie a zápis do pamäte programu. Slúži na nahrávanie a čítanie užívateľského programu. &lt;br /&gt;
	Architektúra mikroprocesorov Atmel AVR dovoľuje nielen čítanie pamäte programu ale aj jej zápis z&amp;amp;nbsp;bežiaceho programu. Musí byť ale splnená podmienka, že funkcia na zápis je umiestnená v&amp;amp;nbsp;špeciálnej sekcií pamäte programu. Táto sekcia sa nazýva bootsection (zavádzacia sekcia) a nachádza sa na konci pamäte programu. Do tejto časti pamäte nie je možné zapisovať z&amp;amp;nbsp;bežiaceho programu. Veľkosť sekcie je možné nastaviť pri programovaní mikroprocesora na 128W (256B), 256W(512B), 512W(1024B)  alebo 1024W(2048B).&lt;br /&gt;
	Funkcie modulu:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Zápis do pamäte programu - funkcia zapíše vyrovnávaciu pamäť sériového prijímu do pamäte programu. Zápis programu je možný iba po blokoch (veľkosť závisí od typu mikroprocesora; v&amp;amp;nbsp;avr-libc je to konštanta SPM_PAGESIZE – takú istú veľkosť má aj vyrovnávacia pamäť príjmu).&amp;lt;/li&amp;gt;&lt;br /&gt;
 &amp;lt;li&amp;gt;Čítanie z&amp;amp;nbsp;pamäte programu - funkcia prečíta blok o&amp;amp;nbsp;veľkosti SPM_PAGESIZE a zapíše do vysielacej vyrovnávacej pamäti a spustí vysielanie. &amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Obe funkcie potrebujú ako parameter adresu, od ktorej budú zapisovať alebo čítať.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti údajov===&lt;br /&gt;
&lt;br /&gt;
	Modul umožňuje čítanie adresy v&amp;amp;nbsp;pamäti. Slúži na monitorovanie pamäte RAM. Modul má jedinú funkciu, ktorá naplní vysielaciu vyrovnávaciu pamäť hodnotou pamäte na zadanej adrese a spustí vysielanie.&lt;br /&gt;
	Pamäť údajov PLC tvorí pole typov uint_8t (celočíselný neznamienkový typ veľkosti 1B). Toto pole tvorí virtuálnu pamäť RAM. Rozdelenie pamäte RAM mikrokontroléra je zobrazené na obrázku \ref{obr:rozdelenie_ram}.&lt;br /&gt;
	&lt;br /&gt;
[[Súbor:Rozdelenie_ram_1PLC.png|framed|center|Rozdelenie pamäte]]&lt;br /&gt;
&lt;br /&gt;
===Rozdelenie virtuálnej pamäte===&lt;br /&gt;
	Virtuálna pamäť je rozdelená na niekoľko častí: &lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie virtuálnej pamäte&lt;br /&gt;
&lt;br /&gt;
Do jednotlivých častí majú prístup ostatné moduly OS. Vysvetlenie významu jednotlivých častí:&lt;br /&gt;
	&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; P - obraz vstupov a výstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; PA - obraz analógových vstupov (obsluhuje modul vstupu/výstupu)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; SP - špeciálne registre. Obsahuje nastavenia pre AD (analógovo-digitálny) prevodník, PWM (pulzne šírková modulácia) a stavové informácie. Jednotlivé bajty sú vysvetlené v&amp;amp;nbsp;tabuľke význam bajtov pamäte SP.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; T - pamäť časovačov (obsluhuje modul časovača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; C - pamäť čítačov (obsluhuje priamo blok čítača)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; V - pamäť pre premenné (voľne prístupná užívateľovi)&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bajtov pamäte SP&lt;br /&gt;
|-&lt;br /&gt;
! Bajt&lt;br /&gt;
! Bit&lt;br /&gt;
! Význam&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|0&lt;br /&gt;
|Vždy 1&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|1&lt;br /&gt;
|1 po 1. prechode zo stop do run režimu po resete v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP0&lt;br /&gt;
|2&lt;br /&gt;
|1 po ktoromkoľvek prechode zo stop do run režimu v prvom cykle. Inak 0&lt;br /&gt;
|-&lt;br /&gt;
|SP1&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP2&lt;br /&gt;
|&lt;br /&gt;
|Zatiaľ nepoužité&lt;br /&gt;
|-&lt;br /&gt;
|SP3&lt;br /&gt;
|0-1&lt;br /&gt;
|Nastavenie referencie AD prevodníka (tabuľka význam bitov pre nastavenie AD prevodníka)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|0-2&lt;br /&gt;
|Nastavenie nosnej frekvencie pre PWM (tabuľka význam bitov pre nastavenie nosnej frekvencie PWM)&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|3&lt;br /&gt;
|Zapnutie výstupu na kanál PWM1&lt;br /&gt;
|-&lt;br /&gt;
|SP4&lt;br /&gt;
|4&lt;br /&gt;
|Zapnutie výstupu na kanál PWM2&lt;br /&gt;
|-&lt;br /&gt;
|SP5&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM1 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|SP6&lt;br /&gt;
|&lt;br /&gt;
|Nastavenie dĺžky impulzu pre kanál PWM2 (255 maximálny impulz, 0 minimálny impulz)&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie AD prevodníka&lt;br /&gt;
|-&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|Externá referencia pripojená na vstup AREF&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|Referencia je napájacie napätie AVCC. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|Interná referencia 2,56V. Na AREF vstup treba pripojiť kondenzátor&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov pre nastavenie nosnej frekvencie PWM&lt;br /&gt;
|-&lt;br /&gt;
!Bit 2&lt;br /&gt;
!Bit 1&lt;br /&gt;
!Bit 0&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|16MHz (frekvencia kryštálu)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|2MHz (frekvencia kryštálu /8)&lt;br /&gt;
|-&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|250kHz (frekvencia kryštálu /64)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|0&lt;br /&gt;
|62,5kHz (frekvencia kryštálu /256)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|1&lt;br /&gt;
|15,625kHz (frekvencia kryštálu /1024)&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|0&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|-&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|1&lt;br /&gt;
|PWM vypnuté&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
===Záloha RAM pri výpadku===&lt;br /&gt;
&lt;br /&gt;
Obrázok: Záloha pamäte RAM&lt;br /&gt;
&lt;br /&gt;
Zálohu pamäte pri výpadku zabezpečuje obvod na obrázku. Je to časť schémy riadiacej jednotky uvedenej v&amp;amp;nbsp;prílohe \ref{sec:sch_rj}. Napájanie je privedené do&amp;amp;nbsp;mikrokontroléra cez shotkyho diódu D1. Zároveň je za diódou zapojený aj zálohovací kondenzátor C3 s&amp;amp;nbsp;kapacitou 10mF. Dióda zabráni vybíjaniu kondenzátora cez iné súčiaskty v&amp;amp;nbsp;obvode. Detekciu výpadku napájania robí obvod IC2. Je to obvod dohliadania (watchdog). Pri poklese napájania na 4,6V sa objaví na výstupe RST nízka úroveň. Tento výstup je pripojený na vstup externého prerušenia. Reakciou na prerušenie je skopírovanie vymedzenej časti pamäte do EEPROM. Počas zálohovania slúži kondenzátor ako napájací zdroj pre mikrokontrolér. Mikrokontrolér normálne pracuje až kým neklesne napätie na kondenzátore pod hodnotu 2,7V.&lt;br /&gt;
&lt;br /&gt;
===Modul prístupu k&amp;amp;nbsp;pamäti EEPROM===&lt;br /&gt;
	Modul má na starosti zápis a čítanie z&amp;amp;nbsp;a&amp;amp;nbsp;do pamäte EEPROM. Sú použité funkcie z&amp;amp;nbsp;knižnice avr-libc. Pamäť EEPROM sa používa na uloženie stavových premenných (napríklad veľkosť nahraného programu, konfiguračného bloku) a pri výpadku napájania (respektíve poklese pod určitú hodnotu) sa sem uloží časť pamäte RAM, ktorá je označená ako zálohovaná. &lt;br /&gt;
	&lt;br /&gt;
&lt;br /&gt;
===Modul časovačov===&lt;br /&gt;
	Zabezpečuje inkrementáciu všetkých spustených časovačov. Rozdelenie pamäte T je zobrazené na nasledujúcom obrázku:&lt;br /&gt;
&lt;br /&gt;
Obrázok: Rozdelenie pamäte T&lt;br /&gt;
&lt;br /&gt;
Celá pamäť je rozčlenená na trojbajtové segmenty. Každý segment prislúcha jednému čacovaču. Prvé dva bajty uchovávajú hodnotu časovača. Posledný bajt slúži na uloženie stavov časovača. Význam bitov stavového bajtu je v&amp;amp;nbsp;tabuľke:&lt;br /&gt;
&lt;br /&gt;
{| class=wikitable border=1 cellpadding=5&lt;br /&gt;
|+ Význam bitov stavového bajtu časovača&lt;br /&gt;
|-&lt;br /&gt;
!Bit&lt;br /&gt;
!Význam&lt;br /&gt;
|-&lt;br /&gt;
|0-5&lt;br /&gt;
|Mikročas&lt;br /&gt;
|-&lt;br /&gt;
|6&lt;br /&gt;
|Beh časovača (ak je 1, tak sa inkrementuje)&lt;br /&gt;
|-&lt;br /&gt;
|7&lt;br /&gt;
|Stav (či už dosiahol nastavenú hodnotu)&lt;br /&gt;
|}&lt;br /&gt;
	&lt;br /&gt;
	Časovač je nastavený tak aby vyvolal prerušenie každých 20 mikro sekúnd. V&amp;amp;nbsp;obsluhe prerušenia sa postupne prechádzajú všetky časovače s&amp;amp;nbsp;rozlíšením 1ms. Ku každému spustenému časovaču sa pripočíta 1 do časti mikročas. Ak prekročí hodnota mikročasu 50, pripočíta sa 1 k&amp;amp;nbsp;hodnote časovača (prvé dva bajty). Tým sa dosiahne vyššie rozlíšenie časovača.&lt;br /&gt;
	&lt;br /&gt;
	Časovače s&amp;amp;nbsp;rozlíšením 10ms a 100ms sú inkrementované obdobne ale 10ms časovače až po 10 pretečeniach časovača a 100ms až po 100 pretečeniach časovača.&lt;br /&gt;
&lt;br /&gt;
===Vstupno/výstupný modul===&lt;br /&gt;
	Vstupno/výstupný modul má na starosti prístup na digitálne porty mikrokontroléra, meria hodnoty na vstupe jednotlivých kanálov AD prevodníka a riadi PWM výstupy. &lt;br /&gt;
	Modul obsahuje niekoľko funkcií:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Nastavenie portov - nastaví jednotlivé porty na vstupné alebo výstupné podľa konfiguračného bloku uloženého v&amp;amp;nbsp;pamäti EEPROM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Čítanie vstupov - prečíta hodnoty vstupov a uloží ich do pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov - zapisuje hodnoty na výstupy. Hodnoty prečíta z&amp;amp;nbsp;pamäte P.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Zápis výstupov v stop režime - zapíše hodnoty na výstupy uložené v&amp;amp;nbsp;konfiguračnom bloku v&amp;amp;nbsp;pamäti EEPROM. &amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia AD prevodníka - nastaví režim prevodu AD prevodníka (single convert - konverzia iba po jej spustení)&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; AD prevod - postupne zmeria hodnoty na všetkých vstupných kanáloch AD prevodníka. Nastavenie referencie pre prevodník je načítané z&amp;amp;nbsp;pamäte SP (3. bajt - tabuľka význam bajtov pamäte SP ).&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia PWM - nastaví 16bitový časovač na režim fast PWM 8-bit (8 bitové rýchle PWM). V&amp;amp;nbsp;tomto režime je možné použiť na PWM výstup 2 nezávislé kanály. Nosná frekvencia ale musí byť rovnaká, pretože zdroj hodín a jeho predelička je rovnaká.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Beh PWM - z&amp;amp;nbsp;pamäte SP nastaví pre PWM nosnú frekvenciu (je pomerom taktovacej frekvencie mikrokontroléra). Rovnako nastaví dĺžky impulzov pre jednotlivé kanály PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Stop PWM - vypne časovač obsluhujúci PWM.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Modul komunikácie s&amp;amp;nbsp;perifériami===&lt;br /&gt;
&lt;br /&gt;
Modul slúži na komunikáciu so zariadeniami pripojenými na zbernici I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C. &lt;br /&gt;
Modul obsahuje tieto funkcie:&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Inicializácia I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zbernice - nastaví prenosovú rýchlosť&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Kontrola pripojenia zariadenia - vráti, či je zariadenie so zadanou adresou pripojené a schopné komunikovať&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt; Komunikácia s&amp;amp;nbsp;I&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;C zariadeniami - prebehne protokol komunikácie a osloví všetky potrebné zariadenia (bližšie o&amp;amp;nbsp;protokole pozri kapitolu \ref{sec:uni_protokol})&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
	<entry>
		<id>http://www.kiwiki.info/index.php?title=S%C3%BAbor:PLC_slucka.png&amp;diff=4323</id>
		<title>Súbor:PLC slucka.png</title>
		<link rel="alternate" type="text/html" href="http://www.kiwiki.info/index.php?title=S%C3%BAbor:PLC_slucka.png&amp;diff=4323"/>
		<updated>2010-05-18T16:02:45Z</updated>

		<summary type="html">&lt;p&gt;Mayo: Riadiaca slučka PLC&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Riadiaca slučka PLC&lt;/div&gt;</summary>
		<author><name>Mayo</name></author>
		
	</entry>
</feed>