Both sides previous revisionPrevious revisionNext revision | Previous revision |
et:examples:communication:uart [2014/02/03 12:14] – rellermaa | et:examples:communication:uart [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
---|
====== UART ====== | <pagebreak> |
| ====== Jadaliides UART ====== |
//Vajalikud teadmised: [HW] [[et:hardware:homelab:controller]], [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. |
| |
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. | [{{ :et:examples:communication:rs232:usb-serial_tn.jpg?200|USB - RS-232 muundur}}] |
| 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 Kontrollermooduli plaadil on RS-232 isa-tüüpi pesa. Selle kaudu saab kontrolleri arvutiga või teise kontrolleriga ühendada. Arvutiga ühendamiseks tuleb kasutada tavalist pööramata kaablit, mille üks pistik on ema-tüüpi, teine isa-tüüpi. Teise kontrolleriga ühendamiseks tuleb kasutada kaablit, kus RX ja TX ning vookontrolli signaalid on risti keeratud ja mõlemad pistikud on ema-tüüpi. Pööratud kaablit nimetatakse ka nullmodemi kaabliks. Järgnevalt on toodud UART jadaliidese kasutamise näiteprogramm. Programm saadab käivitades RS-232 liidese kaudu tervituse ja kuvab sõnumeid, mis saabuvad. Kasutatud on LCD ja USART teeke. | 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. |
| |
Kodulabori Kombomooduli plaadid 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. |
| |
<code c> | <code c> |
// | // Kodulabori UART liidese näidisprogramm |
// Kodulabori Kombomooduli arvutiga UART kaudu liidestamine. | // Arvutist või mõnest teisest seadmest saadetud tekst kuvatakse LCD ekraanil |
// Näide kasutab Digitaalset sisend-väljundmoodulit koos LCD ekraaniga. | |
// Arvuti terminalis sisestatud tekst kuvatakse LCD-l. | |
// | |
#include <homelab/usart.h> | #include <homelab/usart.h> |
#include <homelab/module/lcd_gfx.h> | #include <homelab/module/lcd_gfx.h> |
| |
// | |
// USART liidese määramine | // USART liidese määramine |
// | |
usart port = USART(0); | usart port = USART(0); |
| |
// | |
// Põhiprogramm | // Põhiprogramm |
// | |
int main(void) | int main(void) |
{ | { |
USART_BAUDRATE_ASYNC(9600)); | USART_BAUDRATE_ASYNC(9600)); |
| |
// LCD ekraani seadistamine | // LCD ekraani seadistamine ja tervitusteksti kuvamine |
lcd_gfx_init(); | lcd_gfx_init(); |
| |
// Ekraanil tervituse ütlemine | |
lcd_gfx_write_string("Ootan teadet"); | lcd_gfx_write_string("Ootan teadet"); |
| |
// Kursori teise rea algusesse viimine | |
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); |
} | } |
} | } |
| |
</code> | </code> |
| |
| /* |
[[et:examples:communication:rs232:alpha|Koodi näide teksti LCD-le (Kodulabor ver 3.x ja vanemad)]] | [[et:examples:communication:rs232:alpha|Koodi näide teksti LCD-le (Kodulabor ver 3.x ja vanemad)]] |
| */ |
[{{ :examples:communication:comm_hyperterminal.png?250|HyperTerminal aken}}] | |
| |
Windows XP operatsioonisüsteemiga on kaasas programm HyperTerminal. See avaneb //Start// menüüst //Accessories -> Communications -> HyperTerminal// valides. Ühenduse seadeteks valida 9600 bps, 1 start- ja 1 stoppbitt ilma paarsuse- ja vookontrollita. Kui HyperTerminal on avatud mikrokontrolleri tööle panemise ajal, tekib ekraanile tervitussõnum. Aknas sisestatud tähed kuvatakse aga alfabeetilise LCD ekraanil. Klahvi //Enter// vajutus muudab rida LCD ekraanil. | |