Avr pentru începători

Microcontrolere UART AVR.

Una dintre cele mai comune protocoale de microcontroler comunica cu dispozitive externe este un UART (Universal Asynchronous Receiver-Transmitte R) - emisie-recepție asincron universal. Acest protocol este implementat în hardware în majoritatea microcontrolerelor AVR. care permite unui dezvoltator să nu meargă în caracteristicile punerii în aplicare a acestei interfețe. Pentru ao folosi, configurați doar câteva registre!







Avr pentru începători

Să analizăm pe scurt principiul UART.

Acest protocol este consecvent, adică datele sunt strict consecvente, ceea ce limitează într-o anumită măsură viteza de lucru. Deoarece protocolul este asincron, receptorul și emițătorul trebuie să funcționeze strict pe aceeași frecvență, care trebuie să fie configurată înainte de începerea lucrului.

La transmisia unui octet, emițătorul stabilește inițial logicul 0 pe pinul TX (transmițător). Acesta este așa-numitul bit inițial, ceea ce înseamnă începutul transferului. După aceasta, transmițătorul stabilește biții bajului transmis la anumite intervale de timp, setate de frecvență. Un bit de paritate poate fi apoi transmis, care servește la verificarea calității transmisiei. Când toți biții sunt transmiși, este setat un bit stop, adică unul logic pe linia de transmisie. Numărul de biți stop poate fi diferit: 1; 1. 5; 2.

Avr pentru începători

Avantajul imens al acestei interfete este capacitatea sa de a-l folosi pentru a configura comunicarea cu un PC. Pentru aceasta, este necesar să se facă adaptoare UART-RS 232 sau UART-USB, pe baza chips-urilor MAX 232 și FT 232 RL.

Pentru a lucra cu UART (de fapt, USART., Cu toate acestea, pentru noi nu contează acum), următoarele registre răspund:

UDR - Registrul de date UART. Când este trimis, datele trimise sunt scrise, iar când se citește, datele sunt primite. E simplu.

UCSRA - Registru de control și stare UART. Să luăm în considerare biții acestui registru în detaliu:

  • RXC (ReceiveComplete) - pavilionul de primire a datelor. Este setată la 1 dacă există date necitite și este resetată la 0 după terminarea recepției datelor.
  • TXC (TransmitComplete) - sfârșitul semnului de transfer de date. Acesta este resetat la 0 după ce transferul de date este complet și este setat la 1 dacă există date care nu au fost transmise.
  • UDRE (DataRegisterEmpty) - un pavilion indicând disponibilitatea registrului UDR de a primi date noi. Când UDRE este 1, registrul UDR este gol și gata să primească date noi.
  • FE (eroare cadru) - semnalizator eroare cadru.
  • DOR (DataOverRun) - pavilionul depășirii registru de date.
  • PE (Eroare de paritate) - pavilion de eroare paritate
  • U2X - bit, permițând creșterea vitezei de transmisie la jumătate. Când scrieți 1 la acest bit, prescalerul frecvenței ceasului modulului UART este redus la jumătate, ceea ce vă permite să dublezi rata de transfer a datelor.
  • MPCM este un mod de comunicare multiprocesor.






  • RXCIE (RXCompleteInterruptEnable) - un bit care permite sau neagă generarea de întreruperi la sfârșitul recepției. Când scrieți 1 la acest bit, întreruperea la sfârșitul recepției este permisă, în timp ce scrierea 0 este interzisă.
  • TXCIE (TXCompleteInterruptEnable) - Când scrieți 1 la acest bit, este permisă întreruperea la sfârșitul transferului de date, în timp ce scrierea 0 este interzisă.
  • UDRIE (DataregisteremptyInterruptEnable) - Bit autorizarea sau interzicerea apariției Udre întrerupere de pavilion.
  • RXEN (RecieverEnable) - O înregistrare de 1 din acest bit permite receptorului modulului UART, înregistrarea 0 - îl dezactivează.
  • TXEN (TransmitterEnable) - O înregistrare de 1 din acest bit permite ca transmițătorul modulului UART, înregistrarea 0 - să se oprească.
  • UCSZ2 (CharacterSize) - Asociat cu UCSZ biții 1 și 0 UCSZ specifică numărul de transmis bit.To acolo putem trimite nu numai un octet, dar în biți 5,6,7,8,9.
  • RXB8 (ReceiveDataBit8) - 9 biți de date recepționate pentru transmisie de peste 9 biți. Trebuie citit înainte de operațiile cu registrul UDR.
  • TXB8 (TransmitDataBit8) - 9 biți de date trimise pentru transmisie peste 9 biți. Trebuie să fie scris înainte de a scrie alți biți în UDR.
  • URSEL (RegisterSelect) - bit de alegere între registrele UCSRC și UBRRH. Un pic ciudat, totuși, este suficient să ne amintim că atunci când scriem la acesta 1, lucrarea se face cu registrul UCSRC. și când scrieți 0 - cu registrul UBRRH. Adică, biți ulteriori vor fi scrise în registrul corespunzător.
  • UMSEL (ModeSelect) - atunci când scrieți 1 la acest bit, se produce transferul sincron de date, iar atunci când se scrie 0, acesta este asincron.
  • UPM0, UPM1 (ParityMode) - Acești biți vă permit să configurați paritatea datelor transmise.
  • USBS (StopBitSelect) - Acest bit vă permite să selectați numărul de biți stop. Când scrieți 1 la acest bit, numărul de biți stop devine 2, iar atunci când scrieți 0 - 1.
  • UCSZ1, UCSZ0 (CharacterSize) - În combinație cu bitul înregistrare sunt furnizate biți de date UCSZ2 UCSRB pentru a selecta numărul de biți de transmisie.

Citiți și portul COM de Windows. SerialPort. C # Continuare.

Avr pentru începători

  • UCPOL - Acest bit vă permite să configurați în ce direcție vor fi schimbate datele în modul de transfer sincron. Când funcționați în modul de transfer asincron, trebuie să setați acest bit la 0.

Registrele UBRRL și UBRRH sunt responsabile pentru stabilirea vitezei transmițătorului. Trebuie reținut faptul că atunci când se lucrează cu registrul UBRRH, bitul URSEL trebuie să fie 0.

Pentru a obține viteza UART necesară, UBRR (perechi de registru UBRRH și UBRRL) se calculează folosind următoarea formulă:

F osc - frecvența microcontrolerului (Hz).

B este viteza UART necesară (Bit / s).

De exemplu, trebuie să setați rata de transfer la 9600 bps când microcontrolerul funcționează la 8 MHz (8000000 Hz).

UBRR = (8000000 / (9600 * 16)) - 1 = 51,083333

Aproximăm până la un număr întreg, adică până la 51. Și deja acest număr este scris în registrele UBRRL: UBRRH.

Lecția sa dovedit a fi destul de mare, astfel încât implementarea practică a protocolului UART pe microcontrolerele AVR va fi discutată în următoarea lecție.

Vă mulțumesc pentru atenție!

Navigare după înregistrări







Articole similare

Trimiteți-le prietenilor: