Komunikace po RS232

Komunikace po RS232

09. 11. 2006 | 01:00 - Ondřej Karas (durmitor) - 12333× přečteno

Tento díl je určen zejména začátečníkům, kteří s komunikací po sériové lince teprve začínají. Věnuje se nejen suché teorii, ale také praktické stránce problému, a přináží řešení hardware s převodníkem MAX232.

|Reklama

V čem je problém a na co je třeba MAX232?

V sekci download na webu http://k-programs.net je možné si stáhnou specifikaci RS232, kterou se stavy na sériové lince řídí, ale pro nezasvěcené tyto informace raději zopakuji.

Klidový stav je u Rozhraní RS232 reprezentován logickou 1, v tomto případě reprezentovanou záporným napětím. Log. 0 je naproti tomu reprezentována napětím kladným. V případě vysílače může napětí dosahovat min. −15 a max. +15 V, a to by obvody pracující s TTL úrovněmi spolehlivě zničilo.

Z tohoto důvodu je nutné použít obvod, který nám převede urovně z RS232 do úrovní TTL. Jedním z nich je i MAX232 (nebo např. ST232). Tento obvod je napájen 5 V a využívá nábojové pumpy pro tvorbu vyššího výstupního napětí.

Tento obvod vyrábí více výrobců, a tak není třeba zůstávat pouze u produktů firmy MAXIM. Např. SGH-THOMSON vyrábí ST232, který v závislosti na typu umožňuje využít menší hodnoty kondenzátorů, a tak i zmenšit i aplikaci, ve které je použit.

Vždy je nutné pečlivě si prostudovat dokumentaci k obvodům, které používáte. Přestože se výrobci snaží vyrábět pinově kompatibilní obvody, mnohdy se stává, že špatným nastudováním katalogového listu vzniknou zbytečné chyby.

Pokud to není nutné, nepoužívejte elektrolytických kondenzátorů, které mají na používané frekvenci poměrně vysoký sériový odpor, a zařízení se tak stává nespolehlivým. Doporučují se tantalové kondenzátory nebo keramické s hmotou X7R.

Kondenzátory umisťujte co nejblíže k vývodům obvodu.

Dobře, a teď k té praktické stránce

Tento díl má za úkol nejen plnit funkci vzdělávací, ale také čtenáři přinést námět, jak si vyrobit vlastní převodník s obvodem MAX232. Následující schéma ukazuje doporučené zapojení převodníku spolu se zdrojem.

Klikni pro zvětšení

Jak je dobře vidět, zapojení vychází z doporučeného zapojení výrobce. Funkci doplňují dvě diody pro indikaci stavu na linkách Rx, Tx. Tyto dvě diody doporučuji 2mA, aby neovlivňovaly funkci převodníku. Pakliže by bylo nutné z nějakého důvodu využít LED s větší spotřebou, je nutné pro ně přidat do zapojení spínací tranzistory. Například BC547, nebo obdobné.

Zapojení pak už jen doplňuje zdrojová část, jejíž funkci myslím nikomu nemusím vysvětlovat. Následují obrázky návrhu pložného spoje.

Dále je nutné si připravit konektor CANON9 a dostatečně dlouhý 3 žilový kabel, který na jednom konci připájíme k pinům 2, 3, 5 a na druhém k dutinkové liště se třemi pozicemi. Připomínám, že na konektoru je nutné mít pospojované piny 7, 8 a 1, 4, 6. Oživení přípravku je záležitostí jedné či dvou minut. Propojte TTL výstup s TTL vstupem, např. jumperem a ve vhodném terminálu odesílejte znaky. Pracuje-li přípravek, pak budete to samé přijímat. Indikaci přenosu obstarávají diody D2, D3.

V tuto chvíli máme postavený převodník RS232 ↔ TTL. Některá PC ale už Port s rozhrním RS232 nevlastní, a proto by se hodilo zapojení pro USB port. To si ukážeme příště spolu s ukázkovým programem pro AVR.

Pro nedočkavé přeci jen uvádím zdrojový kód:

Ukázat zdrojový kódZkopírovat do schránkyTisk

  1. ;uart.asm  

  2. ;  

  3. ;test program for Duplex UART  

  4.   

  5.         .include        "m16def.inc"  

  6.   

  7.         ser             r16                     ;port B all outputs  

  8.         out             ddrb,r16  

  9.     ldi             r16,RAMEND          ;initialise stack pointer  

  10.     out             spl,r16  

  11.     sbi             ucr,txen                ;enable UART transmitter  

  12.     sbi             ucr,rxen                ;enable UART receiver  

  13.     ldi             r16,5000000/(9600*16)-1 ;set baud rate  

  14.     out             ubrr,r16  

  15.   

  16.   

  17. loop:  

  18.         rcall           serin  

  19.     rcall           serout  

  20.     rjmp            loop                    ;do forever  

  21.   

  22.   

  23. ;serial output routine - output byte in r16 to UART  

  24.   

  25. serout:  

  26.     out             udr,r16             ;load UART data register  

  27. serout1:  

  28.     sbis            usr,udre            ;if UART data register empty bit is clear  

  29.     rjmp            serout1             ;       loop back  

  30.                         ;else return  

  31.     ret  

  32.   

  33. ;serial input routine - input byte from UART to r16  

  34.   

  35. serin:  

  36.         sbis            usr,rxc             ;if UART Receive Complete bit is clear  

  37.         rjmp            serin               ;       loop back  

  38.         in              r16,udr             ;else get received byte in r16  

  39.         ret                                 ;and return  

;uart.asm

;

;test program for Duplex UART

.include "m16def.inc"

ser r16 ;port B all outputs

out ddrb,r16

ldi r16,RAMEND ;initialise stack pointer

out spl,r16

sbi ucr,txen ;enable UART transmitter

sbi ucr,rxen ;enable UART receiver

ldi r16,5000000/(9600*16)-1 ;set baud rate

out ubrr,r16

loop:

rcall serin

rcall serout

rjmp loop ;do forever

;serial output routine - output byte in r16 to UART

serout:

out udr,r16 ;load UART data register

serout1:

sbis usr,udre ;if UART data register empty bit is clear

rjmp serout1 ; loop back

;else return

ret

;serial input routine - input byte from UART to r16

serin:

sbis usr,rxc ;if UART Receive Complete bit is clear

rjmp serin ; loop back

in r16,udr ;else get received byte in r16

ret ;and return

Program pochází z tohoto zdroje: www.geocities.com/leon_heller/uart.html


Wyszukiwarka