{"id":897,"date":"2016-06-03T06:41:33","date_gmt":"2016-06-03T05:41:33","guid":{"rendered":"http:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/?p=897"},"modified":"2016-08-16T05:24:09","modified_gmt":"2016-08-16T04:24:09","slug":"laboratorni-zdroj-11-slave-modul-atmega16-uart","status":"publish","type":"post","link":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/","title":{"rendered":"Laboratorn\u00ed zdroj &#8211; 11. Slave modul ATmega16 UART"},"content":{"rendered":"<p style=\"text-align: justify;\">Popis programu, kter\u00fd prost\u0159ednictv\u00edm s\u00e9riov\u00e9ho kan\u00e1lu UART na procesoru ATmega16 p\u0159ij\u00edm\u00e1 data z nad\u0159\u00edzen\u00e9 desky Master, odes\u00edl\u00e1 odpov\u011b\u010f, nastavuje DA p\u0159evodn\u00edk DAC8563 a \u010dte data z AD p\u0159evodn\u00edku ADS8341.<\/p>\n<p style=\"text-align: justify;\"><a href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2015\/11\/Blokov\u00e9-sch\u00e9ma.png\" rel=\"attachment wp-att-713\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-713 size-full\" title=\"laboratorn\u00ed zdroj blokov\u00e9 sch\u00e9me\" src=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2015\/11\/Blokov\u00e9-sch\u00e9ma.png\" alt=\"DAC8562 ADS8343\" width=\"1047\" height=\"860\" srcset=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2015\/11\/Blokov\u00e9-sch\u00e9ma.png 1047w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2015\/11\/Blokov\u00e9-sch\u00e9ma-150x123.png 150w, https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2015\/11\/Blokov\u00e9-sch\u00e9ma-334x274.png 334w\" sizes=\"auto, (max-width: 1047px) 100vw, 1047px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: justify;\">Komunikaci mezi procesory \u0159\u00edd\u00ed deska Master, tak\u017ee s\u00e9riov\u00fd kan\u00e1l procesoru ATmega16 \u010dek\u00e1 na data, kter\u00e1 vy\u0161le Master. Je detekov\u00e1n prvn\u00ed znak &#8218;Z&#8216;, kter\u00fdm za\u010d\u00edn\u00e1 ka\u017ed\u00fd paket 20-ti bajt\u016f. P\u0159edpokl\u00e1d\u00e1 se, \u017ee na s\u00e9riov\u00e9 sb\u011brnici je p\u0159ipojeno v\u011bt\u0161\u00ed mno\u017estv\u00ed Slave modul\u016f. Proto je p\u0159i p\u0159\u00edjnu kontrolov\u00e1n je\u0161t\u011b \u010dtvrt\u00fd znak, kter\u00fd ozna\u010duje \u010d\u00edslo modulu. Pokud jsou tyto dva znaky sou\u010d\u00e1st\u00ed p\u0159ijat\u00e9ho paketu, bude p\u0159ijato v\u0161ech dvacet znak\u016f do pole dat SerialArray.<\/p>\n<p style=\"text-align: justify;\">Potom program vypo\u010d\u00edt\u00e1 CRC p\u0159ijat\u00fdch znak\u016f a v\u00fdsledek porovn\u00e1 s CRC, kter\u00fd vypo\u010d\u00edtal Master a ulo\u017eil na konec vys\u00edlan\u00e9ho paketu. Kdy\u017e jsou oba CRC shodn\u00e9, p\u0159edpokl\u00e1d\u00e1 se, \u017ee zpr\u00e1va je bez chyb a data budou pou\u017eita k ovl\u00e1d\u00e1n\u00ed Slave modulu.<\/p>\n<p style=\"text-align: justify;\">Ihned po dokon\u010den\u00ed p\u0159\u00edjmu dat a vyhodnocen\u00ed jeho spr\u00e1vnosti jsou do pole dat SerialArray ulo\u017eeny hodnoty, kter\u00e9 bude Slave modul vys\u00edlat okam\u017eit\u011b vys\u00edlat. P\u0159edpokl\u00e1d\u00e1 se, \u017ee Master po odesl\u00e1n\u00ed zpr\u00e1vy nech\u00e1 dostate\u010dn\u00fd prostor na sb\u011brnici a jin\u00fd modul nebude vys\u00edlat. Tak\u017ee Slave nekontroluje, zda je sb\u011brnice voln\u00e1. Sou\u010d\u00e1st\u00ed vys\u00edlan\u00e9 zpr\u00e1vy jsou data nam\u011b\u0159en\u00e1 AD p\u0159evodn\u00edkem a CRC vys\u00edlan\u00fdch dat.<\/p>\n<p style=\"text-align: justify;\">Cel\u00e1 komunikace je obsluhov\u00e1na programy p\u0159eru\u0161en\u00ed od s\u00e9riov\u00e9ho kan\u00e1lu.<\/p>\n<p style=\"text-align: justify;\">Hlavn\u00ed program procesoru na za\u010d\u00e1tku nastav\u00ed hodnoty registr\u016f, kter\u00e9 ovl\u00e1daj\u00ed perifern\u00ed za\u0159\u00edzen\u00ed, I\/O porty procesoru, s\u00e9riov\u00fd kan\u00e1l, SPI kan\u00e1l pro komunikaci s p\u0159evodn\u00edky a vynuluje hodnoty prom\u011bnn\u00fdch.<\/p>\n<p style=\"text-align: justify;\">Ve smy\u010dce hlavn\u00edho programu jsou nastavov\u00e1ny hodnoty nap\u011bt\u00ed a proudu na DA p\u0159evodn\u00edk\u016f. Hodnoty z AD p\u0159evodn\u00edku &#8211; nap\u011bt\u00ed a proud, jsou ukl\u00e1d\u00e1ny do pole dat a jsou po\u010d\u00edt\u00e1ny pr\u016fm\u011brn\u00e9 hodnoty z toho, co je nam\u011b\u0159eno.<\/p>\n<p style=\"text-align: justify;\">Hlavi\u010dkov\u00fd soubor definuje makra, deklaruje prom\u011bnn\u00e9 a funkce, kter\u00e9 budou pot\u0159ebn\u00e9 v hlavn\u00edm programu<\/p>\n<pre class=\"\" style=\"text-align: justify;\">\/*********************************************************************************\r\n* File Name\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: AT_slave_test.h\r\n* Created\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: 16.5.2016\r\n* Autor\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: Frantisek Pospisil\r\n*\r\n*********************************************************************************\/\r\n\r\n\r\n\/* definice maker *\/\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED1_set\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0&amp;=~0x20;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ cervena\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED1_clr\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0|= 0x20;\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED2_set\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0&amp;=~0x40;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ zelena\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED2_clr\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0|= 0x40;\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED3_set\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0&amp;=~0x80;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ zelena\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED3_clr\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0|= 0x80;\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Nabijeni_set\u00a0\u00a0 \u00a0PORTA\u00a0\u00a0 \u00a0|= 0x01;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele nabijeni\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Nabijeni_clr\u00a0\u00a0 \u00a0PORTA\u00a0\u00a0 \u00a0&amp;=~0x01;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele nabijeni\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Rel_30V\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTA\u00a0\u00a0 \u00a0|= 0x02;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele vinuti 15V \/ 30V\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Rel_15V\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTA\u00a0\u00a0 \u00a0&amp;=~0x02;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele vinuti 15V \/ 30V\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Rel_filtr_set\u00a0\u00a0 \u00a0PORTA\u00a0\u00a0 \u00a0|= 0x04;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele kapacita filtru\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Rel_filtr_clr\u00a0\u00a0 \u00a0PORTA\u00a0\u00a0 \u00a0&amp;=~0x04;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele kapacita filtru\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Rel_proud_10x\u00a0\u00a0 \u00a0PORTA\u00a0\u00a0 \u00a0|= 0x08;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele mereni 100x \/ 10x\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Rel_proud_100x\u00a0\u00a0 \u00a0PORTA\u00a0\u00a0 \u00a0&amp;=~0x08;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele mereni 100x \/ 10x\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DA_CLR_clr\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0&amp;=~0x04;\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DA_CLR_set\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0|= 0x04;\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DA_LDAC_clr\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0&amp;=~0x02;\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DA_LDAC_set\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0|= 0x02;\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DA_SYNC_clr\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0&amp;=~0x18;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ 4-ty bit - chyba procesoru Michal\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DA_SYNC_set\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTC\u00a0\u00a0 \u00a0|= 0x18;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ 4-ty bit - chyba procesoru Michal\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0AD_CS_set\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTB\u00a0\u00a0 \u00a0&amp;=~0x01;\r\n#define\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0AD_CS_clr\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0PORTB\u00a0\u00a0 \u00a0|= 0x01;\r\n\r\n\/* deklarace globalnich promennych *\/\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TimCounter;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pocitadlo casovace\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ProgramCounter;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pocitadlo programu, merenych vzorku\r\nstatic unsigned char\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialCounter;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pocitadlo serioveho kanalu\r\nstatic unsigned char\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[22];\u00a0\u00a0 \u00a0\/\/ pole vysilanych dat\r\nstatic unsigned char\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialCRC;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ scita CRC hodnotu\r\n\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageInAd;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ aktualni namerene napeti\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentInAd;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ aktualni namereny proud\r\nstatic unsigned long int\u00a0\u00a0 \u00a0VoltageInAdd;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ soucet\r\nstatic unsigned long int\u00a0\u00a0 \u00a0CurrentInAdd;\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageInAverage;\u00a0\u00a0 \u00a0\/\/ vypocitany prumer\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentInAverage;\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageArray[130];\u00a0\u00a0 \u00a0\/\/ pole namerenych dat pro vypocet prumeru\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentArray[130];\r\n\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageOutDa;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ napeti pro DA prevodnik\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentOutDa;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ proud pro DA prevodnik\r\nstatic unsigned int\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TempReference;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ teplota reference napeti\r\nstatic unsigned char\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ReleStatus;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ predava stav rele\r\nstatic unsigned char\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentStatus;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ zobrazuje zdroj proudu\r\n\r\n\/* uplne funkcni prototypy *\/\r\n\/*********************************************************************************\r\n*\r\n* Function Name : DAC8563_Send\r\n* Description\u00a0\u00a0 \u00a0: odesle data na DAC\r\n*\r\n*********************************************************************************\/\r\nvoid DAC8563_Send(unsigned char command, unsigned int val);\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : ADS8341_Send\r\n* Description\u00a0\u00a0 \u00a0: prijme data z AD prevodniku\r\n*\r\n*********************************************************************************\/\r\nunsigned int ADS8341_Send(unsigned char command);\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : SPI_Send\r\n* Description\u00a0\u00a0 \u00a0: odesle data na SPI\r\n*\r\n*********************************************************************************\/\r\nunsigned char SPI_Send(unsigned char val);\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : SystemInit\r\n* Description\u00a0\u00a0 \u00a0: inicializuje ridici registry procesoru a zapoji rele\r\n*\r\n*********************************************************************************\/\r\nvoid System_Init(void);\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : vypocet CRC ze zadaneho polynomu\r\n* Description\u00a0\u00a0 \u00a0: pole dat ze ktereho ma byt pocitano a velikost pole\r\n* Return\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: CRC kod\r\n*\r\n*********************************************************************************\/\r\nunsigned char CRC_Calculation( void );<\/pre>\n<p style=\"text-align: justify;\">Hlavn\u00ed program<\/p>\n<pre class=\"\" style=\"text-align: justify;\">\/*********************************************************************************\r\n* File Name\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: AT_slave_test.c\r\n* Created\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: 16.5.2016\r\n* Autor\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: Frantisek Pospisil\r\n*\r\n*********************************************************************************\/\r\n\r\n\/* Hlavni program:\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0nastavuje DA prevodnik\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0cte data z AD prevodniku\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0pocita prumer z namerenych dat, pocet vzorku je 128, nebo 64, nebo 32\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ovlada rele, podle promenne ReleStatus\r\n*\r\n* Preruseni serioveho kanalu:\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0prijimany i vysilany paket ma 20 znaku, kontroluje se CRC kod\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0prijima data z Master, detekuje znak 'Z' na zacatku, detekuje '0' na tretim miste\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0kdyz tyto znaky nejsou, nebude se vysilat\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0kdyz je vypocitane CRC shodne s prijatym na 20 znaku, pouzije data\r\n*\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0vysila i kdyz je CRC prijateho paketu vadne\r\n*\/\r\n\r\n\/* hlavickove soubory *\/\r\n#define CrcPolynom\u00a0\u00a0 \u00a00x91\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ definice polynomu pro vypocet CRC\r\n#define F_CPU 8000000UL\r\n#include \"main.h\"\r\n#include &lt;avr\/io.h&gt;\r\n#include &lt;util\/delay.h&gt;\r\n#include &lt;avr\/interrupt.h&gt;\r\n#define DaVoltage\u00a0\u00a0 \u00a00b00011001\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastaveni DA prevodniku pro rizeni napeti\r\n#define DaCurrent\u00a0\u00a0 \u00a00b00011000\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastaveni DA prevodniku pro rizeni proudu\r\n#define AdVoltage\u00a0\u00a0 \u00a00b11010110\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastaveni AD prevodniku pro mereni napeti\r\n#define AdCurrent\u00a0\u00a0 \u00a00b10010110\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastaveni AD prevodniku pro mereni proudu\r\n#define AdTempRef\u00a0\u00a0 \u00a00b11100110\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastaveni AD prevodniku pro mereni teploty reference\r\n\r\n\r\n\/\/ ===============================================================================\r\n\/\/\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0HLAVNI PROGRAM\r\n\/\/ ===============================================================================\r\nint main(void)\r\n{\r\n\u00a0\u00a0 \u00a0System_Init();\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ inicializuje registry, promenne a rele pro nabijeni\r\n\u00a0\u00a0 \u00a0while(1)\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DAC8563_Send( DaCurrent, CurrentOutDa );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastavi DA prevodnik\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0DAC8563_Send( DaVoltage, VoltageOutDa );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageInAd = ADS8341_Send( AdVoltage );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ data z AD prevodniku\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentInAd = ADS8341_Send( AdCurrent );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TempReference = ADS8341_Send( AdTempRef );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ zmeri teplotu reference\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageArray[ProgramCounter] = VoltageInAd;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ namerena data ulozi do pole dat\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentArray[ProgramCounter] = CurrentInAd;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageInAdd += VoltageInAd;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ namerena data pricte k prumeru\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentInAdd += CurrentInAd;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( ProgramCounter == 128 )\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pocet vzorku pro optimalizaci deleni 128, 64, 32\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED3_set;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ blika diodou\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ProgramCounter = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else ProgramCounter++;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( ProgramCounter == 10 ) LED3_clr;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageInAdd -= VoltageArray[ProgramCounter];\u00a0\u00a0 \u00a0\/\/ odecita posledni vzorek v poli\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentInAdd -= CurrentArray[ProgramCounter];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageInAverage = ( VoltageInAdd &gt;&gt; 7 ) &amp; 0xFFFF;\u00a0\u00a0 \u00a0\/\/ deleni\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentInAverage = ( CurrentInAdd &gt;&gt; 7 ) &amp; 0xFFFF;\r\n\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if(( ReleStatus&amp;0x01 ) &amp;&amp; ( ~CurrentStatus&amp;0x80 )) \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Nabijeni_clr;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ 7 bit CurrentStatus indikuje zmenu napeti\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0_delay_ms( 100 );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Rel_30V;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ zapinani 30V vinuti \r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0_delay_ms( 300 );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Nabijeni_set;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nabijeni\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentStatus |= 0x80;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( ~ReleStatus&amp;0x01 )\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ odpojeni 30V vinuti\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0Rel_15V;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentStatus &amp;=~0x80;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( ReleStatus&amp;0x02 ) Rel_filtr_set\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ resi stav rele na zaklade prijatych dat\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else Rel_filtr_clr;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( ReleStatus&amp;0x04 ) Rel_proud_10x\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else Rel_proud_100x;\r\n\u00a0\u00a0 \u00a0}\r\n}\r\n\/*********************************************************************************\r\n*\r\n* Function Name : TIMER1_CAPT_vect\r\n* Description\u00a0\u00a0 \u00a0: blika diodou\r\n*\r\n*********************************************************************************\/\r\nISR(TIMER1_CAPT_vect)\r\n{\r\n\u00a0\u00a0 \u00a0if ( TimCounter == 200 )\u00a0\u00a0 \u00a0\/\/ pocita interval 0,2 sekunda\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0TimCounter = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED1_set;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0if ( TimCounter == 20 ) LED1_clr;\u00a0\u00a0 \u00a0\/\/ zhasne dioda\r\n\u00a0\u00a0 \u00a0TimCounter++;\r\n}\r\n\/*********************************************************************************\r\n*\r\n* Function Name : USART0_RXC_vect\r\n* Description\u00a0\u00a0 \u00a0: preruseni prijimace serioveho kanalu\r\n*\r\n*********************************************************************************\/\r\nISR(USART_RXC_vect)\r\n{\r\n\u00a0\u00a0 \u00a0LED2_set;\r\n\u00a0\u00a0 \u00a0SerialArray[SerialCounter] = UDR;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ prijata data do pole\r\n\u00a0\u00a0 \u00a0\/\/ kontroluje znak kanalu, kdyz neodpovida zarizeni, nastavi SerialCounter = 50\r\n\u00a0\u00a0 \u00a0if(( SerialCounter == 3 ) &amp;&amp; ( SerialArray[3] != '0' )) SerialCounter = 50;\r\n\u00a0\u00a0 \u00a0if( SerialArray[0] == 'Z' ) SerialCounter++;\u00a0\u00a0 \u00a0\/\/ na zacatku komunikace musi byt 'Z'\r\n\u00a0\u00a0 \u00a0if( SerialCounter == 66 ) SerialCounter = 0;\u00a0\u00a0 \u00a0\/\/ konec komunikace, kdyz neodpovida zarizeni\r\n\u00a0\u00a0 \u00a0if( SerialCounter == 21 )\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ konec komunikace, kdyz odpovida zarizeni\r\n\u00a0\u00a0 \u00a0{\r\n\/\/ ===============================================================================\r\n\/\/\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0kontrloa CRC, ulozeni prijatych dat a priprava na vysilani\r\n\/\/ ===============================================================================\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialCRC = CRC_Calculation();\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ vypocita CRC kod\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( SerialCRC == SerialArray[20] )\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ CRC je v poradku, data budou pouzita v hlavnim programu\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[19] = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0VoltageOutDa = (SerialArray[ 4] &lt;&lt; 8) + SerialArray[ 5];\u00a0\u00a0 \u00a0\/\/ z prijatych dat vypocita napeti DA prevodniku\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CurrentOutDa = (SerialArray[ 6] &lt;&lt; 8) + SerialArray[ 7];\u00a0\u00a0 \u00a0\/\/ z prijatych dat vypocita proud DA prevodniku\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0ReleStatus = SerialArray[8];\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0else SerialArray[19] = 2;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ chyba CRC pri prijimani\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 0] = 'Z';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 1] = 'D';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 2] = 'R';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 3] = '0';\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 4] = (unsigned char) ( VoltageInAd &gt;&gt; 8 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ horni polovina DA prevodniku napeti\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 5] = (unsigned char) ( VoltageInAd );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ spodni polovina DA prevodniku napeti\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 6] = (unsigned char) ( CurrentInAverage &gt;&gt; 8 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ horni polovina DA prevodniku proudu\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 7] = (unsigned char) ( CurrentInAverage );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ spodni polovina DA prevodniku proudu\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 8] = (unsigned char) ( VoltageInAverage &gt;&gt; 8 );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[ 9] = (unsigned char) ( VoltageInAverage );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[10] = (unsigned char) ( CurrentInAd &gt;&gt; 8 );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[11] = (unsigned char) ( CurrentInAd );\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[12] = (unsigned char) ( TempReference &gt;&gt; 8 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ teplota referencniho zdroje\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[13] = (unsigned char) ( TempReference );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ teplota referencniho\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[14] = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[15] = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[16] = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[17] = 0;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[18] = 0;\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialArray[20] = CRC_Calculation();\u00a0\u00a0 \u00a0\/\/ posledni znak je CRC vysilanych dat\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0while ( !( UCSRA &amp; (1&lt;&lt;UDRE)));\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ ceka na volny kanal\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0UDR = SerialArray[0];\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ posle prvni znak\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialCounter = 1;\r\n\u00a0\u00a0 \u00a0}\r\n}\r\n\/*********************************************************************************\r\n*\r\n* Function Name : USART0_TXC_vect\r\n* Description\u00a0\u00a0 \u00a0: preruseni vysilace serioveho kanalu\r\n*\r\n*********************************************************************************\/\r\nISR(USART_TXC_vect)\r\n{\r\n\u00a0\u00a0 \u00a0if( SerialCounter &lt; 21 )\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0UDR = SerialArray[SerialCounter];\u00a0\u00a0 \u00a0\/\/ posle dalsi znak\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialCounter++;\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0else\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0LED2_clr;\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0SerialCounter = 0;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ konec vysilani\r\n\u00a0\u00a0 \u00a0}\r\n}\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : DAC8563_Send\r\n* Description\u00a0\u00a0 \u00a0: odesle data na DAC\r\n*\r\n*********************************************************************************\/\r\nvoid DAC8563_Send(unsigned char command, unsigned int val)\r\n{\r\n\u00a0\u00a0 \u00a0SPCR\u00a0 = 0b01010100;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastaveni SPI kanalu\r\n\/\/ zmena dat na vzestupnou hranu CLK, cteni na sestupnou hranu\r\n\/\/\u00a0\u00a0 \u00a0LED3_set;\r\n\u00a0\u00a0 \u00a0DA_SYNC_clr;\r\n\u00a0\u00a0 \u00a0SPI_Send( command );\u00a0\u00a0 \u00a0\/\/ cislo kanalu\r\n\u00a0\u00a0 \u00a0SPI_Send( val &gt;&gt; 8 );\u00a0\u00a0 \u00a0\/\/ horni polovina\r\n\u00a0\u00a0 \u00a0SPI_Send( val );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ spodni polovina\r\n\u00a0\u00a0 \u00a0DA_SYNC_set;\r\n\/\/\u00a0\u00a0 \u00a0LED3_clr;\r\n}\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : ADS8341_Send\r\n* Description\u00a0\u00a0 \u00a0: prijme data z AD prevodniku\r\n* Note\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: PB1 - vstup BUSY\r\n*\r\n*********************************************************************************\/\r\nunsigned int ADS8341_Send(unsigned char command)\r\n{\r\n\u00a0\u00a0 \u00a0unsigned int AdVal;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0SPCR\u00a0 = 0b01011100;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ nastaveni SPI kanalu\r\n\/\/zmena dat na sestupnou hranu CLK, cteni na vzestupnou hranu\r\n\u00a0\u00a0 \u00a0AD_CS_set;\r\n\u00a0\u00a0 \u00a0SPI_Send( command );\u00a0\u00a0 \u00a0\/\/ cislo kanalu\r\n\u00a0\u00a0 \u00a0while( PINB&amp;0x02 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ ceka na signal BUSY\r\n\u00a0\u00a0 \u00a0AD_CS_clr;\r\n\u00a0\u00a0 \u00a0while(~PINB&amp;0x02 );\r\n\u00a0\u00a0 \u00a0AD_CS_set;\r\n\u00a0\u00a0 \u00a0AdVal =\u00a0\u00a0 \u00a0SPI_Send( 0 ) &lt;&lt; 8;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ horni polovina\r\n\u00a0\u00a0 \u00a0AdVal = AdVal + (SPI_Send( 0 ));\u00a0\u00a0 \u00a0\/\/ spodni polovina\r\n\u00a0\u00a0 \u00a0SPI_Send( 0 );\r\n\u00a0\u00a0 \u00a0AdVal = AdVal - 32768;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ 0 je uprostred rozsahu, posune se o polovinu\r\n\u00a0\u00a0 \u00a0AD_CS_clr;\r\n\u00a0\u00a0 \u00a0return ( AdVal );\r\n}\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : SPI_Send\r\n* Description\u00a0\u00a0 \u00a0: odesle data na SPI\r\n*\r\n*********************************************************************************\/\r\nunsigned char SPI_Send(unsigned char val)\r\n{\r\n\u00a0\u00a0 \u00a0SPDR = val;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ odesilana data\r\n\u00a0\u00a0 \u00a0while(!(SPSR &amp; (1&lt;&lt;SPIF)));\r\n\u00a0\u00a0 \u00a0return SPDR;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ prijata data\r\n}\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : SystemInit\r\n* Description\u00a0\u00a0 \u00a0: inicializuje ridici registry procesoru a zapoji rele\r\n*\r\n*********************************************************************************\/\r\nvoid System_Init(void)\r\n{\r\n\u00a0\u00a0 \u00a0PORTC = 0b00000000;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ H-pull up, L vysok\u00e1 impedance\r\n\u00a0\u00a0 \u00a0DDRC\u00a0 = 0b11111110;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ H-output, L-input - DA prevodnik\r\n\u00a0\u00a0 \u00a0PORTB = 0b00000000;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ H-pull up, L vysok\u00e1 impedance\r\n\u00a0\u00a0 \u00a0DDRB\u00a0 = 0b10110001;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ H-output, L-input - SPI sbernice\r\n\u00a0\u00a0 \u00a0PORTA = 0b00000000;\r\n\u00a0\u00a0 \u00a0DDRA\u00a0 = 0b11111111;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rele\r\n\u00a0\u00a0 \u00a0PORTD = 0b00000000;\r\n\u00a0\u00a0 \u00a0DDRD\u00a0 = 0b00000010;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ seriovy kanal\r\n\u00a0\u00a0 \u00a0\/\/ * * * * * * * * * * * * * * * * * * * * * * * * * SPI sbernice\r\n\u00a0\u00a0 \u00a0SPCR\u00a0 = 0b01010111;\r\n\u00a0\u00a0 \u00a0\/\/ preruseni SPI, aktivace SPI, prenos od MSB do LSB, Master=1\r\n\u00a0\u00a0 \u00a0\/\/ polarita hodinoveho signalu, faze hodin, prenosova rychlost\r\n\u00a0\u00a0 \u00a0SPSR\u00a0 = 0b00000000;\r\n\u00a0\u00a0 \u00a0\/\/ * * * * * * * * * * * * * * * * * * * * * * * * * seriovy kanal\r\n\u00a0\u00a0 \u00a0UBRRH = 0;\r\n\u00a0\u00a0 \u00a0UBRRL = 16;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rychlost prenosu 9600 baudu - 103\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rychlost prenosu 57600 baudu - 16\r\n\u00a0\u00a0 \u00a0UCSRA = 0b00000010;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ dvojnasobna rychlost\r\n\u00a0\u00a0 \u00a0UCSRB = 0b11011000;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ povoleni vysilace a prijimace, preruseni pri vysilani i prijimani\r\n\u00a0\u00a0 \u00a0UCSRC = 0b10001110;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ bez parity, osum bitu\r\n\u00a0\u00a0 \u00a0\/\/ * * * * * * * * * * * * * * * * * * * * * * * * * Nastaveni casovace T1\r\n\u00a0\u00a0 \u00a0TCCR1A = 0b00000000;\u00a0\u00a0 \u00a0\/\/ Frekvence = F krystal\r\n\u00a0\u00a0 \u00a0TCCR1B = 0b00011010;\u00a0\u00a0 \u00a0\/\/ rezim PWM 12, citac se vynuluje pri dosazeni hodnoty ICR1\r\n\u00a0\u00a0 \u00a0TIMSK\u00a0 = 0b00100000;\u00a0\u00a0 \u00a0\/\/ preruseni pri priznaku OCF1\r\n\u00a0\u00a0 \u00a0ICR1\u00a0\u00a0 = 1000;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ 1000 Hz kmitocet PWM\r\n\r\n\u00a0\u00a0 \u00a0\/\/ * * * * * * * * * * * * * * * * * * * * * * * * * Inicializace promennych\r\n\u00a0\u00a0 \u00a0TimCounter\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0= 0;\u00a0\u00a0 \u00a0\/\/ pocitadlo casovace\r\n\u00a0\u00a0 \u00a0SerialCounter\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0= 0;\u00a0\u00a0 \u00a0\/\/ vysilany, nebo prijimany znak na seriovem kanalu\r\n\u00a0\u00a0 \u00a0VoltageOutDa\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0= 0;\u00a0\u00a0 \u00a0\/\/ data pro DA prevodnik\r\n\u00a0\u00a0 \u00a0CurrentOutDa\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0= 0;\u00a0\u00a0 \u00a0\/\/ data pro DA prevodnik\r\n\u00a0\u00a0 \u00a0ProgramCounter\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0= 0;\u00a0\u00a0 \u00a0\/\/ pocitadlo v hlavnim programu - vzorky mereni\r\n\u00a0\u00a0 \u00a0CurrentStatus\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0= 0;\u00a0\u00a0 \u00a0\/\/ stav zdroj napeti \/ proudu Bit 0, prepinani vinuti Bit 7\r\n\u00a0\u00a0 \u00a0VoltageInAdd\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0= 0;\u00a0\u00a0 \u00a0\/\/ vypocet prumerne hodnoty\r\n\u00a0\u00a0 \u00a0CurrentInAdd\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0= 0;\u00a0\u00a0 \u00a0\/\/ vypocet prumerne hodnoty\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0LED1_set;\r\n\u00a0\u00a0 \u00a0LED2_set;\r\n\u00a0\u00a0 \u00a0LED3_set;\r\n\/\/ ===============================================================================\r\n\/\/\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0inicializace DA prevodniku\r\n\/\/ ===============================================================================\r\n\u00a0\u00a0 \u00a0DA_CLR_set;\r\n\u00a0\u00a0 \u00a0DA_LDAC_clr;\r\n\u00a0\u00a0 \u00a0DA_SYNC_set;\r\n\u00a0\u00a0 \u00a0AD_CS_clr;\r\n\u00a0\u00a0 \u00a0DAC8563_Send( 0b00101000, 1 ); \/\/ Reset\r\n\u00a0\u00a0 \u00a0DAC8563_Send( 0b00111000, 0 ); \/\/ Disable internal reference\r\n\u00a0\u00a0 \u00a0DAC8563_Send( 0b00100000, 3 ); \/\/ power up DAC-A and DAC-B\r\n\u00a0\u00a0 \u00a0DAC8563_Send( 0b00000010, 0 ); \/\/ Gain = 2\r\n\u00a0\u00a0 \u00a0DAC8563_Send( 0b00110000, 3 ); \/\/ LDAC pin inaktive for DAC-A and DAC-B\r\n\u00a0\u00a0 \u00a0DAC8563_Send( DaVoltage, 0 );\r\n\u00a0\u00a0 \u00a0DAC8563_Send( DaCurrent, 0);\r\n\u00a0\u00a0 \u00a0_delay_ms( 1500 );\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ ceka na nabiti\r\n\u00a0\u00a0 \u00a0LED1_clr;\r\n\u00a0\u00a0 \u00a0_delay_ms( 500 );\r\n\u00a0\u00a0 \u00a0LED2_clr;\r\n\u00a0\u00a0 \u00a0_delay_ms( 500 );\r\n\u00a0\u00a0 \u00a0LED3_clr;\r\n\u00a0\u00a0 \u00a0_delay_ms( 500 );\r\n\u00a0\u00a0 \u00a0Nabijeni_set;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pripoji rele nabijeni\r\n\u00a0\u00a0 \u00a0sei();\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pusti globalni preruseni\r\n}\r\n\r\n\/*********************************************************************************\r\n*\r\n* Function Name : vypocet CRC podle polynomu\r\n* Return\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0: CRC kod\r\n*\r\n*********************************************************************************\/\r\nunsigned char CRC_Calculation( void )\r\n{\r\n\u00a0\u00a0 \u00a0unsigned char i, j, CrcCode = 0;\r\n\u00a0\u00a0 \u00a0\r\n\u00a0\u00a0 \u00a0for( i = 0; i &lt; 20; i++ )\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ pole dat ma 20 znaku\r\n\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CrcCode ^= SerialArray[i];\u00a0\u00a0 \u00a0\/\/ XOR CRC kodu a dat\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0for( j = 0; j &lt; 8; j++)\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0{\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0if( CrcCode &amp; 1 )\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CrcCode ^= CrcPolynom;\u00a0\u00a0 \u00a0\/\/ XOR CRC kodu a poynomu, kdyz je bit0 = 1\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0CrcCode &gt;&gt;=1;\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0\/\/ rotace CRC kodu\r\n\u00a0\u00a0 \u00a0\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0}\r\n\u00a0\u00a0 \u00a0return CrcCode;\r\n}<\/pre>\n<p style=\"text-align: justify;\">\n","protected":false},"excerpt":{"rendered":"<p>Popis programu, kter\u00fd prost\u0159ednictv\u00edm s\u00e9riov\u00e9ho kan\u00e1lu UART na procesoru ATmega16 p\u0159ij\u00edm\u00e1 data z nad\u0159\u00edzen\u00e9 desky Master a odes\u00edl\u00e1 odpov\u011b\u010f<\/p>\n","protected":false},"author":1,"featured_media":898,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[114,4],"tags":[136,137,116,135,118],"class_list":["post-897","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-laboratorni-zdroj","category-programovani","tag-atmel","tag-homemade-power-supply","tag-laboratorni-zdroj","tag-laboratory-power-supply","tag-variable-power-supply"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Laboratorn\u00ed zdroj - 11. Slave modul ATmega16 UART - Franti\u0161ek Posp\u00ed\u0161il<\/title>\n<meta name=\"description\" content=\"Popis programu, kter\u00fd prost\u0159ednictv\u00edm s\u00e9riov\u00e9ho kan\u00e1lu UART na procesoru ATmega16 p\u0159ij\u00edm\u00e1 data z nad\u0159\u00edzen\u00e9 desky Master a odes\u00edl\u00e1 odpov\u011b\u010f\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/\" \/>\n<meta property=\"og:locale\" content=\"cs_CZ\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Laboratorn\u00ed zdroj - 11. Slave modul ATmega16 UART - Franti\u0161ek Posp\u00ed\u0161il\" \/>\n<meta property=\"og:description\" content=\"Popis programu, kter\u00fd prost\u0159ednictv\u00edm s\u00e9riov\u00e9ho kan\u00e1lu UART na procesoru ATmega16 p\u0159ij\u00edm\u00e1 data z nad\u0159\u00edzen\u00e9 desky Master a odes\u00edl\u00e1 odpov\u011b\u010f\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/\" \/>\n<meta property=\"og:site_name\" content=\"Franti\u0161ek Posp\u00ed\u0161il\" \/>\n<meta property=\"article:published_time\" content=\"2016-06-03T05:41:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2016-08-16T04:24:09+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2000\" \/>\n\t<meta property=\"og:image:height\" content=\"1500\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"ok2jnj\" \/>\n<meta name=\"twitter:label1\" content=\"Napsal(a)\" \/>\n\t<meta name=\"twitter:data1\" content=\"ok2jnj\" \/>\n\t<meta name=\"twitter:label2\" content=\"Odhadovan\u00e1 doba \u010dten\u00ed\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minut\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/\"},\"author\":{\"name\":\"ok2jnj\",\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a\"},\"headline\":\"Laboratorn\u00ed zdroj &#8211; 11. Slave modul ATmega16 UART\",\"datePublished\":\"2016-06-03T05:41:33+00:00\",\"dateModified\":\"2016-08-16T04:24:09+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/\"},\"wordCount\":406,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a\"},\"image\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg\",\"keywords\":[\"Atmel\",\"homemade power supply\",\"laboratorni zdroj\",\"laboratory power supply\",\"variable power supply\"],\"articleSection\":[\"Laboratorn\u00ed zdroj\",\"Programov\u00e1n\u00ed\"],\"inLanguage\":\"cs\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/\",\"url\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/\",\"name\":\"Laboratorn\u00ed zdroj - 11. Slave modul ATmega16 UART - Franti\u0161ek Posp\u00ed\u0161il\",\"isPartOf\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg\",\"datePublished\":\"2016-06-03T05:41:33+00:00\",\"dateModified\":\"2016-08-16T04:24:09+00:00\",\"description\":\"Popis programu, kter\u00fd prost\u0159ednictv\u00edm s\u00e9riov\u00e9ho kan\u00e1lu UART na procesoru ATmega16 p\u0159ij\u00edm\u00e1 data z nad\u0159\u00edzen\u00e9 desky Master a odes\u00edl\u00e1 odpov\u011b\u010f\",\"breadcrumb\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#breadcrumb\"},\"inLanguage\":\"cs\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"cs\",\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#primaryimage\",\"url\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg\",\"contentUrl\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg\",\"width\":2000,\"height\":1500},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Dom\u016f\",\"item\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laboratorn\u00ed zdroj &#8211; 11. Slave modul ATmega16 UART\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#website\",\"url\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/\",\"name\":\"Franti\u0161ek Posp\u00ed\u0161il\",\"description\":\"Na sv\u00fdch str\u00e1nk\u00e1ch popisuji cesty, kter\u00fdmi jsem do\u0161el k zam\u00fd\u0161len\u00fdm c\u00edl\u016fm. C\u00edle se ob\u010das b\u011bhem cesty zm\u011bnily.\",\"publisher\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"cs\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a\",\"name\":\"ok2jnj\",\"logo\":{\"@id\":\"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Laboratorn\u00ed zdroj - 11. Slave modul ATmega16 UART - Franti\u0161ek Posp\u00ed\u0161il","description":"Popis programu, kter\u00fd prost\u0159ednictv\u00edm s\u00e9riov\u00e9ho kan\u00e1lu UART na procesoru ATmega16 p\u0159ij\u00edm\u00e1 data z nad\u0159\u00edzen\u00e9 desky Master a odes\u00edl\u00e1 odpov\u011b\u010f","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/","og_locale":"cs_CZ","og_type":"article","og_title":"Laboratorn\u00ed zdroj - 11. Slave modul ATmega16 UART - Franti\u0161ek Posp\u00ed\u0161il","og_description":"Popis programu, kter\u00fd prost\u0159ednictv\u00edm s\u00e9riov\u00e9ho kan\u00e1lu UART na procesoru ATmega16 p\u0159ij\u00edm\u00e1 data z nad\u0159\u00edzen\u00e9 desky Master a odes\u00edl\u00e1 odpov\u011b\u010f","og_url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/","og_site_name":"Franti\u0161ek Posp\u00ed\u0161il","article_published_time":"2016-06-03T05:41:33+00:00","article_modified_time":"2016-08-16T04:24:09+00:00","og_image":[{"width":2000,"height":1500,"url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg","type":"image\/jpeg"}],"author":"ok2jnj","twitter_misc":{"Napsal(a)":"ok2jnj","Odhadovan\u00e1 doba \u010dten\u00ed":"10 minut"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#article","isPartOf":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/"},"author":{"name":"ok2jnj","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a"},"headline":"Laboratorn\u00ed zdroj &#8211; 11. Slave modul ATmega16 UART","datePublished":"2016-06-03T05:41:33+00:00","dateModified":"2016-08-16T04:24:09+00:00","mainEntityOfPage":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/"},"wordCount":406,"commentCount":0,"publisher":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a"},"image":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#primaryimage"},"thumbnailUrl":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg","keywords":["Atmel","homemade power supply","laboratorni zdroj","laboratory power supply","variable power supply"],"articleSection":["Laboratorn\u00ed zdroj","Programov\u00e1n\u00ed"],"inLanguage":"cs","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/","url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/","name":"Laboratorn\u00ed zdroj - 11. Slave modul ATmega16 UART - Franti\u0161ek Posp\u00ed\u0161il","isPartOf":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#primaryimage"},"image":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#primaryimage"},"thumbnailUrl":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg","datePublished":"2016-06-03T05:41:33+00:00","dateModified":"2016-08-16T04:24:09+00:00","description":"Popis programu, kter\u00fd prost\u0159ednictv\u00edm s\u00e9riov\u00e9ho kan\u00e1lu UART na procesoru ATmega16 p\u0159ij\u00edm\u00e1 data z nad\u0159\u00edzen\u00e9 desky Master a odes\u00edl\u00e1 odpov\u011b\u010f","breadcrumb":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#breadcrumb"},"inLanguage":"cs","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/"]}]},{"@type":"ImageObject","inLanguage":"cs","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#primaryimage","url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg","contentUrl":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-content\/uploads\/2016\/06\/AD-a-DA-p\u0159evod2.jpg","width":2000,"height":1500},{"@type":"BreadcrumbList","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/cs\/2016\/06\/laboratorni-zdroj-11-slave-modul-atmega16-uart\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Dom\u016f","item":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/"},{"@type":"ListItem","position":2,"name":"Laboratorn\u00ed zdroj &#8211; 11. Slave modul ATmega16 UART"}]},{"@type":"WebSite","@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#website","url":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/","name":"Franti\u0161ek Posp\u00ed\u0161il","description":"Na sv\u00fdch str\u00e1nk\u00e1ch popisuji cesty, kter\u00fdmi jsem do\u0161el k zam\u00fd\u0161len\u00fdm c\u00edl\u016fm. C\u00edle se ob\u010das b\u011bhem cesty zm\u011bnily.","publisher":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"cs"},{"@type":["Person","Organization"],"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/611e6231cd7c1180c0871958f742373a","name":"ok2jnj","logo":{"@id":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/posts\/897","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/comments?post=897"}],"version-history":[{"count":2,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/posts\/897\/revisions"}],"predecessor-version":[{"id":926,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/posts\/897\/revisions\/926"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/media\/898"}],"wp:attachment":[{"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/media?parent=897"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/categories?post=897"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ok2jnj.ok2kld.cz\/ok2jnj\/wp-json\/wp\/v2\/tags?post=897"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}