This is an old revision of the document!
Vajalikud teadmised: [HW] Controller module, [AVR] USART, [LIB] Serial Interface, [LIB] Alphanumeric LCD
RS-232 is a standard of physical data interface, which is used for delivering binary data. The standard is used mainly in serial ports of computers, which are also called “COM” ports in everyday language. Nowadays is the RS-232 largely replaced by USB interface, but due to its simplicity it is still used very successfully in hobby applications, especially if there are USB – RS-232 converters. The RS-232 standard determines the plugs, electrical parameters and meanings of the signals but not the protocol.
The RS-232 interface is used mainly with UART hardware data transmission module which’s protocol is standardized, but it does not determine the plugs and other things. So the RS-232 enhances the UART. Since the UART is usually one module of periphery of the microcontroller, which’s digital input-output does not correspond to the electrical parameters of the RS-232, they are connected together with a special leveling-converter. One best known leveling-converters between RS-232 and TLL/CMOS is MAX232.
UART means universal asynchronous receiver/transmitter. USART is almost the same but with that difference that the data is sent with clock signal. The UART may be called also a serial interface. The serial interface is a data transferring mechanism, where each bit is transmitted one by one. For example, to transmit 1 bait, 8 bits are transmitted with certain interval. That means that on the serial interface line, which is one pin of the microcontroller, the value of voltage is changed after certain time once low and then high. Usually there are two devices connected to the serial interface. One is transmitting the information (by changing the value of the pin) and the other is receiving it (by registering the value of the pin). Transmitting pin is TX, and receiving pin is RX. The info is moving always to one direction on one line. For sending data to the other direction other line is used. If data is moved on two lines on the same time, it is called full duplex bus.
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.
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.
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 Kontrollerimooduli arvutiga RS-232 kaudu liidestamine. // Näide kasutab Digitaalset sisend-väljundmoodulit koos LCD ekraaniga. // Arvuti terminalis sisestatud tekst kuvatakse LCD-l. // #include <homelab/usart.h> #include <homelab/module/lcd_alpha.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 lcd_alpha_init(LCD_ALPHA_DISP_ON_BLINK); // Ekraanil tervituse ütlemine lcd_alpha_write_string("Ootan teadet"); // Kursori teise rea algusesse viimine lcd_alpha_goto_xy(0, row); // Arvutile tere ütlemine usart_send_string(port, "Tere, kirjuta midagi!\r\n"); // Lõputu tsükkel while (true) { // Jadaliidesest märgi lugemine if (usart_try_read_char(port, &c)) { // Kas tegu on reavahetuse märgiga? if (c == '\r') { // Rea vahetamine row = 1 - row; // Rea tühjendamine eelmisest teatest lcd_alpha_clear_line(row); } else { // Märgi otse ekraanile väljastamine lcd_alpha_write_char(c); } } } }
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.