Interfață serială uart. Ce este UART. Pe scurt despre metoda recepție-transmisie

Deoarece voi folosi UART pentru a conecta dispozitivele de blog cu proiectele dvs., vă voi spune puțin despre cum funcționează și cum să îl utilizați.

Universal Asynchronous Transceiver (UART) este o interfață destul de veche și comună. Până de curând, conectorul Port COMși (același UART doar nivelurile de tensiune sunt diferite) a fost atribut obligatoriu fiecare calculator. Acum portul COM se „stinge” treptat și, dacă nu este încă neobișnuit pe „turnuri”, atunci pe laptopuri nu mai există nicio urmă de el. Dar, datorită simplității și popularității interfeței, marea majoritate a microcontrolerelor au UART ca parte a perifericelor lor. Și dacă computer personalÎn timp ce UART nu mai este satisfăcător din cauza vitezei reduse și a imposibilității de extindere, interfața este convenabilă pentru microcontrolere și va continua să fie utilizată.
Deoarece multe microcontrolere au UART, înseamnă că îl vom folosi ca una dintre interfețele pentru conectarea dispozitivelor de blog cu dispozitivele dvs. electronice.
Pentru început o mică teorie despre cum funcționează interfața(fără detalii inutile). Pentru comunicarea prin interfața UART, sunt utilizate două picioare de controler RXD– pentru primirea mesajelor (Receiver) și TXD– pentru transmiterea mesajelor (Transmitter). UART este o interfață full duplex. Aceasta înseamnă că receptorul și emițătorul funcționează independent unul de celălalt. În plus, emițătorul sau receptorul poate fi oprit separat, eliberând piciorul controlerului pentru alte nevoi. Transmiterea (respectiv, recepția) mesajelor se realizează în pachete fixe de biți (un astfel de pachet se numește cadru). Cadrul este format din start bit(fiecare cadru începe cu el), biți de date(poate fi de la 5 la 9 biți), bit de paritate(verificarea corectitudinii transferului de date) și unul sau doi biți de oprire(semnal despre sfârșitul cadrului).

Unde:
INACTIV- în așteptarea schimbului - ar trebui să fie 1 ;
Sf- Start bit - întotdeauna 0 ;
(n)— Biți de date — pot fi de la 5 la 9 biți;
P— bit de paritate;
Sp- Oprește-te - întotdeauna 1.

Dacă un mesaj conține mai mult de un octet, fiecare octet ulterior este transmis ca un cadru separat. Transmisia (și recepția) datelor se realizează la anumite frecvențe fixe (măsurate în Baud=bit/sec) de la 600 la 128.000 Baud. Stare funcționare corectă port, există o setare a acelorași parametri atât pentru receptor, cât și pentru transmițător (viteză, număr de biți de date, bit de paritate, număr de biți de oprire).

Să cădem de acord asupra formatului cadrului (setări UART) pentru dispozitivele de blog:
Viteza de transfer - 9600 (acesta este în kiloocteți pe secundă);
Numărul de biți de date - 8 (cel mai convenabil pentru a lucra cu);
bit de paritate - Chiar(se efectuează verificarea parității);
Numărul de biți de oprire - 1;
Într-o versiune scurtă arată astfel:
Baud Rate: 9600, 8 date, 1 stop, paritate uniformă

UART poate funcționa și în modul sincron (un alt picior de controler este utilizat pentru aceasta) și poate suporta adresarea mai multor dispozitive. Dar din moment ce dispozitivele noastre sunt simple și nu avem nevoie de aceste funcții, nu le vom lua în considerare.

Dacă este nevoie caracteristici suplimentare, Asta descriere completă UART se află în fișa de date pentru microcontroler - consultați-l.

Pentru ca dispozitivul de pe blog să înceapă să lucreze cu proiectul tău interfață UART trebuie să:
1 Conectați dispozitivul blog la pinii corespunzători ai microcontrolerului.
2 Configurați transceiver-ul UART al controlerului dumneavoastră. Pentru a face acest lucru, scrieți anumite valori în porturile I/O corespunzătoare.
3 Aveți proceduri (de scriere) pentru primirea/transmiterea mesajelor prin UART în programul dumneavoastră.

Acum să ne uităm la fiecare punct în detaliu:


1 CONECTAREA DISPOZITIVELOR PRIN UART.

Totul este simplu aici:
- dacă sunt planificate atât recepția, cât și transmisia, dispozitivele sunt conectate prin două linii - TX_devices din RX_project și TX_project de la RX_device (în continuare, prin „dispozitiv” voi înțelege dispozitivul de pe blog, iar prin „proiect” - electronicul dvs. proiect);
— dacă trebuie doar să primiți (de exemplu, datele sunt primite de la tastatură) — TX_devices de la RX_project;
— dacă este necesar doar transferul (de exemplu, datele sunt transferate pe un dispozitiv de afișare) — TX _a proiectului de la RX_device.


2 CONFIGURAREA TRANSCEIVERULUI UART.

După cum am convenit mai sus, formatul de cadru pentru dispozitivele noastre este:
Baud Rate: 9600, 8 date, 1 stop, paritate uniformă
Pentru a lucra cu acest format de cadru, trebuie să scrieți valorile corespunzătoare în secțiunea de inițializare a dispozitivului a programului dvs. porturile necesare Controler I/O. Pentru a face acest lucru, trebuie să deschideți secțiunea de fișă de date USART pentru microcontrolerul dvs. și să selectați/calculați valorile necesare. Dar puteți face totul mult mai simplu - utilizați configuratoare automate de periferice - CodeWisards.
Să luăm ca exemplu microcontrolerul Attiny2313 (prin analogie, puteți configura orice microcontroler) și configurați UART în diferite limbi programare.

Pentru a începe - Algorithm Builder.
Totul aici este extrem de simplu - creăm un proiect ( Fișier/Nou). Selectați microcontrolerul și frecvența oscilatorului principal Opțiuni/Opțiuni de proiect...(ATtiny2313, oscilator master intern la 8 MHz). În bara de instrumente, faceți clic pe butonul "S"- selectați „personalizare registru de control”. USART iar în fereastra care se deschide, completează totul ca în imagine. Totul este semnat și clar acolo.


Clic "BINE". Gata – UART este inițializat și gata de utilizare.
Dacă aveți nevoie doar de un receptor sau doar de un transmițător, bifați doar caseta necesară - piciorul neutilizat poate fi folosit ca port I/O.

Deoarece întreruperile vor fi activate în program, trebuie să setați indicatorul stivei la sfârșitul memoriei înainte de a inițializa USART ( "S"/Stack Pointer SP) și titlul partea de sus a blocului cuvânt cheie « Resetați».


În asamblator. Sincer, nu știu dacă asamblatorii pentru AVR au personalizatoare periferice, dar chiar dacă nu, o soluție simplă este să folosești același Algorithm Builder. În fereastra de setări USART, în partea dreaptă, sunt scrise comenzi mnemonice (Operații) care oferă caracteristicile selectate. Traducerea lor în cod de asamblare nu este dificilă.

