Both sides previous revisionPrevious revisionNext revision | Previous revision |
et:examples:communication:rs232 [2010/02/08 12:29] – mikk.leini | et:examples:communication:rs232 [2020/07/20 09:00] (current) – external edit 127.0.0.1 |
---|
====== RS-232 ====== | ====== RS-232 ====== |
| |
//Vajalikud teadmised: [HW] [[et:hardware:homelab:controller]], [AVR] [[et:avr:usart]], [LIB] [[et:software:homelab:library:usart]], [LIB] [[et:software:homelab:library:module:lcd_alphanumeric]]// | //Vajalikud teadmised: [HW] [[et:hardware:homelab:controller]], [AVR] [[et:avr:usart]], [LIB] [[et:software:homelab:library:usart]], \\ [LIB] [[et:software:homelab:library:module:lcd_alphanumeric]]// |
| |
===== Teooria ===== | ===== Teooria ===== |
| |
[{{ :examples:communication:comm_rs232_cable.jpg?220|RS-232 kaabel. Vasakpoolne pistik on "isane", parempoolne "emane"}}] | [{{ :examples:communication:comm_rs232_cable.jpg?220|RS-232 kaabel. Vasakpoolne pistik on "isa-tüüpi", parempoolne "ema-tüüpi"}}] |
| |
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. | 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. |
RS-232 liidest kasutatakse peamiselt koos UART nime kandva riistvaralise andmesidemooduliga, millel on protokoll standardiseeritud, kuid mis jällegi ei määra ära pistikuid jms. Seega RS-232 täiendab UART-i. 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. | RS-232 liidest kasutatakse peamiselt koos UART nime kandva riistvaralise andmesidemooduliga, millel on protokoll standardiseeritud, kuid mis jällegi ei määra ära pistikuid jms. Seega RS-232 täiendab UART-i. 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. |
| |
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. Andmed võivad kahel liinil samaaegselt liikuda ehk tegu on täisdupleks-siiniga. | 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. |
| |
[{{ :examples:communication:comm_uart_frame.png?319|UART kaader, kus S on startbitt, 0-7 andmebitid, P paarsuse bitt (olemasolul) ja T stoppbitt (või 2)}}] | [{{ :examples:communication:comm_uart_frame.png?319|UART kaader, kus S on startbitt, 0-7 andmebitid, P paarsuse bitt (olemasolul) ja T stoppbitt (või 2)}}] |
| |
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. Paaruse 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. | 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. | 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. |
| |
Lisainformatsioonina võiks teada, et RS-232 standard sisaldab peale andmesignaalide (RX, TX) veel andmevoo-kontrolli viike DTR, DCD, DSR, RI, RTS ja CTS, mida kasutatakse seadmetevahelise suhtluse juhtimiseks. Näiteks võib seade nende kaudu teada anda, kas ta on valmis andmeid vastu võtma või mitte. Kuna RS-232 liidese originaalne eesmärk oli ühendada arvuteid modemiga, siis mõned signaalid on (pigem olid) kasutusel telefoniliini seisundi näitamiseks. | Lisainformatsioonina võiks teada, et RS-232 standard sisaldab peale andmesignaalide (RX, TX) veel andmevoo-kontrolli viike DTR, DCD, DSR, RI, RTS ja CTS, mida kasutatakse seadmetevahelise suhtluse juhtimiseks. Näiteks võib seade nende kaudu teada anda, kas ta on valmis andmeid vastu võtma või mitte. Kuna RS-232 liidese originaaleesmärk oli ühendada arvuteid modemiga, siis mõned signaalid on (pigem olid) kasutusel telefoniliini seisundi näitamiseks. |
| |
===== Praktika ===== | ===== Praktika ===== |
<code c> | <code c> |
// | // |
// Kodulabori kontrollerimooduli arvutiga RS-232 kaudu liidestamine. | // Kodulabori Kontrollerimooduli arvutiga RS-232 kaudu liidestamine. |
// Näide kasutab digitaalset sisend-väljundmoodulit koos LCD ekraaniga. | // Näide kasutab Digitaalset sisend-väljundmoodulit koos LCD ekraaniga. |
// Arvuti terminalis sisestatud tekst kuvatakse LCD-l. | // Arvuti terminalis sisestatud tekst kuvatakse LCD-l. |
// | // |
#include <homelab/usart.h> | #include <homelab/usart.h> |
#include <homelab/module/lcd_alpha.h> | #include <homelab/module/lcd_gfx.h> |
| |
// | // |
| |
// LCD ekraani seadistamine | // LCD ekraani seadistamine |
lcd_alpha_init(LCD_ALPHA_DISP_ON_BLINK); | lcd_gfx_init(); |
| |
// Ekraanil tervituse ütlemine | // Ekraanil tervituse ütlemine |
lcd_alpha_puts("Ootan teadet"); | lcd_gfx_write_string("Ootan teadet"); |
| |
// Kursori teise rea algusesse viimine | // Kursori teise rea algusesse viimine |
lcd_alpha_gotoxy(0, row); | lcd_gfx_goto_char_xy(0, row); |
| |
// Arvutile tere ütlemine | // Arvutile tere ütlemine |
usart_send_text(port, "Tere, kirjuta midagi!\r\n"); | usart_send_string(port, "Tere, kirjuta midagi!\r\n"); |
| |
// Lõputu tsükkel | // Lõputu tsükkel |
// Jadaliidesest märgi lugemine | // Jadaliidesest märgi lugemine |
if (usart_try_read_char(port, &c)) | if (usart_try_read_char(port, &c)) |
{ | { |
// Kas tegu on reavahetuse märgiga? | // Kas tegu on reavahetuse märgiga? |
if (c == '\r') | if (c == '\r') |
| |
// Rea tühjendamine eelmisest teatest | // Rea tühjendamine eelmisest teatest |
lcd_alpha_clr_line(row); | lcd_gfx_clear_line(row); |
} | } |
else | else |
{ | { |
// Märgi otse ekraanile väljastamine | // Märgi otse ekraanile väljastamine |
lcd_alpha_putc(c); | lcd_gfx_write_char(c); |
} | } |
} | } |
} | } |
} | } |
| |
</code> | </code> |
| |
| [[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. |