V tomto výučbe sa chystáme nadviazať sériovú komunikáciu medzi dvoma mikrokontrolérmi ATMEGA8. Tu nadviazaná komunikácia je typu UART (Universal Asynchronous Receiver Transmitter). Touto sériovou komunikáciou možno dáta zdieľať medzi dvoma mikrokontrolérmi, čo sa vyžaduje v rôznych vstavaných systémoch.
Súčasti sú povinné
Hardvér: ATMEGA8 (2 kusy), 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.
Schéma zapojenia a vysvetlenie
Rozumieme sériovej komunikácii v mikrokontroléroch AVR. Tu ATMEGA sériovo odosiela údaje do druhého ATMEGA. Má iný spôsob komunikácie, ale pre ľahkú komunikáciu sme vybrali RS232. Pin RS232 prvého ATMEGA8 je pripojený k konektoru RXD druhého ATMEGA8.
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ť 2 400 BPS (bitov za sekundu)
- Asynchrónna komunikácia (žiadne zdieľanie hodín medzi dvoma ATMEGA8)
Takže máme dva nastavené registre pre dva ATMEGA8 rôzne, kde jeden funguje ako VYSIELAČ a druhý ako PRIJÍMAČ.
Teraz pre rozhranie RS232 medzi dvoma mikrokontrolérmi ATmega musia byť pre VYSIELAČ a PRIJÍMAČ splnené nasledujúce vlastnosti:
1. Pin TXD (funkcia príjmu dát) prvého radiča musí byť povolený pre VYSIELAČ a pin RXD druhého radiča musí byť povolený pre PRIJÍMAČ.
2. Pretože komunikácia je sériová, musíme to vedieť vždy, keď je prijatý dátový bajt, aby sme mohli program zastaviť, kým nedostaneme celý 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): (TRASMITTER SIDE) 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.
LIGHT GREY (RXC): (RECEIVING SIDE) Tento bit nie je nastavený počas spustenia, ale používa sa počas práce na kontrolu, či je prijímač pripravený na príjem údajov alebo nie. Ďalšie informácie nájdete v programe na STRÁNKE PRIJÍMANIE.
VOILET (TXEN): (TRASMITTER SIDE) Tento bit je nastavený na povolenie kolíka vysielača na TRASMITTER SIDE.
RED (RXEN): (RECEIVING SIDE) Tento bit predstavuje funkciu príjmu dát, tento bit musí byť nastavený na to, aby dáta z modulu boli prijímané radičom, umožňuje tiež RXD pin radiča.
BROWN (RXCIE): Tento bit musí byť nastavený na získanie prerušenia po úspešnom prijatí dát. Povolením tohto bitu spoznáme bezprostredne po 8-bitovom príjme údajov. Nebudeme tu používať tento bit, takže zostáva sám.
PINK (URSEL): Tento bit musí byť nastavený pred povolením ďalších bitov v UCSRC, po nastavení ďalších potrebných bitov v UCSRC; URSEL musí byť deaktivovaný alebo vynulovaný. Nebudeme tu používať tento bit, takže zostáva sám.
ŽLTÁ (UCSZ0, UCSZ1, UCSZ2): (PRIJÍMACIA STRANA A TRASMITTEROVÁ STRANA) 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 ATMEGA sa uskutočňuje ako osembitová komunikácia. Porovnaním komunikácie s tabuľkou máme UCSZ0, UCSZ1 s jednou a UCSZ2 s nulou.
Musíme ich nastaviť na strane prijímania aj vysielania.
ORANGE (UMSEL): (RECEIVING SIDE & TRASMITTER SIDE) 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 radiče 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): (PRIJÍMAJÚCA STRANA A TRASMITTEROVÁ STRANA) Tieto dva bity sú upravené na základe paritnej bitovej hodnoty, ktorú používame v komunikácii.
ATMEGA je naprogramovaný tak, aby odosielal ú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É (USB): (STRANA PRIJÍMANIA A TRASMITTERU) Tento bit sa používa na výber počtu stop bitov, ktoré používame počas komunikácie.
Komunikácia, ktorá sa tu ustanovuje, je asynchrónneho typu, takže na získanie presnejšieho prenosu a príjmu dát je potrebné použiť dva stop bity, preto sme v oboch radičoch nastavili USBS na „1“.
Prenosová rýchlosť sa nastavuje v ovládači výberom vhodnej 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 „25“, a tak sa nastavuje prenosová rýchlosť.
Ako je znázornené v obvode, je tlačidlo pripojené na strane vysielača. Keď je toto tlačidlo stlačené, vysielač vysiela osembitové dáta a tieto dáta prijíma PRIJÍMAČ. Po úspešnom prijatí týchto údajov prepne zapnutú a vypnutú LED, ktorá je k nim pripojená, čo ukazuje úspešný prenos dát medzi dvoma radičmi.