Zbernice‎ > ‎

UART

Univerzálne asynchrónne sériové rozhranie sa používa na komunikáciu medzi Arduinom a PC alebo inými zariadeniami. Komunikuje pomocou dvoch pinov RX a TX a v počítači ho vidíme po nainštalovaní IDE Arduina ako COM port. To je zabezpečené pomocou virtuálneho portu, ktorý je emulovaný cez USB pomocou pomocného obvodu na doske Arduina. Je to potrebné, pretože nie je možné priamo prepojiť PC a Arduino.
A nie je to možné ani v prípade, že je v počítači ešte reálne prítomný sériový port. Je to spôsobené rozdielmi medzi napäťovými úrovňami, ktoré oba systémy používajú. Arduino používa úrovne 0 a +5V, zatiaľ čo pravé sériové porty používajú +-12V. Nás to ale nemusí nejako výrazne trápiť, pretože cez USB nám Arduino dovoľuje komunikovať tak, ako keby reálne prepojené boli oba systémy.
Komunikácia oboch systémov je potom veľmi jednoduchá, pretože v Arduine stačí pridať iba pár riadkov.
Serial.begin(9600);
int buttonState = digitalRead(pushButton);
Serial.println(buttonState);
V IDE Arduina potom stačí vyvolať Tools/Serial monitor, nastaviť presne tú istú rýchlosť a komunikácia sa môže začať. Nie je to nič komplikované a príkladov na komunikáciu oboma smermi je na Internete veľa. Dobre je ešte si preštudovať stránku http://arduino.cc/en/reference/serial, kde sú uvedené ešte špeciálne prípady pre viaceré verzie Arduina.

Emulácia

Takto by sme mali vybavenú hardvérovú stránku komunikácie. Existuje ale aj softvérová možnosť, pri ktorej sa využije knižnica SoftwareSerial. Je štandartnou súčasťou Arduina a používa sa prakticky identicky.
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX, TX
mySerial.begin(4800);
mySerial.println("Hello, world?");
Opäť nič zložité, len si treba dať pozor na niektoré piny, na ktorých to nemusí fungovať. Podrobnosti sú na stránke http://arduino.cc/en/Reference/softwareSerial a viac sa tejto knižnici budem venovať pri komunikácii pre ATtiny85. Treba si ešte zapamätať, že v IDE v. 1.5.X táto knižnica nie je.

Arduino Uno

Toto Arduino má jednu UART zbernicu. Príklad komunikácie je v programe serial01uno.ino.

Arduino Mega 2560

Toto Arduino ma štyri UART zbernice, preto môže naraz komunikovať s viacerými zariadeniami. Príklad komunikácie je v programe serial02mega.ino.

Arduino Due

Netestoval som ho zatiaľ, ale malo by mať rovnaké zapojenie ako Arduino Mega 2560, takže štyri UART zbernice, akurát že používa 3,3V. Okrem toho by mala existovať SerialUSB, napojená priamo na chip Sam3X.

Komunikácia medzi dvomi Arduinami

Treba prepojiť TX z prvého na RX na druhom, ak chceme posielať údaje z prvého Arduina. Treba prepojiť RX z prvého na TX na druhom, ak chceme posielať údaje z druhého Arduina. Ak niektorý smer nepotrebujeme používať, nie je potrebné prepojiť príslušné piny.

Arduino Mega 2560 ako proxy

Pretože máme k dispozícii štyri zbernice, je jednoduché cez základnú zbernicu komunikovať s počítačom a cez zvyšné s druhým Arduinom. Zapojenie ako proxy funguje tak, že čaká na prečítanie riadku z jedného vstupu Serial1 a celý tento získaný riadok pošle do počítača. Z počítača možno riadiť správanie proxy:
  • Znak 'l' - Vypisuje do samostatného riadku počet prečítaných znakov.
  • Znak 'm' - Vypisuje aktuálne milisekundy pred každým riadkom.
  • Znak 'h' - Vypisuje v hexadecimálnom tvare obsah prijatého riadku.
Príklad komunikácie je v programe serial03megaproxy.ino. Ak pripojíte Arduino UNO s programom serial01uno.ino, môžete sledovať jeho komunikáciu.

ATtiny85 cez proxy

ATtiny85 nemá žiadnu UART zbernicu, ale je schopné použiť knižnicu SoftwareSerial. Pomocou nej vieme posielať výstup cez proxy priamo do počítača. Podmienkou použitia je prepnúť mikrokontrolér aspoň na 8 MHz.
Ako sa to používa v praxi? Popíšem tu napríklad môj vývoj stmievača LED svetiel:
  • Arduino Mega 2560 mám pripojené k jednému portu a mám na ňom nainštalovaný program serial03megaproxy.ino.
  • Mám spustený program na komunikáciu po sériovom porte. Stačí aj ten, čo je v IDE Arduina. Ten zobrazuje výstupy.
  • USBasp mám pripojený k inému portu. Pomocou neho programujem mikrokontrolér.
  • K USBasp mám pripojenú vývojovú dosku, na ktorej ladím.
  • Z vývojovej dosky mám prepojený jeden TX pin, ovládaný knižnicou SoftwareSerial do TX1 na Arduino Mega 2560.
  • V programe používam podmienený preklad, ktorý komunikuje cez UART iba počas ladenia. Vo finálnej verzii programu nič z toho nie je.
Príklad komunikácie je v programe serial04tiny85.ino. Ak ho pripojíte ku Arduino Mega 2560 na vstup Serial1, môžete sledovať jeho komunikáciu.
ċ
serial01uno.ino
(1k)
Robo Ulbricht,
11. 10. 2014, 1:50
ċ
serial02mega.ino
(1k)
Robo Ulbricht,
11. 10. 2014, 1:50
ċ
serial03megaproxy.ino
(2k)
Robo Ulbricht,
11. 10. 2014, 1:50
ċ
serial04tiny85.ino
(1k)
Robo Ulbricht,
11. 10. 2014, 1:50
Comments