Jan Nemazal: Infraport

Z MAM wiki

Přejít na: navigace, hledání

[editovat] Samostatná práce - komunikace přes infraport

Použité zdroje: Datasheet ATMEGA168, Datasheet Agilent HSDL-3612, Application note AVR1303: Use and configuration of IR communication module


Zadání: Navrhněte libovolné "zábavné" úlohy pro předvedení možností periferií jednotlivých řad procesorů AVR s vzužitím externího hardware (vstupní zařízení, výkonové členy, atd.). Návrh doplňte základním programem, který periferie nakonfiguruje do požadovaného módu.

Rozšíření úlohy s klávesnicí a sedmisegmentovkou – optická komunikace

Číslo stisknuté na klávesnici se zobrazí na sousedově sedmisegmentovce, číslo stisknuté u souseda se zobrazí u nás. Všichni mají identické HW zapojení a skoro stejné SW řešení (asi by bylo vhodné, aby se jeden choval jako master, druhý jako slave) :-) Lze posílat hodnotu stisknutého čísla (jen 4 bity), nebo přímo znak na sedmisegmentovku (7, popř 8 bitů, jednodušší implementace do našeho programu)


Infraport:

Modul infraportu HSDL-3612-008 od Agilent Technologies. IrDA 1.0 porporuje rychlosti 9,6 kb/s až 115,2 Kbit/s komunikace na vzdálenost i větší než 1,5 m Vzhledem k odrazům infrazáření může funovat jen jako poloviční duplex.

Soubor:OBR2.jpg

Hardwarové nastavení modulu infraportu:

Soubor:OBR1.jpg Soubor:OBR3.jpgSoubor:infraschema.png

Komunikace z mikrokontroléru se realizuje pomocí „Universal Synchronous and Asynchronous serial Receiver and Transmitter“ – USART Kontroléry řady XMEGA mají modul IRCOM pro kódování/dekódování dat IrDA protokolem. V nižších řadách je nutnost čistě softwarového řešení. My však nepotřebujeme standardizovaný IrDA protokol :-)

Předpokládám využití známých mikrokontrolérů ATMEGA168, a proto veškerá nastavení jsou právě pro tento mikrokontrolér.

nastavení vektorů přerušení od USART

.ORG 0x0024	jmp odeslano 	;USART  Rx complete 	handler
.ORG 0x0024	jmp prijato	;USART  Tx complete 	handler
;.ORG 0x0024	jmp prazdno	;USART  register empty handler - nevyužíváme

HW inicializace USARTu. Přerušení povolit až po HW inicializaci!

USART_INIT:
;ldi R26, UBRR0H
;clr R27
;ldi R17, 0b00000000	
;st X, R17	
ldi R26, UBRR0L
clr R27
ldi R17, 0b00001000	;snížení baudové rychlosti na 3676 baud/s kvůli snížení chybovosti
st X, R17	
;ldi R26, UCSR0A
;clr R27
;ldi R17, 0b00000000	; Bez double speed modu, bez multiprocesorového modu
;st X, R17
ldi R26, UCSR0B
clr R27
ldi R17, 0b11010000	; enable RxC interrupt a TxC interrupt, disable UDRE interrupt, Rx enable, Tx disable, max 8bit slovo
st X, R17	
ldi R26, UCSR0C
clr R27
ldi R17, 0b00110110	; asynchronní provoz, lichá parita, 1 stop bit, 8bitové slovo
st X, R17	

Kostra hlavního programu:

; Main program start

Main: 
;Provést HW inicializaci všech potřebných periferií...
;nastavit potřebná přerušení a povolit je
;nastavit sleep mode, ze kterého se vždy probudí některým z interruptů

KEYPRESS: 
;sem vložit rutinu z dřívějších úloh, aby uložila do R19 osmibitový kód čísla odpovídající LEDkám rozsvěcovaným na sedmisegmentovce
jmp USART_Transmit


odeslano: 		;musím uvolnit kanál a začít poslouchat
ldi R26, UCSR0B
clr R27
ldi R17, 0b11010000	
st X, R17		;nastavujeme bit Rx enable - Povolujem příjem
reti

prijato:		;zobrazím přijatá data 
in r18,UDR0; 	Uložím přijatá data, která chci zobrazit na semisegmentovce
sbic FE0		;kontrola frame error
R18=0b01111001	;v případě chyby se na sedmisegmentovku vypíše „E“ (error)
sbic DOR0		;kontrola data overrun
R18=0b01111001	;v případě chyby se na sedmisegmentovku vypíše „E“ (error)
sbic UPE0		;kontrola parity error
R18=0b01111001	;v případě chyby se na sedmisegmentovku vypíše „E“ (error)
rcall VYPIS_7SEG
reti

VYPIS_7SEG:
;sem vložit rutinu , která pošle obsah R18 na sedmisegmentovku
ret



USART_Transmit:
sbis UCSR0A,UDRE0	;kontrola že UDRE je prázdný
rjmp USART_Transmit
out UDR0,r19		; Put  data (r19) into buffer, sends the data
ldi R26, UCSR0B
clr R27
ldi R17, 0b11001000	
st X, R17		;nastavujeme bit Tx enable, nulujeme Rx enable – spouštíme odesílání
ldi R17, 0b11000000	
st X, R17		; nulujeme Tx enable – po odeslání rámce se vysílání ukončí
reti

prázdno:
nop
reti

Osobní nástroje