Traducerea în comenzi de asamblare.

;Inițializare USART ; Parametri de comunicare: 8 date, 1 oprire, paritate uniformă;Receptor USART: Activat ;Transmițător USART: Activat ;Mod USART: Asincron ;Rată de transmisie USART: 9600 uart_init: LDI R16, 00 USD OUT UBRRH, R16 LDI R16, 33 USD OUT UBRRL, R16 LDI R16, 26 USD R16, UCSDIRC, 26 USD R16 00 USD OUT UCSRA, R16 LDI R16, 98 USD OUT UCSRB, R16

;Inițializare USART ;Parametri de comunicare: 8 date, 1 oprire, paritate uniformă ;Receptor USART: activat ;Transmițător USART: activat ;Mod USART: asincron ;Rată de transmisie USART: 9600 uart_init: LDI R16, 00 USD OUT UBRRH,R16 LDI3 R16 OUT UBRRL, R16 LDI R16, 26 USD OUT UCSRC, R16 LDI R16, 00 USD OUT UCSRA, R16 LDI R16, 98 USD OUT UCSRB, R16

CodeVision conține propriul său personalizare periferică (CodeWisard), chiar mai rău decât Algorithm Builder. Pentru a genera setări UART, faceți clic pe pictograma roată ( CodeWisardAVR) pe bara de instrumente. În fereastra care se deschide, selectați mai întâi fila Chipîn el selectăm microcontrolerul și setăm frecvența cu care va funcționa oscilatorul principal. Apoi, selectați și completați fila USARTîn conformitate cu caracteristicile necesare(dacă aveți nevoie doar de un receptor sau doar de un transmițător, bifați caseta corespunzătoare).

// Inițializare USART // Parametri de comunicare: // 8 date, 1 oprire, paritate uniformă// Receptor USART: Pornit // Transmițător USART: Pornit // Mod USART: Asincron // Rată de transmisie USART: 9600 UCSRA= 0x00 ;

// Inițializare USART // Parametri de comunicare: // 8 date, 1 oprire, paritate uniformă // Receptor USART: Activat // Transmițător USART: Activat // Mod USART: Asincron // Rată de transmisie USART: 9600 UCSRA=0x00; UCSRB=0x98; UCSRC=0x26; UBRRH=0x00; UBRRL=0x33;

Salvați proiectul generat ( File\Generate, Save and Exit) - gata. S-a creat un proiect cu toată lumea setările necesare pentru UART. Alte periferice (adesea inutile) sunt de asemenea inițializate în proiect. După crearea unui proiect, îl puteți corecta - eliminați tot ceea ce nu este necesar.


3 CREAREA PROCEDURILOR DE PROCESARE A MESAJELOR UART.

O mică digresiune.
Lucrul cu UART poate fi organizat în diverse moduri. De exemplu:
— pur și simplu așteptați în corpul programului să sosească mesajul, verificând constant bitul de recepție al mesajului;
— să permită întreruperea și să proceseze mesajul în corpul de întrerupere;
- creați un buffer în care mesajele vor fi trimise prin întreruperi, iar în corpul programului, „liber”, citiți valorile din buffer;
- există încă o mulțime de opțiuni - alegerea este a ta.
Dar, pe baza faptului că mesajele de la dispozitive sunt, în cea mai mare parte, unice (un octet) și nu prea frecvente (luați, de exemplu, o tastatură - câteva apăsări pe secundă, nu mai mult), cea mai buna varianta, în ceea ce privește economisirea memoriei și viteza de procesare, mesajul UART va fi procesat în corpul de întrerupere. Prin procesare mă refer la citirea registrelor, verificarea recepției corecte și stocarea octetului primit într-o variabilă globală (un fel de buffer de un octet). Dacă sunt așteptate manipulări simple cu octetul primit, acestea pot fi organizate și în corpul de întrerupere.

În viitor, mă voi concentra pe acest algoritm de lucru, cu excepția cazului în care altul este mai justificat.

Generator de algoritmi.
Primirea datelor efectuată în procedura de procesare a întreruperii la sfârșitul primirii unui octet (cadru). Octetul primit este scris într-o variabilă globală De laGCnDevice.În corpul programului, valoarea FromGCnDevice este verificată, dacă este zero, nimic nu este acceptat.

Dacă lucrul cu valoarea primită nu este dificil, puteți face acest lucru direct în corpul de procesare a întreruperii.
Transfer de date să fie efectuată fără a folosi întreruperi și un buffer (hardware-ul transmițătorului UART are un buffer de 2 octeți). Aceasta înseamnă că doar un singur octet vor fi transferați confortabil (care este ceea ce intenționăm să facem). Dacă încărcați o linie de date dintr-o dată, microcontrolerul se va ocupa doar de această linie.

Asamblator.
Octetul este primit în întrerupere, rezultatul rămâne în registrul r17 (dacă este necesar, salvați-l în SRAM).

; Întreruperea de gestionare la finalizarea recepției octet PUSH R16 IN R16, SREG PUSH R16 IN R16, UCSRA ;Citirea statusului de la UCSRAÎN R17, UDR ;Citirea datelor din UDR ANDI R16, $1C BREQ_END ;Verificați erorile CLR R17_END: ;R17 conține octetul primit POP R16 OUT SREG, R16 POP R16 RETI

;Întreruperea procesării la finalizarea recepției octetului PUSH R16 IN R16,SREG PUSH R16 IN R16,UCSRA ;Citirea stării de la UCSRA IN R17,UDR ;Citirea datelor din UDR ANDI R16,$1C BREQ _END ;Verificarea erorilor CLR R17 _END: ​​;în R17 este octetul primit POP R16 OUT SREG,R16 POP R16 RETI

Transfer de octeți

LDI R16, valoarea SBIS UCSRA, UDRE RJMP PC-1 ; așteptarea pregătirii pentru a primi octetul OUT UDR, R16; octet de cască


C - în programul CodeVisionAVR.
Totul este simplu aici: CodeWizard, împreună cu inițializarea UART, creează și proceduri pentru recepție și transmitere. Singurul lucru pe care îl puteți face aici este să aruncați buffer-ul de recepție (dacă activați întreruperi pentru recepție sau transmitere, un buffer este creat automat). Dacă acest buffer nu este necesar, procedura de gestionare a întreruperilor de primire a octetului și procedura de transfer pot arăta astfel:

// Variabilă globală - date primite de la dispozitiv // Dacă FromGCnDevice==0 - nu a fost primit nimic char FromGCnDevice; // Gestionarea întreruperii de recepție de sfârșit de octetîntrerupe [ USART_RXC] void usart_rx_isr(void ) ( stare caracter; // Obține starea și octetul de date stare=UCSRA; FromGCnDevice= UDR;// Dacă a apărut o eroare la primirea unui octet, atunci FromGCnDevice=0 if ((stare & amp; (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN) ) != 0 ) FromGCnDevice= 0 ;) // Procedura de transfer de octeți void ToGCnDevice(car c) (

// Așteptați sfârșitul transmiterii octetului anterior


