V tej vadnici bomo vzpostavili serijsko komunikacijo med dvema mikrokrmilnikoma ATMEGA8. Tu vzpostavljena komunikacija je tipa UART (Universal Asynchronous Receiver Transmitter). S tem se lahko podatki serijske komunikacije delijo med dvema mikrokrmilnikoma, kar je potrebno v različnih vgrajenih sistemih.
Potrebne komponente
Strojna oprema: ATMEGA8 (2 kosa), napajalnik (5v), AVR-ISP PROGRAMMER, kondenzator 100uF (priključen na napajalnik), upor 1KΩ (dva kosa), LED, gumb.
Programska oprema: Atmel studio 6.1, progisp ali flash magic.
Shema vezja in razlaga
Razumejmo serijsko komunikacijo v mikrokrmilnikih AVR. Tu ATMEGA zaporedno pošlje podatke drugemu ATMEGA. Ima drug način komunikacije, vendar za lažjo komunikacijo izberemo RS232. Zatič RS232 prvega ATMEGA8 je povezan z zatičem RXD drugega ATMEGA8.
Vzpostavljena podatkovna komunikacija je programirana tako, da:
- Osem podatkovnih bitov
- Dva stop bitka
- Brez bitov za preverjanje paritete
- Hitrost prenosa 2400 BPS (bitov na sekundo)
- Asinhrona komunikacija (brez izmenjave ure med dvema ATMEGA8)
Tako imamo dva nastavljena registra za dva ATMEGA8 različno, pri čemer eden deluje kot ODDAJALEC, drugi pa kot SPREJEMNIK.
Zdaj za povezavo RS232 med dvema mikrokrmilnikoma ATmega morajo biti za TRANSMITTER in RECEIVER izpolnjene naslednje funkcije:
1. Za TRANSMITTER mora biti omogočen TXD pin (funkcija prejemanja podatkov) prvega krmilnika, za RECEIVER pa mora biti omogočen RXD pin drugega krmilnika.
2. Ker je komunikacija zaporedna, moramo vedeti, kdaj je prejet bajt podatkov, da lahko ustavimo program, dokler ne prejmemo celotnega bajta. To se naredi tako, da se omogoči popolna prekinitev podatkov.
3. PODATKI se prenašajo in prejemajo v krmilnik v 8-bitnem načinu. Torej bosta krmilniku naenkrat poslana dva znaka.
4. V podatkih, ki jih pošilja modul, ni paritetnih bitov, en zaustavitveni bit.
Zgornje funkcije so nastavljene v registrih krmilnikov; o njih bomo na kratko razpravljali,
TEMNO SIVO (UDRE): (TRASMITTER SIDE) Ta bit ni nastavljen med zagonom, vendar se med delom uporablja za preverjanje, ali je oddajnik pripravljen za prenos ali ne. Za več podrobnosti glejte program TRASMITTER SIDE.
SVETLO SIVO (RXC): (SPREJEM STRAN) Ta bit ni nastavljen med zagonom, vendar se med delom uporablja za preverjanje, ali je sprejemnik pripravljen za sprejem podatkov ali ne. Za več podrobnosti glejte program na RECEIVING SIDE.
VOILET (TXEN): (TRASMITTER SIDE) Ta bit je nastavljen za omogočanje zatiča oddajnika na TRASMITTER SIDE.
RDEČA (RXEN): (PREJEMNA STRAN) Ta bit predstavlja funkcijo prejema podatkov, ta bit mora biti nastavljen za podatke iz modula, ki jih bo sprejemal krmilnik, omogoča pa tudi RXD pin krmilnika.
RJAVA (RXCIE): Ta bit mora biti nastavljen za prekinitev po uspešnem sprejemu podatkov. Z omogočanjem tega bita spoznamo takoj po 8-bitnem prejemu podatkov. Tu ne bomo uporabili tega kosa, zato bo ostal sam.
PINK (URSEL): Ta bit je treba nastaviti, preden omogočite druge bite v UCSRC, potem ko nastavite druge potrebne bite v UCSRC; URSEL mora biti onemogočen ali postavljen na nič. Tu ne bomo uporabili tega kosa, zato bo ostal sam.
RUMENA (UCSZ0, UCSZ1, UCSZ2): (SPREJEM STRANI IN ODDAJALCA) Ti trije biti se uporabljajo za izbiro števila podatkovnih bitov, ki jih prejmemo ali pošljemo v enem samem potezu.
Komunikacija med dvema ATMEGA je vzpostavljena kot osem bitna komunikacija. Z ujemanjem komunikacije s tabelo imamo UCSZ0, UCSZ1 na eno in UCSZ2 na nič.
Te moramo nastaviti tako na sprejemni kot na oddajni strani.
ORANŽNA (UMSEL): (SPREJEM STRANI IN TRASMITTERJA STRAN) Ta bit se nastavi glede na to, ali sistem komunicira asinhrono (oba uporabljata drugačno uro) ali sinhrono (oba uporabljata isto uro).
Oba krmilnika nimata skupne ure. Ker oba uporabljata svojo notranjo uro. Torej moramo v obeh krmilnikih nastaviti UMSEL na 0.
ZELENA (UPM1, UPM0): (SPREJEM STRANI IN TRASMITTERJA STRANI) Ta dva bita se prilagodita glede na parnost bitov, ki jo uporabljamo v komunikaciji.
ATMEGA je programirana za pošiljanje podatkov brez paritete, saj je dolžina prenosa podatkov majhna, lahko očitno pričakujemo izgubo ali napako. Torej tukaj ne postavljamo nobene paritete. Tako nastavimo oba UPM1, UPM0 na nič ali pa ostanejo, ker so vsi biti privzeto 0.
MODRA (USB): (SPREJEM STRANI IN TRASMITTERJA STRANI) Ta bit se uporablja za izbiro števila zaustavitvenih bitov, ki jih uporabljamo med komunikacijo.
Tu vzpostavljena komunikacija je asinhronega tipa, zato moramo za natančnejši prenos in sprejem podatkov uporabiti dva stop bita, zato nastavimo USBS na '1' v obeh krmilnikih.
Hitrost prenosa se nastavi v krmilniku z izbiro ustreznega UBRRH.
Vrednost UBRRH se izbere s hitrostjo navzkrižnega prenosa in frekvenco kristala CPU.
Torej je vrednost navzkrižnega sklica UBRR videti kot '25' in tako je nastavljena hitrost prenosa.
Kot je prikazano v vezju, je na strani oddajnika povezan gumb. Ko pritisnete ta gumb, osem bitne podatke pošlje TRANSMITTER in te podatke prejme RECEIVER. Po uspešnem sprejemu teh podatkov vklopi in izklopi priključeno LED diodo, kar prikazuje uspešen prenos podatkov med dvema krmilnikoma.