Both sides previous revisionPrevious revisionNext revision | Previous revision |
et:examples:communication:uart [2015/02/19 15:42] – raivo.sell | et:examples:communication:uart [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
---|
~~PB~~ | <pagebreak> |
====== Jadaliides UART ====== | ====== Jadaliides UART ====== |
| |
//Vajalikud teadmised: [HW] [[et:hardware:homelab:controller]], [HW] [[et:hardware:homelab:combo]], [AVR] [[et:avr:usart]], [LIB] [[et:software:homelab:library:usart]]// | //Vajalikud teadmised: |
| [HW] [[et:hardware:homelab:controller]], [HW] [[et:hardware:homelab:combo]], |
| [AVR] [[et:avr:usart]], |
| [LIB] [[et:software:homelab:library:usart]], \\ |
| [LIB] [[et:software:homelab:library:module:lcd_graphic]] // |
| |
===== Teooria ===== | ===== Teooria ===== |
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. | 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. |
| |
[{{ :examples:communication:comm_hyperterminal.png?250|HyperTerminal aken}}] | [{{ :et:examples:communication:rs232:usb-serial_tn.jpg?200|USB - RS-232 muundur}}] |
Arvutites kasutatakse UARTi RS-232 liideses. RS-232 on füüsilise andmesideliidese standard, mida kasutatakse binaarandmete edastamiseks. Standard on kasutusel peamiselt arvutite jadaportides, mida kutsutakse kõnekeeles ka „COM“ portideks. Tänapäeval on RS-232 suures osas asendunud USB liidesega, kuid oma lihtsuse tõttu kasutatakse hobirakendustes RS-232 edukalt edasi, eriti veel siis, kui on olemas USB - RS-232 muundurid. RS-232 standard määrab ära pistikud, elektrilised parameetrid ja signaalide tähenduse, kuid mitte protokolli. Kuna UART on enamasti üks perifeeriamoodul mikrokontrolleris, mille digitaalsed sisendid-väljundid ei vasta RS-232 elektrilistele parameetritele, siis omavahel viiakse need kokku spetsiaalsete nivoomuunduritega. Üks tuntumaid RS-232 ja TTL/CMOS vahelisi nivoomuundureid on näiteks MAX232. | 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. |
| |
===== Praktika ===== | ===== Praktika ===== |
| |
Kodulabori Kombo moodulil 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. | 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. | 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. |
lcd_gfx_write_string("Ootan teadet"); | lcd_gfx_write_string("Ootan teadet"); |
lcd_gfx_goto_char_xy(0, row); | lcd_gfx_goto_char_xy(0, row); |
| |
// Arvutile tere ütlemine | // Arvutile tere ütlemine |
usart_send_string(port, "Tere, kirjuta midagi!\r\n"); | usart_send_string(port, "Tere, kirjuta midagi!\r\n"); |
| |
// Lõputu tsükkel | // Lõputu tsükkel |
while (true) | while (1) |
{ | { |
// Jadaliidesest märgi lugemine | if (usart_try_read_char(port, &c)) // Jadaliidesest märgi lugemine |
if (usart_try_read_char(port, &c)) | |
{ | { |
// Kas tegu on reavahetuse märgiga? | if (c == '\r') // Kas tegu on reavahetuse märgiga? |
if (c == '\r') | |
{ | { |
// Rea vahetamine | // Rea vahetamine |
row = 1 - row; | row = 1 - row; |
| |
// Rea tühjendamine eelmisest teatest | // Rea tühjendamine eelmisest teatest |
lcd_gfx_clear_line(row); | lcd_gfx_clear_line(row); |