în timp ce ((UCSRA & amp; DATA_REGISTER_EMPTY) == 0 ) ;
Mai jos las arhive de programe cu exemple de operare UART pentru ATtiny2313.
- Un exemplu de proiect creat automat de CodeWisionsAVR
- Un exemplu de program pentru lucrul cu UART în Algorithm Builder


P.S. Nu cunosc bine C și Asm, așa că este permis să dai cu picioarele și să arunci papucii! Învățăm cu toții.


Inițializat

(Vizitat de 10.796 de ori, 2 vizite astăzi)

Există un microcircuit minunat - FT2232D. Acesta este un convertor USB-UARTx2. Convenabil atunci când trebuie să obțineți două cozi UART de la unul fire USB. Dar acestea sunt semințe în comparație cu faptul că suportul hardware puternic pentru MPSSE (Multi-Protocol Synchronous Serial Engine) a fost introdus în acest microcip FTDI, care vă permite să implementați o grămadă de interfețe diferite precum SPI sau JTAG numai pe acest microcip.
Ceea ce oferă pur și simplu cea mai largă posibilitate de a construi programatori de dimensiuni diferite pentru orice. Pe în acest moment Am văzut scheme pentru firmware pentru AVR, ARM, Altera și Dumnezeu știe ce altceva.

Teoretic, îl poți folosi pentru a flash orice, ar fi suport softwareși un protocol deschis și documentat.

Prin urmare, pentru un lucru atât de drăguț, nu am stricat și am făcut o eșarfă universală, care mai târziu, prin agățarea eșarfelor la mezanin, se va transforma în diferite cusaturi și depanatoare.

Program gata trebuie să-l introduci cumva în controler. Există multe moduri de a face acest lucru.

Adaptor JTAG/SWD
Deoarece JTAG este adesea folosit pentru depanare sub ARM, această metodă este probabil cea mai populară. În acest scop este folosit un adaptor de orice fel. De exemplu, îl folosesc, așa că îl voi arăta folosind exemplul lui. Totul este simplu acolo - conectați adaptorul la controler cu un cablu standard SWD sau JTAG. Prin linii NRST/TDI/TDO/TCK/TMS pentru JTAG sau prin SWO/SWOCLK/SWDIO/NRST pentru modul SWD. Pe adaptorul versiunii mele de CoLinkEX, ambii acești conectori sunt conectați la un singur bloc, deci este ca o conexiune JTAG și SWD simultan. Și apoi alegi de care ai nevoie. Nu există nicio diferență specială în depanare/firmware între ele.

Sau folosind utilitarul CoFlash de la CooCox.com

Unul dintre avantajele serioase ale controlerelor AVR este numărul sălbatic de întreruperi. De fapt, fiecare dispozitiv periferic are un vector, sau chiar mai mult de unul. Deci, folosind întreruperi, puteți declanșa o grămadă de procese paralele. Lucrul la întreruperi este o modalitate de a crea un mediu pseudo multitasking.

Ideal pentru transferul de date și procesele de lungă durată.

Ca exemplu, voi arăta ieșirea datelor tamponate prin USART la întreruperi.

În exemplele anterioare a existat un cod ca acesta:

// Trimite un șir void SendStr(char *string) ( while (*string!="\0") ( SendByte(*string); șir++; ) ) // Trimite un singur caracter void SendByte(char byte) ( while( !( UCSRA & (1<

Această metodă este evident complet ineficientă. Faptul este că avem cea mai stupidă așteptare de la un eveniment aici - ridicarea steagului USART ready. Și asta depinde, în primul rând, de viteza de transfer a datelor. De exemplu, la o viteză de 600 baud, transmisia a aproximativ 600 de caractere va dura 9 secunde, blocând funcționarea întregului program, care nu interferează cu nimic.

Într-o zi am avut nevoie de un dispozitiv capabil să se conecteze la un server la distanță și să trimită octeți. Desigur, puteți folosi un computer în aceste scopuri, dar este greoi și incomod, iar fiabilitatea unui astfel de sistem lasă mult de dorit - dispozitivul este prea complex. Un alt lucru este un microcontroler, de exemplu Microchip PIC, MSC-51 sau Atmel AVR - simplu, fiabil, consumă energie minimă și este capabil să efectueze în mod fiabil o gamă restrânsă de sarcini atribuite. De exemplu, monitorizarea alarmelor prin Internet sau rețeaua Ethernet. Totul ar fi bine, dar apoi apare o altă problemă - protocolul TCP/IP. Implementarea unei stive de protocol TCP/IP pe un AVR sau PIC este o sarcină fezabilă, dar este nevoie de timp, iar timpul, după cum știm, înseamnă bani. Era necesar urgent și cu hemoroizi minime. Și aici mi-a venit în ajutor modulul de interfață Ethernet - RS232. Sarcina este standard, așa că există o mulțime de oferte pe piață pentru module gata făcute, dar nu este nevoie să vă grăbiți. Există o serie de subtilități legate de caracteristicile de operare ale acestor dispozitive. De exemplu, marea majoritate a modulelor pot funcționa exclusiv ca un server care necesită o adresă IP dedicată. Dispozitivul client funcționează numai cu software specializat, de obicei sub Windows, și deschide un port COM virtual care se conectează la un sistem la distanță (UART - modul Ethernet) și asigură schimbul de date. Nu este cea mai convenabilă opțiune. Pentru sarcina mea, acest design a fost complet nepotrivit. Așa că am început să caut mai departe și în curând a fost descoperit un modul minunat EG-SR-7100, iar apoi modificarea sa mai nouă WIZ100SR. Am citit caracteristicile - este acolo! Totul pentru a-mi rezolva problema!

Mi-am cumpărat câteva module HM-TR433. Da, chin. O astfel de bucurie costă în prezent aproximativ 800 de ruble. Acesta este un transceiver, adică poate să primească și să transmită. Mai mult, aici există un controler de control, care el însuși codifică informația, o împinge în canalul radio și decodifică ceea ce este prins. Adică, în esență, obținem un extender UART și tot felul de probleme precum zgomotul după pierderea purtătorului, care erau în pachet HM-T433/HM-R433 nu ne mai pasa. Un minus este că canalul este semi-duplex, adică recepția și transmisia sincronă sunt imposibile, doar pe rând. Dar aceasta nu este o problemă mare - semi-duplex este adesea suficient.


Există două modificări ale acestui modul. Unul are terminație TTL, celălalt RS232. Singura diferență este în niveluri și în faptul că în primul chinezii au uitat să lipize în MAX232 și cablajul condensatorului, dar au instalat jumperi. Deci, dacă ai brațele drepte și instrumentul potrivit, poți face RS232 din TTL și invers. Cu toate acestea, prețul este un ban pentru un ban.

Tax, în timpul lucrului la un proiect comercial (și nu întrebați despre care dintre ele - nu vă voi spune), care mi-a înghițit tot timpul liber cu o lingură uriașă zimțată, a fumat modulele radio până la scrum. HopeRF HM-R433/HM-T433. Astăzi am asamblat un circuit semi-duplex pe patru module și am efectuat o sesiune de recepție și transmisie pe distanță lungă.

