SK LABS Asinhrono po periferijama
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.
|
||||||||||
Najčitanije
Igre
Telefoni
Hardver
Softver
Nauka
Microsoft Majorana 1 Kvantna topologija Topološki kvantni računar otporan je na uticaj kosmičkog zračenja, ali i dalje mora da se ohladi skoro do apsolutne nule... AMD Ryzen 9 9950X3D Jedan, da svima vlada Ako vam je potreban najbrži procesor, i za igranje, i za ozbiljnije zadatke, Ryzen 9 9950X3D nema konkurenciju... Gigabyte GeForce RTX 5070 Ti Aero OC 16G i GeForce RTX 5070 Ti Gaming OC 16G I za kreativce, i za igrače Sasvim sposoban da se nosi sa 4K rezolucijom u svim igrama i pruži sasvim pristojne performanse, dok u 1440p apsolutno blista... Asus ROG Strix Scar 18 (G835LX) Fantastična zver i kako je kupiti (3) Laptop namenjen onima koji „ne žale pare” da imaju ono što je trenutno najbolje i najbrže... Deset najboljih Microsoft PowerToys alatki Najbolji od najboljih PowerToys Run je alatka kojoj treba da se okrenete ukoliko vam sistemska rutina za pretragu ne odgovara... Apple iPhone 16e Malo muzike za mnogo para Problem nije samo cena i slabiji grafički podsistem, već i trajanje baterije... Cemu 2.6 Wii U emulacija Cemu omogućava pokretanje i privođenje kraju oko 57 procenata igara „napisanih” za Wii U... .rs: nove usluge eUprave - novi propisi - najava 5G Mnogo eNoviteta U novom esDnevniku roditelji će dobijati notifikacije za ocene i izostanke... Trgovinski rat Istoka i Zapada Velika igra, nesagledive posledice Kao u igri „kukavice”, dve supersile kreću se velikom brzinom jedna prema drugoj, izazivajući drugu da prva skrene... South of Midnight Magična igra koja izgleda kao živa bajka, animirana u stilu filmskog serijala „Spiderverse”... |
||||||||||