Choď na obsah Choď na menu
 

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í.

 
468x60.gifDoporučujeme virtuálního opertátora GoMobil.cz | Reklamní sdělení

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.

seriový přenos
Obrázek č. 1 - Asynchronní sériový přenos

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)

 
468x60.gifDoporučujeme virtuálního opertátora GoMobil.cz | Reklamní sdělení

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
Kód: Assembler pro PIC16F84A - Sériový přenos příjem

Ří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
Kód: Visual Basic 6.0 - Sériový přenos vysílání

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čů.