Deci, cum a fost instalarea:

Blocul A:

  • Transmiţător: HM-T433
  • Receptor: HM-R433
  • Locație bloc: etajul 5, pe masă. La peretele de nord.
  • Putere: 5 volți.
  • Rata baud: 4800 baud.
  • Lungimea pachetului de date: 10 octeți.

Blocul B:

  • Transmiţător: HM-T433
  • Receptor: HM-R433
  • Antena emițătorului: O bucată de fir MGTF de 17 cm lungime (1/4 din lungimea de undă a semnalului de 433 MHz) oricum îndoită.
  • Antena receptorului: aceeași prostie.
  • Dispunerea modulelor: paralele între ele, la o distanță de 2 cm, antenele sunt împrăștiate în direcții diferite, precum gândacii.
  • Locația blocului: În mâinile mele, pe pământ. Pe partea de sud a casei (vezi diagrama)
  • Putere: 5 volți.
  • Rata baud: 4800 baud.
  • Lungimea pachetului de date: 10 octeți.

Starea transferului:
Blocul B dă un pachet de zece octeți blocului A, care, asigurându-se că pachetul este primit fără distorsiuni, trimite o confirmare înapoi blocului B, aceiași zece octeți. Blocul B, după ce a primit confirmarea, aprinde dioda verde. Transmisia are loc cu o întrerupere a purtătorului. Aceste. După trimiterea pachetului, emițătorul este oprit complet.


În timpul testelor inițiale, această piesă de hardware și-a arătat cea mai bună latură, dar în practică s-a dovedit nu doar bug-uri, ci și gândaci ucigași uriași. S-ar părea, ce e rău în a lucra acolo? Dar, după cum sa dovedit, este ceva de spus. Mai exact, acestea nu sunt bug-uri, ci caracteristici despre care producătorul a tăcut cel mai josnic în fișele de date. Dacă aș fi știut despre ele, m-aș fi gândit dacă merită să le cumpăr. Aşa:

Purtător
Receptorul prinde schimbarea purtătorului generată de transmițător. Și dacă nu există emițător, ce va capta receptorul? În teorie, nu ar trebui să prindă nimic, dar ce se întâmplă în practică? Dar, în practică, este un srach sălbatic!!! Zgomot alb natural pe întregul interval de la 0 la 255. Ce bug, nu? Dar bine, la naiba cu acest zgomot alb, în ​​cele din urmă, îl puteți filtra, puteți monitoriza prezența a ceva rezonabil în el și abia apoi începeți să îl primiți.

Modul standby
Spre surprinderea mea, precum și a unui număr de cititori atenți, emițătorul nu are intrare Permite. Receptorul o are. O prostie rară, mai ales având în vedere faptul că după 70mS de inactivitate pe linia de DATE, emițătorul intră în hibernareși... așa e, întrerupe purtătorul - în acel moment începe o ceartă cumplită la ieșirea receptorului. Deci, fie datele au fost trimise într-un flux continuu, fie a existat un pachet de identificare înainte de fiecare colet. Și nu uitați să avertizați receptorul că transmisia s-a încheiat și că nu mai este nimic de prins.

Colaborare
Totul este simplu aici, două transmițătoare nu pot funcționa simultan. Din cuvântul absolut. Fie separat, fie deloc. Acest lucru era de așteptat și trebuie luat în considerare.

Erori în timpul transmisiei
Dar ceea ce m-a atras cel mai mult au fost bug-urile. Dacă primele trei puncte pot fi luate în considerare și procesate programatic fără probleme inutile, atunci cu ultimul totul este mult mai distractiv.

Printre alte bunătăți, pe lângă telemetrul cu ultrasunete, am primit și module radio într-un colet de la Terra. Sper că HM-T433Şi Sper HM-R433 Pentru transmisie și, respectiv, recepție. Modulul în sine este o eșarfă mică 15x25 mm cu un conector ieșit din el. Transmițătorul are un conector cu trei pini - GND, DATA și Vcc receptorul are și o intrare PERMITE când se servește la un nivel înalt, recepția este permisă.

Trebuia să-mi fac dispozitivul distractiv, astfel încât să-l pot folosi pentru a distribui octeți eu 2 sŞi UART, și, de asemenea, primiți octeți folosind aceleași protocoale și scoateți-i pe ecran. Fie pe rând, fie în loturi. Un fel de depanator.

Ei bine, a spus gata. Blocat ATMega8535- primul care a venit la îndemână dintre cei cu multe picioare. A adus tot ce a putut afară, a adăugat un mic Matrice de tastatură 4x4 și ecran LCD. Ecranul este mic WH0802A Personaje 8x2, dar ce personaj era. Nu am văzut altele la vânzare aici, dar îmi este prea lene să le comand. Da, și cred că nu este nevoie de mai mult.

Și din moment ce era o astfel de băutură, am scos câteva canale la grămadă PWM, da, câteva intrări ADC. Bine SPIîn același timp – mergi așa. Acolo poti si tu Dallas 1-fir organizează un protocol, atașează un frecvențămetru, un indicator de semnal, un voltmetru și în general poți face o mulțime de lucruri dacă vrei. Din nou, există o mulțime de linii de intrare/ieșire, așa că le puteți folosi pentru a face o unitate principală inteligentă sau un controler pentru ceva.

Cazul a fost luat gratuit, PAC-TEC„ovskiy, care a dat-o în bară acum vreo doi ani. Acolo este util cutia :) Trebuie să spun, PAC-TEC face cutii pur și simplu uimitoare. Nu ca prostiile care se vând în magazinele noastre de radio. Nu scârțâie, nu se joacă, sunt bine construite, bine tăiate și arată cool. Unde altundeva ar fi vândute aici?

Până acum tocmai am așezat placa, unele părți încă lipsesc. Într-una din aceste zile voi grava placa, o voi asambla și o voi programa. Apoi veți avea exemple de cod live și o descriere detaliată SPI, i2c, UART, tastatura si LCD. Apropo, acordați atenție cât de ușor este să matrizați butoanele obișnuite ale ceasului. Și totul datorită faptului că au patru pini conectați în perechi.

Între timp, deoarece este încă sub formă de desen, notează-ți ideile despre caracteristicile viitorului dispozitiv în comentarii.

În timp ce scriam un articol despre UART, mi-a venit în minte o idee pervertită - pe baza UART, puteți organiza cel mai natural PWM low-discret!

Este suficient doar să facem o variabilă undeva în memorie, unde vom pune un număr cu un ciclu de lucru dat de zerouri și unu, iar când golirea tamponului este întreruptă, vom împinge acest număr înapoi în registrul UDRE. Astfel, generarea PWM va fi spontană, fără mișcări inutile. Adevărat, puteți obține doar 10 valori PWM diferite, dar este gratuit!!!

Pentru cei care nu înțeleg cum, voi da numerele care vor trebui trimise continuu prin UART:
Vom obține două valori suplimentare datorită biților de pornire și oprire.

