Uart - Interfață de date seriale

Uart - Interfață de date seriale

Mediile de dezvoltare serioasă, cum ar fi IAR sau ATMEL Studio, conțin, de obicei, fie un simulator software al microcontrolerului țintă, fie au instrumente software pentru lucrul cu depanare hardware.







ID-ul Arduino nu are nici unul, nici celălalt, ceea ce complică foarte mult căutarea de erori în program. Compilatorul identifică numai erori sintactice, împreună cu care există, de asemenea, erori logice (este scris corect, doar că nu), fără a menționa calculul diferiților coeficienți ... Programele nu sunt scrise fără erori!

Există multe metode de depanare, dar pentru aproape toată lumea, aveți nevoie de o conexiune fizică la computer. Toate plăcile Arduino (cu excepția Pro și Pro Mini) au un conector USB de la bord și un microcircuit special care convertește interfața UART la USB. Deci, nu vom inventa nimic inutil si vom face debugarea elementara prin intermediul interfetei, pe care o avem deja!

Mediul de dezvoltare ArduinoIDE include deja un monitor de port serial care vă permite să vizualizați datele care trec prin port, precum și să trimiteți datele. Astfel, putem transfera întotdeauna datele de pe dispozitivul nostru direct pe computer și le putem afișa pe ecran.

Monitorul IDE Arduino nu este singura modalitate de a lucra cu portul, puteți găsi numeroase programe de monitorizare în rețea, care nu numai că vă permit să recepționați date, ci și costuri grafice pe baza acestora, să scrieți date într-o masă și multe altele! Acest lucru va simplifica foarte mult depanarea programului.

Deoarece interfața UART nu este doar pentru convertorul de interfață, ea poate fi folosită și pentru comunicații între plăcile Arduino sau, de exemplu, o placă și un senzor, dar acesta este deja un subiect pentru un alt articol.

Teoria interfeței de operare

UART în limba engleză înseamnă "transmițător universal asincron". Există, de asemenea, versiunea sincronă cu o linie suplimentară de ceas, dar nu este interesantă pentru noi în cadrul articolului.

Uart - Interfață de date seriale

Fiecare bit al fiecărui octet este transmis într-o perioadă egală de timp (de fapt, un interval de timp). Dimensiunea standard a datelor din pachet este de 8 octeți, dar în plus față de date, fiecare pachet conține, de asemenea, informațiile despre serviciu, și anume:

  • bit inițial (necesar)
  • Bit stop (De asemenea, obligatoriu, este posibil să utilizați 1, 1,5, 2 biți stop)
  • bit de paritate (Opțional, Tipuri Impare, Impare)

Pe scurt, parametrii semnalului transmis sunt scrise astfel:

[numărul de biți de date] [tipul parității] [numărul de biți stop], adică înregistrarea 8N1 caracterizează un semnal cu 8 biți de date, fără un bit de paritate (N-Not) cu un bit de stop.







Deoarece interfața este asincronă, viteza transferului de date are o mare importanță - atât pentru receptor, cât și pentru transmițător ar trebui să fie aceeași.

Viteza este măsurată în biți pe secundă sau în scurt timp în bauduri. Standardul RS232 implică viteze de la 1200 la 115200 baud, deși există, de fapt, viteze mai mici și mai mari și până la zeci de megabiți!

Desigur, precizia este întotdeauna relativă și viteza nu va fi niciodată 9600 bauds la cea mai apropiată. Standardul oferă o eroare posibilă de până la 5% (nu mai mult de 3% pentru o recepție confortabilă).

Apoi se rezumă principalele informații despre semnal:

  • În modul inactiv (IDLE), ambele linii de date sunt trase în sus
  • transmisia pornește bitul de pornire (zero logic)
  • transmisia completează bitul de oprire (unitatea logică)
  • datele sunt transmise în modul LSB (cel mai mic bit înainte)
  • cel puțin 10 biți sunt obligați să transmită un octet

4800, 9600, 19200, 38400, 57600, 115200 baud.

UART poate fi pornit fie în modul semi-duplex (numai recepție sau transmitere), fie în modul full-duplex, deoarece liniile de recepție și transmitere sunt separate. Linia TXD este responsabilă pentru transmisie, RXD pentru primirea respectivelor linii de la receptor la emițător sunt traversate (TX-RX, RX-TX).

Implementarea în Arduino

Toate cardurile Arduino construite pe baza celor originale au cel puțin o interfață UART, placi avansate precum Arduino Mega 2560 sau Arduino Due, am 4 interfețe hardware simultan! Ele nu încarcă controlerul, deoarece sunt separate de miez; tot ce aveți nevoie este să configurați portul și să introduceți datele în buffer, după care operațiunile de transfer vor merge independent de dvs.

Desigur, există implementări software de UART, dar acestea se încarcă procesorul. În orice caz, este mai bine să folosiți mai întâi interfețele hardware și apoi să începeți să veniți cu ceva software.

Controlerele de la Arduino folosesc niveluri logice la fel ca puterea, adică pentru cele mai populare placi Arduino UNO, nivelele vor fi egale cu zero = 0V, 1 = 5V.

Pinii sunt conectați la convertorul de interfață prin rezistențe cu rezistență de 1K și prin pieptene pe părțile laterale ale plăcii direct, astfel încât semnalele de la piepteni vor avea o prioritate mai mare. Periodic, acest lucru vă împiedică să intermitenți plăcile cu senzorul conectat pe UART, deoarece firmware-ul utilizează, de asemenea, UART.

Cipul de conversie a interfeței nu mai face încă o COM-interfață pentru computer, ci o simulează. În ciuda acestui fapt, toate programele care funcționează cu portul COM prin API-ul Windows (Win32 API) nu vor distinge portul de portul fizic al computerului.

Class Serial - RS232 în cele mai bune tradiții ale Arduino

Uart - Interfață de date seriale

Pentru lucrul convenabil cu portul serial, dezvoltatorii lui Arduino au scris o întreagă bibliotecă, care simplifică foarte mult lucrul cu portul, abstractizând utilizatorul final de o lucrare simplă, cu fier, cu registrele. Clasa are multe funcții, pe care le vom lua în considerare mai jos. Dar mai întâi trebuie să înțelegeți modul în care computerul va accepta și procesa, sau mai degrabă arăta ce i-am dat.

Lucrul este că fiecare simbol al layout-ului tastaturii este, de asemenea, un octet. Și dacă luați și trimiteți numărul 65 la port, acesta nu va afișa două cifre 6 și 5, dar va scoate litera majusculă A. De ce? Deoarece în tabelul de codare litera A are codul 65. Clasa vă permite să alegeți între metoda textului și metoda binară de transfer de date, adică putem trimite numărul 65 atât ca literă cât și ca număr.

Funcții de clasă în serie

Serialx.begin (viteza)

Programe de depanare cu Serial

Așa că am ajuns la cel mai sacru mister - acum avem suficiente cunoștințe și abilități pentru a începe în final să depanem.

Împărțim munca noastră în trei etape:

  1. Transferarea datelor din programul computerului. Acest lucru deja am stăpânit, vom folosi clasa String.
  2. Cu ajutorul oricărui program de monitorizare, observăm datele noastre
  3. Înțelegeți greșelile, regulile, retestați programul

Să încercăm să depanem cel mai simplu program de interacțiune dintre controlerul Arduino și butoanele.

Într-o schiță simplă, adăugați câteva blocuri care vor afișa starea butoanelor din portul serial:

Programe de depanare utilizând clasa Serial







Trimiteți-le prietenilor: