Šioje pamokoje mes užmegsime nuoseklų ryšį tarp dviejų ATMEGA8 mikrovaldiklių. Čia užmegztas ryšys yra UART (universalaus asinchroninio imtuvo siųstuvo) tipo. Šiuo nuosekliu ryšiu duomenis galima dalytis tarp dviejų mikrovaldiklių, o tai reikalinga įvairiose įterptosiose sistemose.
Būtini komponentai
Aparatūra: ATMEGA8 (2 vnt.), Maitinimo šaltinis (5v), AVR-ISP PROGRAMMUOTOJAS, 100uF kondensatorius (sujungtas per maitinimo šaltinį), 1KΩ rezistorius (dvi dalys), LED, mygtukas.
Programinė įranga: „ Atmel studio 6.1“, „progisp“ arba „flash magic“.
Grandinės schema ir paaiškinimas
Supraskime nuoseklų ryšį AVR mikrovaldikliuose. Čia ATMEGA duomenis nuosekliai siunčia kitam ATMEGA. Jis turi kitą ryšio būdą, tačiau, kad būtų lengviau bendrauti, mes renkamės RS232. Pirmojo ATMEGA8 RS232 kaištis yra prijungtas prie antrojo ATMEGA8 RXD kaiščio.
Užmegztas duomenų ryšys užprogramuotas taip:
- Aštuoni duomenų bitai
- Du stabdikliai
- Nėra pariteto tikrinimo bitų
- 2400 BPS perdavimo sparta (bitai per sekundę)
- Asinchroninis ryšys (tarp dviejų ATMEGA8 neveikia laikrodis)
Taigi mes turime du nustatytus registrus dviem ATMEGA8 skirtingai, kur vienas veikia kaip PERDAVIKLIS, o kitas - GAVĖJAS.
Dabar, norint susieti RS232 sąsają tarp dviejų „ATmega“ mikrovaldiklių, siųstuvui ir imtuvui turi būti įvykdytos šios savybės:
1. Pirmojo valdiklio TXD kaištis (duomenų priėmimo funkcija) turi būti įjungtas TRANSMITTER, o antrojo valdiklio RXD kaištis - RECEIVER.
2. Kadangi ryšys yra nuoseklus, turime žinoti, kai gaunamas duomenų baitas, kad galėtume sustabdyti programą, kol bus gautas visas baitas. Tai daroma įgalinus duomenis gauti visišką pertraukimą.
3. DUOMENYS perduodami ir gaunami valdikliui 8 bitų režimu. Taigi vienu metu valdikliui bus nusiųsti du simboliai.
4. Modulio siunčiamuose duomenyse nėra paritinių bitų, vieno sustojimo bito.
Minėtos funkcijos nustatomos valdiklių registruose; mes ketiname juos trumpai aptarti,
Tamsiai pilka (UDRE): (TRASMITTER SIDE) Šis bitas nenustatytas paleidimo metu, tačiau jis naudojamas dirbant patikrinti, ar siųstuvas yra pasirengęs perduoti, ar ne. Norėdami sužinoti daugiau informacijos, žiūrėkite programą TRASMITTER SIDE.
LIGHT GREY (RXC): (RECEIVING SIDE) Šis bitas nenustatytas paleidimo metu, tačiau jis naudojamas dirbant patikrinti, ar imtuvas yra pasirengęs priimti duomenis, ar ne. Norėdami gauti daugiau informacijos, žiūrėkite programą GAVIMO ŠALIS.
VOILET (TXEN): (TRASMITTER SIDE) Šis bitas nustatytas įjungti siųstuvo kaištį TRASMITTER SIDE.
RED (RXEN): [RECEIVING SIDE] Šis bitas reiškia duomenų priėmimo funkciją. Šis bitas turi būti nustatytas valdiklio gautiems duomenims iš modulio, taip pat įjungiamas valdiklio RXD kaištis.
BROWN (RXCIE): Šis bitas turi būti nustatytas norint pertraukti po sėkmingo duomenų gavimo. Įgalinę šį bitą mes sužinome iškart po to, kai gaunami 8 bitų duomenys. Mes čia nenaudosime šios dalelės, todėl ji liko viena.
PINK (URSEL): Šis bitas turi būti nustatytas prieš įgalinant kitus bitus UCSRC, nustačius kitus reikalingus bitus UCSRC; URSEL turi būti išjungtas arba nustatytas į nulį. Mes čia nenaudosime šio elemento, todėl jis paliekamas vienas.
GELTONA (UCSZ0, UCSZ1, UCSZ2): (GAVIMO PUSIS IR TRASMETRO PUSĖ) Šie trys bitai naudojami norint pasirinkti vienu metu gaunamų ar siunčiamų duomenų bitų skaičių.
Ryšys tarp dviejų ATMEGA nustatomas kaip aštuonių bitų ryšys. Suderinę ryšį su mūsų lentele, UCSZ0, UCSZ1 prie vieno ir UCSZ2 prie nulio.
Mes turime juos nustatyti tiek priimančiojoje, tiek persiunčiančioje pusėje.
ORANGE (UMSEL): (PRIIMANČIOSIOS PUSĖS IR TRASMITTERIŲ PUSĖ) Šis bitas nustatomas atsižvelgiant į tai, ar sistema bendrauja asinchroniškai (abu naudoja skirtingą laikrodį), ar sinchroniškai (abu naudoja tą patį laikrodį).
Abu valdikliai neturi jokio laikrodžio. Kadangi abu jie naudoja savo vidinį laikrodį. Taigi abiejuose valdikliuose turime nustatyti UMSEL į 0.
ŽALIOJI (UPM1, UPM0): (GAVIMO PUSIS IR TRASMITTERIO PUSĖ) Šie du bitai koreguojami atsižvelgiant į bitų paritetą, kurį naudojame bendraujant.
ATMEGA yra užprogramuota siųsti duomenis be pariteto, kadangi duomenų perdavimo ilgis yra nedidelis, galime aiškiai tikėtis, kad nebus prarasti duomenys ar klaidos. Taigi mes čia nenustatome jokio pariteto. Taigi abu UPM1, UPM0 nustatome į nulį arba jie paliekami, nes visi bitai yra 0 pagal nutylėjimą.
MĖLYNA (USBS): (PRIIMANČIOSIOS PUSĖS IR TRASMITTERIŲ PUSĖ) Šis bitas naudojamas parenkant sustabdymo bitų skaičių, kurį naudojame ryšio metu.
Čia užmegztas ryšys yra asinchroninio tipo, todėl norint gauti tikslesnį duomenų perdavimą ir priėmimą, turime naudoti du stabdymo bitus, todėl abiejuose valdikliuose nustatėme USBS į „1“.
Perdavimo greitis nustatomas valdiklyje, pasirinkus tinkamą UBRRH.
UBRRH reikšmė parenkama kryžminant baudų perdavimo spartą ir procesoriaus kristalų dažnį.
Taigi pagal kryžminę nuorodą UBRR vertė laikoma „25“, taigi nustatomas duomenų perdavimo greitis.
Kaip parodyta grandinėje, siųstuvo pusėje yra prijungtas mygtukas. Kai paspaudžiamas šis mygtukas, aštuonių bitų duomenis siunčia TRANSMITTER, o šiuos duomenis gauna RECEIVER. Sėkmingai gavus šiuos duomenis, jis įjungia ir išjungia prie jo prijungtą šviesos diodą, o tai rodo sėkmingą duomenų perdavimą tarp dviejų valdiklių.