00000000 — 1/10
00000001 — 2/10
00000011 — 3/10
00000111 — 4/10
00001111 — 5/10
00011111 — 6/10
00111111 — 7/10
01111111 — 8/10
11111111 — 9/10

Și puteți obține frecvențe incredibile acolo!
Frumusețe! =)))))

Aproape fiecare microcontroler are o interfață serială universală la bord - UART. AVR Aceasta nu face excepție și acceptă acest protocol în întregime, în întregime hardware. Structura este normală asincron protocol serial, adică partea care trimite trimite pe rând 0 și 1 în linie, iar partea receptoră le urmărește și le amintește. Sincronizarea se bazează pe timp - receptorul și emițătorul convin în prealabil asupra frecvenței care va avea loc schimbul. Acesta este un punct foarte important! Dacă viteza emițătorului și a receptorului nu se potrivesc, atunci este posibil să nu existe deloc transmisie sau se vor citi date greșite.

Protocol
În primul rând, emițătorul aruncă linia jos - asta start bit. Simțind că linia s-a lăsat, receptorul așteaptă intervalul T1 și citește primul bit, apoi la intervale T2 biții rămași sunt selectați. Ultimul bit este oprește puțin. Indicând faptul că transmiterea acestui octet este completă. Acesta este în cel mai simplu caz.

La sfârșitul octetului, înainte de bitul de oprire, poate exista un bit de paritate. Care se obține dacă toți biții sunt amestecați împreună pentru a controla calitatea transmisiei. Pot exista și două opriri, din nou pentru fiabilitate. Poate că nu există 8 biți, ci 9. Toți acești parametri sunt conveniți la mal, înainte de începerea transmisiei. Cel mai popular este 8 biți, o pornire cu o oprire, fără paritate.

Mai mult, nu trebuie să vă deranjați cu protocolul în sine - totul este implementat în hardware. Dacă nu doriți să creați un al doilea UART, atunci va trebui să o faceți în software.

Portul COM al computerului funcționează folosind același protocol, singura diferență este diferența de tensiune, așa că acesta este protocolul pe care îl voi folosi pentru a comunica microcontrolerul cu computerul. Pentru a converti tensiunile, puteți utiliza un convertor RS232-TTL. Port COM. Dar există o problemă aici - adevărul este că computerul RS232 este nevoie pentru niveluri logice +/- 12 volt și UART funcționează la niveluri de cinci volți. Cum să le combine? Pentru aceasta, există mai multe opțiuni pentru circuitele convertoare de nivel, dar cea mai populară se bazează încă pe un convertor special RS232-TTL. Acesta este un microcircuit MAX232și analogii săi.
Aproape fiecare companie își face propriul convertor, așa că și acesta va funcționa ST232, Și ADM232, Și HIN232. Circuitul este la fel de simplu ca trei copeici - intrare, ieșire, alimentare și un circuit de cinci condensatori. Condensatorii sunt de obicei plasați 1uF electroliți, dar în unele modificări este instalat 0,1 uF ceramică. Am lipit peste tot 0,1 uF ceramică și de obicei asta era de ajuns. :) Funcționează ca un ceas. Dacă se defectează la viteze mari, atunci va fi necesar să creșteți capacitatea.


Apropo, există și MAX3232 acesta este același lucru, dar ieșirea sa nu este de 5 volți TTL, ci de 3,3 volți TTL. Este folosit pentru controlere de joasă tensiune.

Mi-am făcut un astfel de cablu universal, astfel încât să fie convenabil să mă agăți de controlere. UART. Pentru compactitatea generală, am îndesat întregul circuit direct în conector, din fericire am avut ST232în corpus soic. Rezultatul a fost o eșarfă nu mai mare decât o monedă de rublă. Deoarece nu erau condensatoare mici SMD la îndemână, a trebuit să lipim condensatorii deasupra, indiferent de cost. Principalul lucru este că funcționează, deși nu a ieșit foarte bine.


Dacă te îndoiești că vei reuși o instalare atât de mică, atunci am conectat placa pentru tine la o carcasă PDIP standard. Va avea dimensiunea unei cutii de chibrituri, dar nu este nevoie să o tăiați.


După asamblare este ușor de verificat:
Se conectează la conector COM port. Aplicați 5 volți de alimentare la circuit și apoi închideți Rx pe Tx(pentru mine acestea sunt fire verzi și galbene).

Apoi deschideți orice terminal, cel puțin Hyper Terminal, te conectezi la port și începi să trimiți octeți, ar trebui să revină imediat. Dacă nu se întâmplă acest lucru, verificați diagrama, undeva există un jamb.

Dacă funcționează, atunci totul este simplu. Firul care vine de la pinul 9 al microcircuitului MAX232 Acest transmite pin, pune-l pe picior RxD controlor. Iar cel cu picioare 10 - primind, nu ezitați să-l puneți în custodie TxD controlor.


Placa a fost realizata folosind metoda LUT, intr-un singur loc, din cauza supravegherii mele, grosimea lumenului s-a dovedit a fi de 0,05 mm, a fost gravata, dar cu aderenta, a trebuit sa o zgâriesc. Dar, în general, prima dată nu au fost probleme. Mi-am dorit imediat să fac ceva mic, umplut, umplut :)

UART de microcontrolere AVR.

Unul dintre cele mai comune protocoale pentru interacțiunea dintre un microcontroler și dispozitivele externe este UART (Universal Asynchronous Receiver-Transmitter) - Transceiver asincron universal. Acest protocol este implementat în hardware în majoritatea microcontrolerelor AVR, ceea ce permite dezvoltatorului să nu intre în specificul implementării acestei interfețe. Pentru a-l folosi, trebuie doar să configurați câteva registre!

Să luăm în considerare pe scurt principiul de funcționare al UART.

Acest protocol este secvenţial, adică datele circulă strict una după alta, ceea ce limitează într-o oarecare măsură viteza de operare. Deoarece protocolul este asincron, receptorul și emițătorul trebuie să funcționeze strict la aceeași frecvență, care trebuie configurată înainte de a începe lucrul.

Când transmite un octet, transmițătorul setează inițial 0 logic la pinul TX (transmițător). Acesta este așa-numitul bit de pornire, care indică începutul transmisiei. După aceasta, emițătorul setează biții octetului transmis la anumite intervale de timp specificate de frecvență. În continuare, poate fi transmis un bit de paritate, care servește la verificarea calității transmisiei. Când toți biții au fost transmisi, este setat bitul de oprire, adică un 1 logic pe linia de transmisie. Numărul de biți de oprire poate fi diferit: 1 ; 1, 5; 2.

Un mare avantaj al acestei interfețe este capacitatea de a o utiliza pentru a seta comunicarea cu un PC. Pentru a face acest lucru, este necesar să faceți adaptoare UART - RS 232 sau UART - USB pe baza microcircuitelor MAX 232 și, respectiv, FT 232RL.

Citiți mai multe despre adaptoare aici.

Următoarele registre sunt responsabile pentru lucrul cu UART (de fapt USART, dar acest lucru nu este important pentru noi acum):

