PIC seriovy prenos
Seriál - PIC16F84 - 25 - Sériový přenos
19. 02. 08 - 21:53. Napsal Jiří Chytil. Přečteno 10702x. 46 komentářů
Touto sérií kapitol se pomalu dostávám k závěru této stručné publikace zabývající se mikrořadiči PIC16F84A. Tuto kapitolu jsme se rozhodl zařadit proto, že sériový přenos poskytuje spoustu výhod a hlavně velice jednoduché propojení s počítačem a umět komunikovat s počítačem je v dnešní době velice důležité. Sériové přenosy rozeznáváme dva základní a to je synchronní a asynchronní.
U synchronního přenosu nám situaci usnadňují synchronizační pulzy. Ty obvodu na přijímací straně říkají kdy má a kdy nemá data číst.
U asynchronního přenosu je situace jiná zde nejsou žádné synchronizační pulzy. Přístroje proto musí být ?dohodnuty? na určité rychlosti komunikace. Jako synchronizační impulz zde sloučí takzvaný ?start bit?. Ten je vyslán obvodem, který data posílá (pulz se posílá po stejném vodiči, po kterém budou proudit data). Tento pulz má domluvenou délku. Přijímací obvod zaregistruje změnu na vstupu a připraví se na příjem dat, počká než skončí doba start bitu a čte první bit. Potom počká určitou dobu (délku trvání jednoho bitu) a čte další hodnotu, tak si zapíše všechny hodnoty a přenos je ukončen stop bitem, který má také dánu určitou nutnou délku. Dalším signálem, který se u sériových přenosů používá, je signál DSR. Ten informuje vysílač o tom, že přijímač je připraven přijmout data. A dále signál CTS, který informuje vysílač o tom, že data byla přijata.
Synchronní sériový přenos
Synchronní sériový přenos je tedy řízen synchronizačními hodinovými pulzy a navíc jsou na začátku každého vysílaného slova vyslány synchronizační pulzy. Synchronního přenosu se využívá například při programování mikrořadičů PIC. Využívají se zde dvě linky. První linka je linka datová a druhá linka je linka hodinová. Někdy může být přidána linka, pomocí které se ověřuje správnost dat. Synchronním přenosem se nebudu příliš zabývat.
Jen okrajově bez programu. Tohoto přenosu se dá využít pro řízení libovolného počtu (tolik zase ne) sedmi segmentových displejů. A to pouze po třech vodičích. Jeden z vodičů slouží pro krátkodobé strobování registrů po nahrávání nových dat jeden je datový a další je hodinový. Použijeme totiž sériové osmibitové registry a bude jich za sebou tolik kolik bude 7seg displejů. Během nahrávání dat do registrů se na výstupech nic neděje a až budou příslušné bity nastaveny nebo vynulovány strobujeme registry a nahrané hodnoty se naráz objeví na výstupech. Jako posuvné registry jsou využity obvody 74LS164 nebo 4094.
Asynchronní sériový přenos
Asynchronní přenos je mnohem zajímavější. Probíhá bez hodinového signálu a doba trvání jednotlivých částí signálu je dána přenosovou rychlostí. Obě zařízení musejí mít nastavenu stejnou přenosovou rychlost. Vysílaný signál, jak jsem se již výše zmínil, začíná synchronizačním impulzem, ten je tvořen přechodem z H na L. Pokud bychom brali v úvahu rozhraní RS232, potom by šlo o změnu z -12 na +12V. Doba trvání je rovna 1/přenosová rychlost. Ta se udává v baudech (bity za sekundu). Po začátku start bitu, který je stejně dlouhý jako datové bity počkáme asi 1,5 doby délky jeho trvání tak, aby jsme se dostali poloviny délky trvání prvního datového bitu, a otestujeme jeho hodnotu. Potom se posuneme od další čas 1/přenosová rychlost a testujeme další bit. Až takto otestujeme všech 8 bitů (pokud jich 8 posíláme), zkontrolujeme stop bit, jestli vypadá tak, jak vypadat má a jestli je dost dlouhý (podle nastavení jedna, jedna půl nebo dvě délky datového impulzu). A můžeme čekat na další impulz.
Přenosové rychlosti se pohybují od 300bd až do 38400bd po dvojnásobcích. Můžeme posílat až 8 bitů. Menší hodnoty jsou zde pro kompatibilitu se staršími stroji. Dále zde můžeme ověřovat paritu a tak dále.
Stop bit je vlastně vysílán po celou dobu, co vysílač nevysílá žádná data. A jeho minimální délku nastavujeme na jednou nebo dvakrát délku běžného datového bitu. Maximální délka trvání není omezena.
Seriál - PIC16F84 - 26 - Sériový přenos II.
10. 10. 08 - 11:20. Napsal Jiří Chytil. Přečteno 9804x. Žádné komentáře
Sériový přenost dat z PC do MCU přes RS232 (Com port)
Sériový přenos z počítače do mikrořadiče v našem případě zprostředkovává jediný vodič (když nepočítám zem) a to je linka TXD (datový výstup sériového portu z PC). Není používán časový signál a přenos je tedy asynchronní.
INCLUDE "P16F84A.INC" LIST P=16F84A, R=DEC __CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ;- Proměnné ---------------------------------------------------- c1 EQU h'20' ;proměnné pro cykly c2 EQU h'21' c3 EQU h'22' pocet EQU h'23' ;pocet datových bitů ;- Nastavení v/v ----------------------------------------------- BSF STATUS,RP0 ;přesun do banky 1 MOVLW b'00000001' ;nastavení v/v MOVWF TRISA MOVLW b'00000000' MOVWF TRISB BCF STATUS,RP0 ;přesun zpět do banky 0 ;- Vlastní program --------------------------------------------- zacatek BTFSC PORTA,0 ;čekání na startbit tlačítka GOTO get ;na RA0 musí být log0 GOTO zacatek ;aby se přešlo na get ;- doesílání dat --------------------------------------------- get CALL prodleva CALL prodlevs MOVLW 8 MOVWF pocet CLRF PORTB next BTFSS PORTA,0 BSF STATUS,C BTFSC PORTA,0 BCF STATUS,C RRF PORTB,1 CALL prodleva DECFSZ pocet,1 GOTO next ;- čekání na stop bit --------------------------------------------- konec BTFSS PORTA,0 GOTO zacatek GOTO konec ;- podprogram prodlevy čekání --------------------------------------------- ;- podprogram prodlevy --------------------------------------------- prodleva MOVLW 137 ;zpoždění: doba jednoho MOVWF c3 ;datového cyklu waitd DECFSZ c3,1 GOTO waitd RETURN prodlevs MOVLW 62 ;zpoždění: doba půl MOVWF c3 ;datového cyklu waitE DECFSZ c3,1 GOTO waitE RETURN END ;konec programu
Řízení probíhá z jednoduchého řídícího programu, který využívá komponenty RSCOM.dll. Ten je napsán v jazyce Visual Basic a jeho kód zabírá jen několik řádků kódu:
Private Sub Command1_Click() SENDBYTE Val(Text1.Text) End Sub Private Sub Form_Load() OPENCOM "COM2,1200,N,8,2" End Sub Private Sub Form_Unload(Cancel As Integer) CLOSECOM End Sub
Je zde tedy vysíláno 8 bitů přenosovou rychlostí 1200bd. Není zde jakákoliv kontrolována parita a stop bit je nastaven na délku 2 dob 1/přenosová rychlost. Pracujeme s portem COM2. Číselná data zapsaná ve objektu text1.text se nám v binární hodnotě zobrazí na výstupu PORTB. Tohoto lze bez jakéhokoliv problému využít například pro sériové řízení inteligentních zobrazovačů.