SK LABS
Tipovi interfejsa i protokola (3): UART
Asinhrono po periferijama
D. PETROVIĆ
1. februar 2023.

Serijska komunikacija između dva mikrokontrolera, senzora i slično ili kao veza sa računarom može se ostvariti i preko UART interfejsa. Kada se kaže da se komunikacija između, recimo, Una i GPS modula odvija serijskim putem, najčešće se to i odnosi na UART. UART je skraćenica od universal asynchronous receiver-transmiter, što su, zapravo, hardverski uređaji ili strujna kola koja se koriste za međusobnu serijsku komunikaciju. Sve Arduino razvojne ploče koriste makar jedan serijski port, a neke ih imaju i više. UART nije protokol, već interfejs, fizički uređaj, hardver. Standard, naravno, nije vezan isključivo za Arduino, već govorimo o interfejsu dostupnom na samim mikrokontrolerima. Prebacivanje korisničkog programa na jedan Uno, u najčešćem broju slučajeva, odvija se preko nekog UART mosta. Kod originala je to ATmega16u2, dok se na klonovima najčešće sreće CH340x. Veza između, recimo, Atmega16u2 i ATmega328p na originalnom Unu odvija se preko UART serijskog interfejsa. Ovo je ujedno i razlog što se ne preporučuje povezivanje ikakvog senzora ili bilo čega drugog na UART pinove (obično D0/D1 za RX/TX), jer će doći do neuspešnog spuštanja korisničkog programa na mikrokontroler. Neki mikrokontroleri na Arduino pločama imaju ugrađen USB interfejs, poput Leonarda, te UART most nije neophodan, ali i dalje imaju dostupan UART interfejs na određenim pinovima. Za sada ćemo preskočiti spuštanje korisničkog programa preko UART-a, jer za to postoji više načina koji zahtevaju posebnu priču.

UART interfejs na Arduino kompatibilnim pločama radi po TTL naponskoj logici na pet ili 3,3 volta, pri čemu treba imati u vidu da, recimo, RS232 serijski port koristi +/- 12V, gde njegovo povezivanje sa Arduinom neminovno dovodi do uništenja ploče. Drugi UART interfejs je RS485, kao petovoltni sistem. Sam interfejs sastoji se iz dve osnovne linije: RX za primanje podataka (receive) i TX za predaju podataka (transmit). Između dva serijska uređaja potrebno je ove linije ukrstiti, tako da RX ide na TX i obrnuto. Razlog tome je razumljiv, linija sa uređaja koji šalje ide na liniju uređaja koji prima podatke. Podrazumeva se da im je GND zajednički i da oba uređaja imaju svoja napajanja, makar i nezavisna. UART interfejs predajnika uzima bajtove podataka, šalje ih kao nezavisne bitove na sekvencijalan način, gde ih UART interfejs prijemnika sastavlja u kompletne bajtove. Kao osnovni metod konverzije koristi se pomerač registra. UART vrši transmisiju asinhrono, što znači da ne postoji clock signal koji bi vršio sinhronizaciju. Umesto jednog takvog signala, UART dodaje start i stop bitove, te na taj način primalac „zna” kada da počne sa čitanjem bitova i kada da stane.

Kod ovog serijskog interfejsa razlikujemo tri vrste komunikacije: simplex kao jednosmernu komunikaciju, full-duplex kao potpunu, dvosmernu istovremenu komunikaciju , te half-duplex, gde uređaji čekaju na prekid transmisije jednog od njih. Za uspešnu komunikaciju potrebno je upariti nekoliko parametara, kao što je vrednost boda (baud), paritet bita, veličina podataka i slično. U Arduino okruženju, namenska ugrađena biblioteka brine se o skoro svim parametrima, te ostaje samo upariti vrednost boda transmisije kao brzine prenosa podataka. Bod se odnosi na brzinu prenosa koja može da se izrazi u bitovima po sekundi, a najčešće se koriste 9600 i 115200. Vrednost boda nije jedina bitna za uspešnost ostvarivanja komunikacije. Razlika u vrednosti boda može biti do deset posto, u suprotnom „slušalac” poruku neće „čuti”. Parity bit, koji UART, takođe sam, dodaje, dozvoljava proveru grešaka. Zatim, data frame je, zapravo, veličina samog podatka, a može se sastojati iz pet i osam bitova, pa čak i devet ako se ne koristi parity bit.

Osnovna mana UART interfejsa jeste u nedostatku podrške za povezivanje više uređaja na jednoj magistrali. Ukoliko je potrebno povezati više uređaja na ovaj način, potrebno je odabrati mikrokontroler ili Arduino ploču koja ima više dostupnih hardverskih UART interfejsa, kao što je, recimo, Mega. Ili se okrenuti softverskim rešenjima.

U Arduino sistemu nije potrebno dodavati bilo kakvu biblioteku - ona je već ugrađena i pokrećemo je sa Serial.begin(9600) gde vrednost boda može biti i druga, shodno potrebama. Nisu svi uređaji sposobni za veći broj dostupnih vrednosti boda. Slanje podataka počelo bi, recimo, sa Serial.println(„Hello World!”). U otvorenom serijskom terminalu pri odgovarajućoj vrednosti boda biće ispisana ova pozdravna poruka. Ako želimo, recimo, da šaljemo podatke sa jednog Una na drugi, dovoljno je napisati par linija kôda za obe ploče:

void setup(){

  Serial.begin(9600);

}

void loop(){

  if(Serial.available()){

    Serial.println(Serial.read());

  }

}