UDR - Registrul de dateUART. La transmitere, datele care trebuie trimise sunt scrise pe acesta, iar la citire, datele primite sunt scrise pe acesta. Este simplu.

UCSRA - Registrul de control și stareUART . Să ne uităm la fragmentele acestui registru mai detaliat:

  • RXC (Primi Complet ) - steag de sfârșit de recepție a datelor. Setați la 1 când există date necitite și resetat la 0 când sunt primite date.
  • TXC (Transmite Complet ) - flag de sfârșit de transfer de date. Se resetează la 0 la finalizarea transferului de date și este setat la 1 dacă există date netransmise.
  • UDRE (Date Registru Gol ) - un steag care indică 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 de cadru)- flag de eroare a cadrului.
  • DOR (Date Depășire ) - flag de depășire a registrului de date.
  • PE (Eroare de paritate)- flag de eroare de paritate
  • U 2 X- un pic care iti permite sa dublezi viteza de transmisie. Când scrieți un 1 pe acest bit, prescalerul de ceas al modulului UART este redus la jumătate, permițând rata de transfer de date să se dubleze.
  • MPCM- modul de comunicare multiprocesor.

UCSRB - Registrul de control și stareUART .

  • RXCIE (RX Complet Întrerupe Permite ) - Un bit care activează sau dezactivează generarea unei întreruperi la finalizarea recepției. Când scrieți 1 pe acest bit, întreruperea la sfârșitul recepției este activată când scrieți 0, este dezactivată.
  • TXCIE (TX Complet Întrerupe Permite ) - La scrierea 1 pe acest bit, întreruperea la sfârșitul transferului de date este activată la scrierea 0, este dezactivată;
  • UDRIE (Date registru gol Întrerupe Permite ) - Un bit care activează sau dezactivează apariția unei întreruperi prin intermediul steagului UDRE.
  • RXEN (Receptor Permite ) - Scrierea 1 pe acest bit pornește receptorul UART al modulului, scrierea 0 îl oprește.
  • TXEN (Transmiţător Permite ) - Scrierea 1 pe acest bit pornește transmițătorul UART al modulului, scrierea 0 îl oprește.
  • UCSZ 2 (Caracter Dimensiune ) - Împerecheat cu biții UCSZ 1 și UCSZ 0, specifică numărul de biți care trebuie transmis, adică putem transmite nu numai octet cu octet, ci și cu 5,6,7,8,9 biți.
  • RXB 8 (Primi Date Pic 8) - 9 biți de date recepționate la transmiterea a 9 biți. Trebuie citit înainte de operațiunile pe registrul UDR.
  • TXB 8 (Transmite Date Pic 8) - 9 biți de date trimise la transmiterea a 9 biți. Trebuie să fie scris înainte ca alți biți să fie scrieți în UDR.

UCSR CU- Registrul de control și stareUART .


  • UCPOL - Acest bit vă permite să configurați ce margine va fi folosită pentru a schimba date în modul de transmisie sincronă. Când funcționează în modul de transmisie asincronă, acest bit trebuie setat la 0.

Registrele UBRRL și UBRRH sunt responsabile pentru setarea vitezei transceiver-ului. Trebuie reținut că atunci când lucrați cu registrul UBRRH, bitul URSEL trebuie să fie egal cu 0.

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

UBRR = (F osc /(B*16))-1

Unde,

F osc - frecvența de funcționare a microcontrolerului (Hz).

B - viteza de operare UART necesară (Bit/sec).

De exemplu, trebuie să configurați viteza de transmisie la 9600 bps când microcontrolerul rulează la 8 MHz (8000000 Hz).

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

Rotunjim la un număr întreg, adică la 51. Și scriem acest număr în registrele UBRRL:UBRRH.

Lecția s-a dovedit a fi destul de extinsă, așa că vom lua în considerare implementarea practică a protocolului UART pe microcontrolere AVR în lecția următoare.

Orice copiere, reproducere, citare a materialului, sau părți ale acestuia, este permisă numai cu acordul scris al administrației MKPROG .RU. Copierea, citarea, reproducerea ilegală se pedepsește prin lege!

UART - Universal Asynchronous Receiver-Transmitter, sau în rusă Universal Asynchronous Receiver-Transmitter - UART. Folosit pentru a organiza comunicarea între un computer și diverse dispozitive digitale din electronice. Interfața convertește datele transmise în cod serial, astfel încât să poată fi transmise pe o linie digitală către un alt dispozitiv electronic. Există încă o descriere directă a protocolului UART, dar descrierea sa indirectă poate fi văzută în standardele pentru binecunoscutele protocoale fizice RS-232, RS-422, RS-423, RS-485

Care este diferența dintre aceste interfețe. Într-o interfață serială, datele sunt trimise pe un fir secvențial, unul după altul, în timp ce o interfață „paralelă” are o magistrală formată din mai multe fire, de-a lungul cărora părți ale mesajului sunt transmise în paralel.

Principalul avantaj al transmisiei paralele este că un grup de biți este trimis odată. În plus, transmisia de date în paralel este utilizată și în interiorul microcontrolerului, deci nu este necesară nicio conversie suplimentară. Dar există și dezavantaje semnificative. Principalul este că biții de-a lungul firelor pot să nu ajungă în paralel și sunt necesare soluții de circuite suplimentare pentru a primi mesaje precise. Acest lucru limitează viteza de transfer.

În transmisia în serie, biții de date transmise trebuie mai întâi convertiți în cod paralel, ceea ce necesită timp suplimentar. Dar, pe de altă parte, nu este nevoie să sincronizați secvența de biți de-a lungul fiecărui fir individual, ceea ce în acest caz crește posibilitățile de transfer de date de mare viteză.

Transceiver-ul Universal Asynchronous - UART a fost folosit de la începutul anilor 60 ai secolului trecut și de atunci a suferit o modernizare serioasă. Chiar și în secolul 21, protocoalele seriale UART reprezintă încă una dintre principalele metode de schimb de biți între diferite dispozitive digitale pe distanțe scurte.

UART este baza a ceea ce a fost folosit atât de larg în trecut. În forma sa cea mai simplă, interfața UART constă din trei fire: transmisie, recepție și masă.


Un dezavantaj semnificativ al unui transceiver asincron universal constă în faptul că nu este posibil să se determine care dintre dispozitivele digitale este master și care este slave (master / slave). De obicei, aceasta determină cine proiectează circuitul poate numi acest fir ca TX și poate specifica funcționarea dispozitivului, conform figurii de mai jos:


În acest caz, microcontrolerul primește și transmite date. Și poți face așa:


În conformitate cu această schemă, microcontrolerul transmite întotdeauna (TX) la receptor (RX) și invers. Care dintre cele două scheme este încă corectă? Se pare că ambele, totul depinde doar de producătorul cipului și de dispozitivul digital finit.

Atenție, TX conectat la TX și RX-RX va arde cipul în majoritatea cazurilor, deci acesta este un bun exemplu de citire a documentației înainte de a conecta cipurile prin UART, deoarece există mai multe metode de conectare.

