Vajalikud teadmised:
[HW] Kontrollermoodul, [HW] Kombomoodul,
[AVR] USART,
[LIB] Jadaliides,
[LIB] Graafiline LCD
UART on lahtitõlgituna “universaalne asünkroonne vastuvõtja/saatja” (inglise keeles universal asynchronous receiver/transmitter). USART on peaaegu sama asi, kuid selle erinevusega, et andmeid edastatakse koos taktsignaaliga. UART-i võib nimetada ka jadaliideseks. Jadaliides on andmete ülekandmise mehhanism, kus iga bitt edastatakse ükshaaval. Näiteks selleks, et edastada 1 bait, edastatakse kindla ajaintervalliga 8 bitti. Ehk siis füüsiliselt toimub jadaliidese liinil, mis on 1 mikrokontrolleri viik, kindla ajavahemiku järel selle viigu pingeväärtuse muutus kõrgeks või madalaks. Jadaliidesega on üldjuhul ühendatud 2 seadet, millest üks edastab infot (viigu väärtust muutes) ja teine võtab seda vastu (viigu väärtust registreerides). Edastava viigu lühend on TX, vastuvõtval RX. Info liigub ühel liinil alati ühes suunas. Andmete teistpidi saatmiseks kasutatakse teist liini. Kui andmeid liigutatakse kahel liinil samaaegselt on tegu täisdupleks-siiniga.
Andmete edastamine toimub UART liideses kaadri (inglise keeles frame) kaupa, milles on andmebitte olenevalt seadistusest 5 kuni 9. Enamlevinud andmehulk on siiski 8 bitti, ehk 1 bait. Peale andmebittide edastatakse kaadriga ka lisabitte, mille abil toimub andmete saabumise ja lõppemise hetke äratundmine vastuvõtja poolel. Esimest neist nimetatakse startbitiks, mis on alati 0, teist aga stoppbitiks (või bittideks), mis on alati 1. Enne stoppbitti võib tulla ka paarsuse bitt, mida kasutakse andmete korrektsuse kontrolliks. Paarsuse bitt näitab, kas andmebittide hulgas on paaris või paaritu arv ühtesid. See, kumba näitu see omab, sõltub UART liidese häälestusest. Paarsuse bitti tänapäeval enam üldjuhul ei kasutata ja selle saab häälestuses ka ära keelata. Nii nagu saab paarsuse bitti seadistada, saab ka andmebittide ja stoppbittide arvu.
Peale kaadri struktuuri on veel üks tähtis parameeter - see on boodikiirus (inglise keeles baud rate), millega määratakse edastatavate sümbolite arv ühes sekundis. Bood näitab nimelt sümbolite arvu. UART puhul on 1 bood aga 1 bitt ja seepärast kaadri juures bittidest saigi räägitud. Põhimõtteliselt võib andmete edastamiseks kasutada ükskõik millist boodikiirust, kuid on olemas hulk üldkasutavaid boodikiirusi, mida tasub kasutada. Näiteks: 9600 bps, 19200 bps, 38400 bps, 57600 bps, 115200 bps.
Peaaegu kõigil mikrokontrolleritel eksisteerib üks või enam UART liidest ehk perifeeriat. UART standard ei määra kindlaks signaalide pinget ja see sõltub mikrokontrolleri toitepingest, mis on tavaliselt kas 3,3 V või 5,0 V. 5,0 V toitepingel töötava mikrokontrolleri signaalid vastavad TTL/CMOS standardile. Kui UART protokolliga on vaja ühendada eraldiseisvaid või kaugelasuvaid seadmeid, siis kasutatakse füüsilist standardit nimega RS-232, milles on kasutusel pinged kuni -15 V ja +15 V ning milles on ära määratud ka pistiku tüüp, milleks on DB-9. RS-232 standard on kasutusel peamiselt arvutite jadaportides, mida kutsutakse kõnekeeles ka „COM“ portideks. Selleks, et arvutit mikrokontrolleriga ühendada kasutatakse nivoomuundurit mis teisendab TTL/CMOS signaalid RS-232 pingetele ja vastupidi. Tänapäeval on RS-232 suures osas asendunud USB liidesega, kuid oma lihtsuse tõttu kasutatakse hobirakendustes RS-232 edukalt edasi sedaenam, et on olemas USB - RS-232 muundurid. Üks RS-232 eelis USB ees on ka selle kümnetes kordades pikem leviulatus kaablis.
Kodulabori Kombomoodulil on välja toodud väline UART liides (ExtUART). Selleks, et antud port arvutiga ühendada on vaja kasutada TTL UART↔RS232 või TTL UART↔USB ülemineku kaablit.
Näiteprogrammi testimiseks on vaja mõnda terminal tüüpi tarkvara, nt HyperTerminal (Windows XP). Linux operatsiooniga arvutitel võib kasutada programmi minicom. Kui terminal on mikrokontrolleri tööle panemise ajal avatud, tekib ekraanile tervitussõnum. Aknas sisestatud tähed kuvatakse LCD ekraanil. Klahvi Enter vajutus muudab rida LCD ekraanil.
// Kodulabori UART liidese näidisprogramm // Arvutist või mõnest teisest seadmest saadetud tekst kuvatakse LCD ekraanil #include <homelab/usart.h> #include <homelab/module/lcd_gfx.h> // USART liidese määramine usart port = USART(0); // Põhiprogramm int main(void) { char c; unsigned char row = 1; // USART liidese seadistamine usart_init_async(port, USART_DATABITS_8, USART_STOPBITS_ONE, USART_PARITY_NONE, USART_BAUDRATE_ASYNC(9600)); // LCD ekraani seadistamine ja tervitusteksti kuvamine lcd_gfx_init(); lcd_gfx_write_string("Ootan teadet"); lcd_gfx_goto_char_xy(0, row); // Arvutile tere ütlemine usart_send_string(port, "Tere, kirjuta midagi!\r\n"); // Lõputu tsükkel while (1) { if (usart_try_read_char(port, &c)) // Jadaliidesest märgi lugemine { if (c == '\r') // Kas tegu on reavahetuse märgiga? { // Rea vahetamine row = 1 - row; // Rea tühjendamine eelmisest teatest lcd_gfx_clear_line(row); } else { // Märgi otse ekraanile väljastamine lcd_gfx_write_char(c); } } } }