Ili, ako želimo da pošaljemo, recimo, logičko stanje HIGH sa jednog na drugi, tada bi master jedinica slala funkcijom write():

Serial.write("1");

U Arduino okruženju se serijski interfejs najčešće koristi za debagovanje, to jest, za ispisivanje vrednosti senzora ili određenih poruka. Na ovaj način se nakupi dosta „đubreta” koje u gotovom projektu nema svrhu, već samo bespotrebno troši resurse mikrokontrolera. Poželjno bi bilo da se nakon razvoja projekta oni obrišu ili da se sam ispis ovih poruka u startu inicijalizuje sa IFDEF, te na taj način liši nepotrebnog češljanja kôda, neretko i preko hiljadu redova dugog.

#define DEBUG 1

//

#ifdef DEBUG == 1

#define DEBUG_PRINT(x) Serial.print(x)

#define DEBUG_PRINTLN(x) Serial.println(x)

#else

#define DEBUG_PRINT(x)

#define DEBUG_PRINTLN(x)

#endif

Dalje se umesto Serial.println(„neka vrednost”) koristi DEBUG_PRINTLN(„neka vrednost”). Nakon razvoja projekta je dovoljno isključiti ga sa DEBUG 0. Gde god nađe u kôdu DEBUG_PRINT ili DEBUG_PRINTLN, kompajler će ih jednostavno zameniti sa praznim prostorom. Razlika ume da bude i te kako osetna u zauzeću memorije.

U situacijama kada je broj UART interfejsa nedovoljan ili je potreba da se jedini dostupni ne koristi za UART, na scenu stupa softverski UART koji se može koristiti preko SoftSerial biblioteke. Sintaksa je ista kao i kod hardverske, s tom razlikom što je potrebno prethodno pozvati se na objekat uz definisanje RX/TX pinova.

#include <SoftwareSerial.h>

SoftwareSerial SoftS(2,3),

SoftS.begin(9600);

SoftS.println();

S obzirom na to da se ne koristi hardverski UART, dolazimo i do određenih ograničenja. Za softverski serial se ne mogu koristiti svi pinovi. Zapravo, za TX može bilo koji digitalni, ali za RX to mora biti pin koji podržava interrupt. Najčešće se kod Una u ovu svrhu za RX/TX koriste D2/D3. Zatim, brzine su ograničene na 115200 boda (realno, do 57600), ne mogu se istovremeno slati i primati podaci, što se odnosi i na multiple portove i slično. Kao deo Arduino biblioteka, sva neophodna dokumentacija za funkcije može se naći na zvaničnim Arduino DOCS stranicama.

Postoje i „crne ovce” u Arduino svetu koje uz izvornu podršku za USB koriste SerialUSB za komunikaciju velikim brzinama. Ovo se odnosi na Arduino Due i ARM Cortex mikrokontrolere.

SerialUSB.begin(2000000);

while(!SerialUSB);

Toliko o UART interfejsu, a mi nastavljamo dalje u narednim brojevima.


PRETHODNI TEKST
SLEDEĆI TEKST
Najčitanije
Igre
Telefoni
Hardver
Softver
Nauka
Aktuelno štampano izdanje
JUN 2025
Doom: The Dark Ages
Doom iz mračnog doba drugačiji je od svih drugih Doomova, jer je Slayer koncipiran kao tenk sa štitom...
Clair Obscur: Expedition 33
Estetika Belle Époquea, gameplay u skladu sa kanonima JRPG-a, vrhunsko pripovedanje i ljubav prema igrama...
Computex 2025, Tajpej, Tajvan
AI NEXT
Ovaj, nekada ultra-PC-specifični sajam, odavno se proširio na srodne tehnologije, biznis rešenja i digitalne usluge, postavši varijanta azijskog C...
Gigabyte GeForce RTX 5070 Gaming OC 12G
Višak samopouzdanja
Kartica je sa hardverske strane vrlo kvalitetna, ali ništa ne može da nadomesti nedostatak snage „pod haubom”...
Asus ProArt P16 (H7606WP)
Pronalazak neverovatnog
Novi ProArt P16 donosi moderna rešenja, u dobro usaglašenom odnosu gabarita i performansi – alatka koju ćete sa ponosom nosati sa sobom...
Logitech ProX Superlight 2
Sve udvostručeno
Ovaj miš predstavlja jasnu indikaciju da najveći proizvođač ne želi da napusti nijedan segment tržišta...
Winhance 25.05
Popravka Prozora
U pitanju je alatka koja omogućava da se brzo rešite (većine) bloatwarea, ali i da obavite optimizaciju rada Windowsa...
TCL NXTPAPER 11 Plus
Momak za sve
Ovo bi bio najbolji tablet „za te pare” i da košta 100 evra više...
.rs: Beogradski prevoz na Yandexu • Srbija u SEPA • Loši primeri digitalizacije
Unapređeno e Zakazivanje
Beogradski prevoz na Yandexu • Srbija u SEPA • Loši primeri digitalizacije
Google Mariner, Google Astra i AI autonomni agenti
Uspon tihog softvera
Umesto kliktanja stručnog lica, softver će, već ove godine, u tihom, gotovo nečujnom načinu rada - završavati posao...
Fatal Fury: City of the Wolves
Fatal Fury je oduvek bio čudna cvećka u svetu borilačkih igara; takav je i ostao...
Arc Raiders
Novi extraction shooter iz pera autora dobrih delova franšize Battlefield (i potcenjenog The Finals)...
© 2025 Svet kompjutera. Sva prava zadrzana.
Novi broj - Arhiva - Forum - O nama