Dacă receptorul și transmițătorul sunt pe aceeași placă de circuit imprimat, atunci nivelul semnalului în timpul recepției și transmisiei este aproape egal cu nivelul tensiunii de alimentare a microcontrolerului. Să presupunem că nivelul logic – „1” va fi transmis cu un potențial de 3,3 V și zero, cu un potențial de cel mult 0,5 volți. Odată cu transmiterea semnalului pe distanțe mari, problemele încep să apară sub formă de distorsiuni ale semnalului și cresc, apar erori de transmisie, până la o oprire completă.

Pentru a elimina astfel de probleme, se adaugă buffer-uri suplimentare la liniile de transmisie și recepție, care amplifică semnalul. După aceasta, ele pot fi transmise pe zeci de metri fără pierderi de informații. Dar în curent continuu, o tensiune de -3V..-15V este utilizată pentru a transmite nivelul unei unități logice, iar pentru „0” - +3V la +15V.


În loc de sincronizare, UART utilizează un așa-numit „bit de pornire” care pregătește circuitul digital pentru transmiterea mesajelor. După bitul de pornire există date, iar apoi un „bit de oprire” este trimis la linie, indicând finalizarea transferului de informații. Împreună există 10 biți: primul este bitul de pornire, 8 biți de date și ultimul bit de oprire, vezi oscilograma transferului de date prin protocolul de interfață UART în figura de mai jos.


Biții sunt transmiși la o anumită rată de transmisie, care este măsurată în biți pe secundă sau, baud. Deci 9600 baud este echivalent cu 9600 bps. Și din moment ce transmitem 10 biți pe mesaj, asta înseamnă că la această viteză putem transmite 960 de mesaje într-o secundă.

Valoarea ratei de transmisie nu este transmisă împreună cu mesajul, atunci ratele de transmisie egale trebuie să fie presetate în receptor și transmițător. Interfața UART permite desincronizarea cronometrului cu până la 5%. În acest interval, poate primi și primi date de informații corecte.

Putem spune cu 100% încredere că fiecare microcontroler modern include o interfață serială universală - UART. Știind cum să lucrați cu acest port, puteți coordona funcționarea dispozitivelor electronice vechi și moderne, puteți transmite sau primi date către diverse dispozitive electronice.

În microcontrolerele moderne, în loc de o interfață UART, acestea folosesc un standard USART pe deplin compatibil (emițător-receptor universal asincron/sincron).

USART este un UART mai flexibil, cu funcții suplimentare. În USART, puteți ajusta lungimea cuvântului la intervale mai mari (de la 5 la 9) decât în ​​UART (de la 8 la 9). În USART, transmisia de date atât sincronă, cât și asincronă este posibilă (în UART se realizează numai asincron). Pentru transmisia sincronă, pe lângă două linii - date și putere, este utilizată o magistrală suplimentară (XCK) cu semnal de ceas. Cu această configurare, USART se intersectează deja cu interfața SPI și poate fi folosit ca „master” în interfața SPI.

Să luăm în considerare cazul clasic când interfața este asincronă (adică cu o linie de sincronizare lipsă).

Transmiterea datelor în interfața UART are loc câte un bit la intervale de timp egale. Acest interval este stabilit de viteza UART și pentru un anumit tip de conexiune este indicat în baud, care corespunde numărului de biți pe secundă. În electronică există o gamă general acceptată de viteze tipice: 300; 600; 1200; 2400; 4800; 9600; 19200; 38400; 57600; 115200; 230400;460800; 921600 baud;

Viteza (S, baud) și durata biților (T, secunde) sunt legate de formula binecunoscută

Octeții de date sunt trimiși în pachete (primul bit vine înainte de octetul de date și al doilea bit vine după, numărul de biți este opțional)


Pentru a primi și transmite date în interfața UART, sunt utilizate doar două linii de date și masă:

magistrala de transmitere a datelor (TXD sau TX);
linie de recepție de date (RXD sau RX);
pământ (GND).

Nivelurile logice unu și zero sunt similare cu nivelurile tipice TTL:

jurnal. "1" - +5 volți;
jurnal. "0" 0 Volți.

Un tip de interfață UART - RS-485

Rețelele construite pe baza interfețelor RS-485 și RS-422 sunt transceiver conectate folosind cabluri torsadate. RS-485 se bazează pe principiul transmisiei diferenţiale (echilibrate) a datelor. Baza sa se bazează pe transmiterea unui semnal pe două fire. Mai mult, primul fir (A) al interfeței poartă semnalul original, iar al doilea fir poartă copia sa inversă. Cu cuvinte simple, dacă A este „1”, atunci B este „0” și invers, adică există întotdeauna o diferență de potențial între cele două fire ale unei perechi răsucite: la nivelul „1” este pozitiv, la „ zero” este negativ.

Interfața RS-232 (standard EIA) a fost creată pentru a interfața un computer personal (PC) și un echipament de transmisie a datelor (modem) folosind modul de transmisie sincron-asincron pe distanțe de până la câțiva metri. Standardul oferă două tipuri de conectori DB25 și DB9 cu 8 semnale. Datele sunt transmise prin intermediul a 2 circuite independente RxD, transceiver de interfață TxD (UART1, UART2 în Fig. 1.14) și permit utilizarea modului de schimb duplex, restul de 6 semnale sunt destinate controlului schimbului de date. În implementările moderne ale interfeței, aceste semnale nu sunt utilizate; Algoritmii de control aplicați, în loc să genereze semnale de control, transmit mesaje de control împreună cu datele de bază prin circuitele de semnal RxD, TxD.

Orez. 1.14. Interfata RS232

Pentru funcțiile de gestionare și control al datelor, puteți utiliza algoritmi și instrumente ale protocoalelor standard ale stratului de legătură. Acești algoritmi de comandă și control sunt implementați ca o extensie a interfeței UART folosind formatul său standard de mesaj, de obicei pe un singur octet. Inițializarea cu selecția parametrilor și a modurilor trebuie efectuată înainte de a începe lucrul, interfața nu conține niciun mijloc de inițializare automată.

În prezent, interfața este utilizată ca facilitate de nivel fizic în interfețe punct la punct cu rate scăzute de transfer de date de 2,4 – 115,2 kbit/s. Cel mai des folosit este modul asincron cu un format de mesaj separat: bit de pornire – 5-8 biți de date – bit de oprire (cadru UART). Biții de pornire și oprire marchează începutul și sfârșitul unui mesaj și permit sincronizarea transceiver-urilor și controlul lungimii mesajului; bitul de pornire este un semnal logic zero pentru 1 ciclu de ceas, iar bitul de oprire este un semnal logic.

Modul duplex de transmisie a datelor presupune funcționarea independentă a receptorului și emițătorului interfeței. Prin urmare, ele conțin circuite de control independente și registre de date. De obicei, scrierea unui octet de date în registrul transmițătorului începe procedura de transmitere a cadrului UART, iar finalizarea recepționării unui cadru UART generează un semnal că octetul de date este gata pentru a fi citit din registrul receptorului.

