Obvody rozhraní USART (RS232)
Základní technický popis
Standard definuje asynchronní sériovou komunikaci pro přenos dat. Pořadí přenosu datových bitů je od nejméně významného bitu (LSB) po bit nejvýznamnější (MSB). Počet datových bitů je volitelný, obvykle se používá 8 bitů, lze se také setkat se 7 nebo 9 bity. Logický stav „0“/„1“ přenášených dat je reprezentován pomocí dvou možných úrovní napětí, které jsou bipolární a dle zařízení mohou nabývat hodnot ±5 V, ±10 V, ±12 V nebo ±15 V. Nejčastěji se používá varianta při které logické hodnotě 1 odpovídá napětí −12 V a logické hodnotě 0 pak +12 V. Základní tři vodiče rozhraní (příjem RxD, vysílání TxD a společná zem GND) jsou doplněny ještě dalšími vodiči sloužícími k řízení přenosu (vstupy DCD, DSR, CTS, RI, výstupy DTR, RTS). Ty mohou a nemusí být používány (zapojeny), nebo mohou být použity pro napájení elektronických obvodů v zařízení, jako je například počítačová myš. Výstupní elektronika je vybavena ochranou proti zkratu, kdy po překročení proudu 20 mA proud již dále neroste.
Asynchronní komunikace
I když komunikující zařízení znají rychlost, jakou se data přenášejí, musí přijímač začít přijímat ve správný okamžik, tedy musí proběhnout synchronizace. V případě synchronní komunikace souběžně s datovým vodičem existuje i synchronizační vodič, na kterém vysílač oznamuje přijímači „teď jsem poslal data“, viz LPT a signál STROBE. Naopak u asynchronní komunikace se synchronizační vodič nepoužívá, pouze vysílač pošle nějaká definovaná data po datovém vodiči, po jejichž přijetí se přijímač zasynchronizuje. V případě RS232 každé sekvenci datových bitů předchází jeden start bit, kterým se logická hodnota na lince přepne (původně v klidovém stavu) do opačného stavu. Po datových bitech následuje paritní bit a za ním jeden nebo více stop bitů, během kterých je linka opět v klidovém stavu. Je tak možné pro komunikaci použít méně vodičů na úkor určitého snížení rychlosti způsobeného synchronizací. K podobné synchronizaci dochází i u Ethernetu, kde na začátku každého rámce vyšle vysílač několik bajtů, ve kterých se střídají bity 0 a 1.
Obr. 1: Průběh signálu při přenosu znaku „K“ (ASCII kód 75, binárně 01001011) bez parity a s jedním stopbitem
Popis obvodu USART mikrořadiče AVR
Obvod USART mikrořadiů AVR používá jiné napěťové úrovně než výše popsané rozhrnní RS232 U mikrořadičů AVR se pro obvod USART používají napěťové úrovně stejné jako u logiky TTL. Proto se musí zařadit mezi rozhranní RS232 a obvod USART mikrořadiče vhodný převodník napěťových úrovní ( např. s IO MAX232).
Základní vlastnosti obvodu USART (Univerzální synchronní a asynchronní příjímač a vysílač):
- Možnost výběru mezi synchronním a asynchronním režimem;
- Plně duplxní funkce činnosti, sériová sběrnice můýe současně příjímat i vysílat;
- Variabilní generátor pro stanovení přenosové rychlosti, tento má velmi jemné nastavení;
- Podpora různé šířky přenášených datových bitů, lze vybrat 5, 6, 7, 8, a 9 bitový datový přenos;
- Lze konfigurovat v přenosovém protokolu nastavení jednoho nebo dvou stop bitů;
- Obsahuje obvody pro zjišťování přenosových chyb, když vysílač i přijímač je vybaven obvody pro kontrolu parity;
- Obvod přijímače obsahuje obvod pro detekci nekorektního startbitu a obvody pro filtraci zákmitů datových bitů;
- Obvod USART disponuje třemi nezávislými zdroji přerušení, jsou to přerušení při ukončení odvysílání znaku, vyprázdnění vysílacího registru a ukončení příjmu znaku;
- Obvod USART lze použít pro multiprocesorovou komunikaci;
- V asynchronním režimu lze přenosová rychlost sériového rozhranní zdvojnásobit.
Dále si popíšeme činnost obvodu USART podle blokového funkčního zapojení.
Obr. 2: Obvodové schéma obvodu rozhranní USART mikrořadiče AVR
Popis funkce dle obrázku vnitřního zapojení obvodu USART:
Obvod USART může pracovat jak v režimu asynchronním, tak i v synchronním. Pro synchronní režim je vývod pouzdra řadiče XCK požíván pro přenos hodinových synchronizačních impulzů na sběrnici. Obvod USART je kompletně řízený pomocí tří I/O registrů mikrořadiče UCSRA, UCSRB a UCSRC. Přenosová rychlost sériového rozhranní se nastavuje v registrovém páru UBRRL a UBRRH. Základem obvodu USART jsou dva samostatné posuvné registry, když ve vysílači posuvný registr převádí pararelní data z registru UDR(transmit) na sériový přenos a současně nezávisle v přijímači je sériový datový přenos pusuvným registrem převáděn na data pararelní, která jsou zapisována do registru UDR(Receive). Přepínání mezi synchronním a asynchronním režimem je provedeno dvěma samostanými multiplexery. Dále jsou v obvodě obsaženy další kombinační a sekvenční obvody, které vkládají do datového přenosu paritní bity a stop bity, které jsou součástí komunikačního protokolu na sběrnici.
Popis konfiguračních a stavových registrů USART mikrořadičů AVR Atmega 16/32:
Tab. 1: Význam bitů stavového registru A - UCSRA
Popiis bitů registru UCSRA:
- RXC - tento bit se nastaví na jedničku při dokončení příjmu znaku ze sběrnice a jeho zápisu do registru UDRR;
- TXC - tento bit je nastavený na jedničku, pokud byl dokončen přenos znaku na sběrnici z registru UDRT;
- UDRE - tento bit je nastavený na jedničku, když UART je připraven pro vložení nového znaku pro přenos;
- FE - tento bit se nastaví na jedničku při detekci chyby komunikačního protokolu;
- DOR - tento bit se nastaví při ztátě dat, když dojdek přepisu nevyprázdněného datového registru posuvným registrem přijímače;
- PE - tento bit se nastaví na jedničku, pokud dojde při kontrole přenosu parity;
- U2X - tento bit nastavením jedničky umožňuje dvojnásobnou přenosovou rychlost;
- MPCM - tento bit nastavením jedničky umožňuje multiprocesorovou komunikaci.
Tab. 2: Význam bitů stavového registru B - UCSRB
Popis bitů registru B-UCSRB:
- RXCIE - nastavením tohoto bitu na jedničku povolíme přerušení při příjmu znaku ze zběrnice;
- TXCIE - nastavením tohoto bitu na jedničku povolíme přerušení při dokončení odvysílání znaku na sběrnici;
- UDRIE - nastavením tohoto bitu na jedničku povolíme přerušení při vypráznění UDR;
- RXEN - nastavením na jedničku povolíme přijímač USART;
- TXEN - nastavením na jedničku povolíme vysílač USART;
- UCSZ2 - společně s bity UCSZ0 a UCSZ1 z registru C-UCSRC nastavujeme počet sériově přenášených datových bitů;
- RXB8 - devátý bit přijmutého znaku;
- TXB8 - devátý bit vysílaného znaku.
Tab. 3: Význam bitů stavového registru C- UCSRC
Popis bitů stavového registru C-UCSRC:
- URSEL - nastavením logické jedničky povolujeme změnu v registru UCSRC;
- UMSEL - nastavením logické jedničky konfigurujeme synchronní režim;
- UPM1 , UPM0 - nastavení generátoru parity podle tabulky viiz. katalogový list;
- USBS - nastení stopbitu přenosu, 0 = 1 stopbit, 1 = 2 stop bity;
- UCSAZ1,UCSZ0 - nastavení počtu sériově přenášených bitů, viz. katalogový list;
- UCPOL - nastavení polarity hodinových impulzů pro synchronní přenos na výstupu XCK mikrořadiče.
Tab. 4: Význam bitů registrů UBRRL a UBRRH pro nastavení přenosové rychlosti
Popis bitů registrů UBRRl a UBRRH:
- URSEL - nastavením logické nuly povolujeme změnu v registru UBRRH;
- Bity 0 až 11 tvoří binární číslo pro nastavení děličky kmitočtu.
Výpočet obsahu registru UBRR pro přenosovou rychlost v Baudech:
f osc - kmitočet hodinového oscilátoru
BAUD - přenosová rychlost zadaná v Baudech
Poznámka: Vypočítanou hodnotu UBRR je nutné převést do binární soustavy a rozepsat do registrů UBRRH a UBRRL.