Tu sa chystáme nadviazať komunikáciu medzi mikrokontrolérom ATmega8 a Arduino Uno. Tu nadviazaná komunikácia je typu UART (Universal Asynchronous Receiver Transmitter). Je to sériová komunikácia. Touto sériovou komunikáciou môžu byť dáta zdieľané medzi dvoma radičmi, čo je potrebné v rôznych aplikáciách zabudovaného systému.
V zabudovaných systémoch musíme mať základné vedomosti o systémovej komunikácii, preto robíme tento projekt. V tomto projekte budeme diskutovať o základnom komunikačnom systéme a budeme sériovo odosielať niektoré údaje z vysielača do prijímača.
V tomto projekte ATMEGA8 vystupuje ako VYSIELAČ a ARDUINO UNO ako PRIJÍMAČ. Pri sériovej komunikácii budeme odosielať údaje BIT BY BIT, až kým sa úplne neprenesie údaj BYTE. Dáta môžu mať veľkosť 10 bitov, ale zatiaľ si ponecháme 8BITS.
Súčasti sú povinné
Hardvér: ATMEGA8, ARDUINO UNO, napájací zdroj (5 V), AVR-ISP PROGRAMÁTOR, kondenzátor 100 uF (pripojený cez napájací zdroj), rezistor 1 KΩ (dva kusy), LED, tlačidlo.
Softvér: Atmel studio 6.1, progisp alebo flash magic, ARDUINO NIGHTLY.
Schéma zapojenia a vysvetlenie
Predtým, ako budeme diskutovať o schéme zapojenia a programovaní pre vysielač a prijímač, musíme porozumieť sériovej komunikácii. ATMEGA tu zasiela údaje UNO sériovo, ako bolo uvedené vyššie.
To má aj ďalšie spôsoby komunikácie, ako je Master podriadeným komunikačným, JTAG komunikáciu, ale pre jednoduchú komunikáciu sme sa rozhodli RS232. Tu pripojíme PIN TXD (vysielač) ATMEGA8 k RXD (prijímač) PIN ARDUINO UNO
Nadviazaná dátová komunikácia je naprogramovaná tak, aby mala:
- Osem dátových bitov
- Dva stop bity
- Žiadny bit kontroly parity
- Prenosová rýchlosť 9600 BPS (bitov za sekundu)
- Asynchrónna komunikácia (žiadne zdieľanie hodín medzi ATMEGA8 a UNO (obe majú odlišné jednotky hodín))
Pre vytvorenie UART medzi Arduino Uno a ATMEGA8 musíme nastavenie presne naprogramovať. Z tohto dôvodu je potrebné, aby sme vyššie uvedené parametre na oboch koncoch udržali rovnaké. V tomto vystupuje jeden ako VYSIELAČ a druhý ako PRIJÍMAČ. Nižšie si rozoberieme každé nastavenie strany.
Teraz pre rozhranie RS232 musia byť na strane VYSIELAČA (ATMEGA8) splnené nasledujúce vlastnosti:
1. Pre vysielač musí byť povolený pin TXD (funkcia prijímania dát) prvého radiča.
2. Pretože komunikácia je sériová, musíme to vedieť vždy, keď je prijatý dátový bye, aby sme mohli program zastaviť, kým nedostaneme úplný bajt. To sa deje povolením úplného prerušenia prijímania údajov.
3. Dáta sa prenášajú a prijímajú do radiča v 8bitovom režime. Takže do radiča budú naraz odoslané dva znaky.
4. V dátach odosielaných modulom nie sú žiadne paritné bity, jeden stop bit.
Vyššie uvedené funkcie sú nastavené v registroch radiča; budeme o nich krátko diskutovať:
DARK GREY (UDRE): Tento bit nie je nastavený počas spustenia, ale používa sa pri práci na kontrolu, či je vysielač pripravený na vysielanie alebo nie. Ďalšie informácie nájdete v programe na TRASMITTER SIDE.
VOILET (TXEN): Tento bit je nastavený na povolenie kolíka vysielača na TRASMITTER SIDE.
ŽLTÁ (UCSZ0, UCSZ1 a UCSZ2): Tieto tri bity sa používajú na výber počtu dátových bitov, ktoré prijímame alebo odosielame naraz.
Komunikácia medzi dvoma STRANAMI sa ustanovuje ako osembitová komunikácia. Porovnaním komunikácie s tabuľkou máme UCSZ0, UCSZ1 s jednou a UCSZ2 s nulou.
ORANŽOVÁ (UMSEL): Tento bit je nastavený na základe toho, či systém komunikuje asynchrónne (obe používajú odlišné hodiny) alebo synchrónne (obe používajú rovnaké hodiny).
Oba SYTÉMY nezdieľajú žiadne hodiny. Pretože obaja používajú vlastné vnútorné hodiny. Musíme teda nastaviť UMSEL na 0 v oboch radičoch.
ZELENÁ (UPM1, UPM0): Tieto dva bity sú upravené na základe bitovej parity, ktorú používame pri komunikácii.
Údaje ATMEGA sú tu naprogramované tak, aby odosielali údaje bez parity, pretože dĺžka prenosu údajov je malá, takže jednoznačne môžeme očakávať žiadnu stratu alebo chybu údajov. Takže tu nestanovujeme žiadnu paritu. Takže obidve UPM1, UPM0 nastavíme na nulu alebo sú ponechané, pretože všetky bity sú predvolene 0.
MODRÁ (USBS): Tento bit sa používa na výber počtu stop bitov, ktoré používame počas komunikácie.
Komunikácia, ktorá ju nadviazala, je asynchrónneho typu, takže pre presnejší prenos a príjem dát je potrebné použiť dva stop bity, preto sme nastavili USBS na '1' na strane VYSIELAČA.
Prenosová rýchlosť sa nastavuje v ovládači výberom príslušnej UBRRH:
Hodnota UBRRH sa vyberá krížovou prenosovou rýchlosťou a kryštálovou frekvenciou CPU:
Takže krížovým odkazom sa hodnota UBRR považuje za „6“, a tak sa nastavuje prenosová rýchlosť.
Týmto sme nastavili nastavenia na VYSIELAČOVEJ STRANE; teraz budeme hovoriť o PRIJÍMANÍ STRANY.
Sériovú komunikáciu umožňujúcu v UNO je možné vykonať pomocou jediného príkazu.
|
Komunikácia, ktorú sme predpokladali nadviazať, sa uskutočňuje s rýchlosťou BAUD 9600 bitov za sekundu. Takže pre UNO na stanovenie takejto prenosovej rýchlosti a na zahájenie sériovej komunikácie používame príkaz „Serial.begin (9600);“. Tu je 9600 prenosová rýchlosť a je premenlivá.
Teraz všetko, čo zostáva na prijímanie údajov, jedno z údajov, ktoré prijme OSN, bude k dispozícii na prijatie. Tieto údaje sa získavajú príkazom „receivedata = Serial.read ();“. Týmto príkazom sa sériové údaje prenesú do „prijatých údajov“ s názvom celé číslo.
Ako je znázornené v obvode, je tlačidlo pripojené na strane vysielača, keď je toto stlačené tlačidlo odoslané osembitové dáta VYSIELAČOM (ATMEGA8) a tieto dáta sú prijímané PRIJÍMAČOM (ARDUINO UNO). Po úspešnom prijatí týchto údajov prepne LED pripojenú k nim na ZAPNUTÉ a VYPNUTÉ, aby sa zobrazil úspešný prenos údajov medzi dvoma radičmi.
Týmto je úspešne nadviazaná komunikácia UART medzi radičom ATMEGA8 a ARDUINO UNO.