Datorită algoritmilor de control simpli, versatilității și posibilității de schimb de date duplex, interfața UART este utilizată pe scară largă ca interfață de comunicație serială standard între diferite echipamente de automatizare. De exemplu, microcontrolerele AVR, PIC și multe alte familii conțin implementare hardware încorporată a interfeței UART, prin care se pot conecta dispozitive externe care oferă suport pentru alte interfețe moderne LVDS, 1-W, IrDA, RS-485, CAN, etc.

Unele caracteristici și caracteristici ale microcircuitelor UART de la această companie sunt prezentate în Fig. 1.16.

Dacă hardware-ul utilizat nu conține o interfață UART încorporată, puteți utiliza cipuri UART speciale. Aceste microcircuite (Fig. 1.15) convertesc formatul de date paralel în serie, asigură stocarea datelor în dispozitive de stocare tampon, generează semnalele necesare de control al interfeței, întrerup solicitările de procesare a datelor transmise de interfață etc. EXAR este un lider recunoscut în domeniu

producția de cipuri UART.

Orez. 1.15. Transfer de date folosind cipuri UART

Orez. 1.16. Clasificarea cipurilor EXAR UART

Cel mai simplu UART pe 8 biți este cipul ST16C450 (Fig. 1.17).

Orez. 1.17. Schema bloc ST16C450

Acest dispozitiv este pe deplin compatibil cu standardul industrial 16450 și are următoarele caracteristici:

Control separat al recepției și transmisiei;

Viteza de transmisie controlată de software (de la 50 bps la 1,5 Mbps);

Semnale de control modem (CTS, RTS, DSR, DTR, RI și CD);

Lungimea programabilă a caracterelor transmise (5, 6, 7 și 8 biți);

Generarea și detectarea biților de paritate;

Consum redus de curent – ​​1,2 mA.

Pe lângă UART-urile tradiționale cu o magistrală paralelă de 8 biți, EXAR produce UART-uri pe 32 de biți pentru lucrul cu magistrala PCA. Bufferele interne FIFO sunt proiectate pentru a descărca nucleul procesorului și pentru a reduce numărul de întreruperi pentru întreținerea UART. De exemplu, un cip UART XR16C85x cu un FIFO de 128 de octeți poate stoca o întreagă pagină de date, mărind timpul de transfer fără a întrerupe procesorul.

S-a remarcat anterior că interfața RS-232 prevede utilizarea a două tipuri de conectori: DB9 și DB25. Atribuirea contactelor conectorului este dată în tabel. 1.2.

Tabelul 1.2

Contact nr.

Contact nr.

Scop

Detector de semnal de linie (purtător).

Primirea datelor

Transfer de date

Pregătirea terminalului

Pământ de semnal

Pregătirea datelor

Cerere de transfer

Gata de transfer

Indicator de apel

Destul de des, semnalele de interfață sunt generate cu niveluri logice standard (0-5 V), iar conform protocolului RS-232, nivelurile de tensiune sunt ±12 V. Transceiver-uri pentru conversia nivelurilor fizice ale semnalelor de interfață UART, numite drivere de port COM, sunt produse de mulți producători de circuite integrate. Microcircuitele diferă în ceea ce privește numărul de receptoare și emițătoare, tensiunile de alimentare, consumul de energie, viteza maximă de transmisie, precum și prezența condensatoarelor încorporate și alți parametri.

Liderii în producția de microcircuite în acest domeniu sunt Maxim și Analog Devices. Lista de microcircuite driver/receptoare de linie RS-232 fabricate de Maxim constă din 150 de articole, un fragment din listă este dat în tabel. 1.3. O listă similară pentru dispozitivele analogice este dată în tabel. 1.4.

În aplicațiile standard, interfața RS-232 este utilizată pentru a conecta două dispozitive. Unul dintre aceste dispozitive este un transmițător, iar celălalt este un receptor. În acest sens, semnalele liniei de comunicație RS-232 sunt generate și procesate diferit de receptor și transmițător.

Viteza (kbit/s)

Modul de economisire a energiei

stare RxD

Condensatoare

Tensiune de alimentare (V)

Consum de curent (mA)

Viteza (kbit/s)

Modul de economisire a energiei

stare RxD

Condensatoare

Tensiune de alimentare (V)

Consum de curent (mA)

Dispozitivul emițător (de exemplu, un computer) dintr-un sistem de transmisie de date este de obicei numit echipament terminal de date sau DTE (Echipament terminal de date), iar receptorul (de exemplu, un modem) este numit dispozitiv de echipament de comunicație de date sau DCE (Data). Echipamente de comunicare). Direcția de transmisie a semnalului între DTE și DCE este prezentată în tabel. 1.5.

După cum se vede din tabel. 1.5, fiecare semnal este scos pentru un dispozitiv și intrare pentru altul. De exemplu, pentru un dispozitiv DTE, semnalul de date de transmisie TD este o ieșire, iar pentru un dispozitiv DCE, semnalul TD este o intrare. Dispozitivul DCE generează semnalul DCD (dacă este un modem, atunci detectează prezența unui semnal purtător în linia telefonică), iar dispozitivul DTE primește acest semnal etc.

dispozitiv DTE

Direcția de transmisie

dispozitiv DCE

- * ¦¦

În unele cazuri, se pune sarcina de a asigura funcționarea interfeței RS-232 între două dispozitive de același tip, de exemplu, este necesar să se furnizeze o conexiune DTE-DTE (computer-to-computer). Conexiunile dintre conectori în acest caz sunt determinate de programele de comunicare utilizate de calculatoare. Într-o configurație minimă, cablul care conectează cele două dispozitive trebuie să conțină trei fire: unul pentru combinarea masei semnalului SG, al doilea și al treilea pentru transmiterea semnalelor TD și RD (Fig. 1.18), iar conexiunea încrucișată a semnalelor trebuie să fie efectuate. Un astfel de cablu, de exemplu, poate asigura o conexiune între două computere folosind programul Hyper Terminal încorporat în Windows.

Dacă computerul „presupune” că funcționează cu un modem, atunci, în acest caz, puteți utiliza un cablu de modem nul (Fig. 1.19). În această figură, numerele indică contactele conectorului DB25M, iar linia întreruptă indică firul „împământare de protecție” - GND.

Orez. 1.18. Opțiune RS-232 cu trei fire

Orez. 1.19. Conexiuni null modem pentru cabluri RS-232

Alegerea opțiunii de conectare este determinată de condițiile de generare a semnalelor de control și de testare ale dispozitivelor DTE. Trebuie remarcat faptul că opțiunea de cablu „a” este cea mai populară și ar trebui utilizată în cazurile în care nu există suficiente informații despre caracteristicile de implementare ale interfețelor dispozitivelor conectate. Opțiunea de cablu „g” vă permite să „convingeți” computerul că dispozitivul DTE extern este întotdeauna gata să primească și să transmită semnale.

Orez. 1.23. Circuit de alimentare pentru dispozitivul I/O de la portul COM