Hey allemaal,

IK krijg het niet voor elkaar om de USART van een mega8 aan de gang te krijgen. Denk dat het een fout met initalizeren is maar ik kan het niet vinden.



.device	ATmega8
.include "m8def.inc"

                              
.def		var		= r16			;Werkregister
.def		var2		= r17			;2e Werkregister
.def		rec_buffer	= r18
		

.CSEG
.ORG		$0000			;Begin van het programma
		rjmp	main		;Spring naar hoofdprogramma


init_port:
		ldi	var,	0xFE
		out	DDRD, 	var

		ldi	var,	0xFF
		out	DDRB, 	var
		ldi 	var,	0x00
		out 	portB,	var
		ret


USART_Init:
		; Set baud rate
		ldi	var, 	0x00
		ldi	var2,	0x19
		out 	UBRRH, 	var
		out 	UBRRL, 	var2
		; Set frame format: 8data, 1stop bit
		ldi 	var, 	(1<<URSEL)|(3<<UCSZ0)
		out 	UCSRC,	var
		; Enable Receiver 
		ldi 	var, 	(1<<RXEN)
		out 	UCSRB,	var
		ret	


USART_Receive:
		; Wait for data to be received
		sbis 	UCSRA, 	RXC
		rjmp 	USART_Receive
		; Get and return received data from buffer
		in 	rec_buffer, UDR
		out	PORTB,	rec_buffer
	
		ret


main:		
		ldi 	var,	high(RAMEND) ; set stack		
		out 	SPH, 	var		
		ldi 	var, 	low(RAMEND)		
		out 	SPL, 	var

		rcall	init_port	
		rcall	USART_Init


loop:	
		call USART_Receive

		rjmp loop

Dit is de ASM-code waarin ik het probleem heb uitgefilterd. het is dus de bedoeling dat ik via de USART een byte stuur en dat dat als binaire code op poortB word weergegeven. De instellingen die ik gebruik zijn 9600kbs geen pariteit, een stop-bit, 4Mhz

Als ik nu een byte stuur via m'n terminal dan word er af en toe 1 bit(BIT0) hoog maar meestal zijn ze allemaal laag. als ik de baudrate van m'n terminal op 2400 zet dan worden de eerst 6 bits van de verzonden byte goed weer gegeven maar de laatse 2 niet.

Wie kan me helpen??
Sytse

Jij krijgt nog een email van me, maar ik ben nogal busy dus duurt ff.

Oki, d8 dat je het misschien TE druk had met je inkoop acties ed

heb je je CKSEL fuses wel ingesteld op external Xtal?
Standaard wordt de avr verscheept met cksel =0001 (interne RC-osc)
Als deze niet juist staat, klopt je UBRR niet meer

[Bericht gewijzigd door sven op ]

Op 9 april 2003 18:18:14 schreef sven:
heb je je CKSEL fuses wel ingesteld op external Xtal?
Standaard wordt de avr verscheept met cksel =0001 (interne RC-osc)
Als deze niet juist staat, klopt je UBRR niet meer

Ja je heb gelijk, die stond verkeerd. Ik dacht dat als je dat ingesteld had dat ie altijd zo bleef staan, niet dus. Nu werkt alles. En dat die laatse twee bits niet weergegeven worden komt omdat PB6 en PB7 door het kristal worden gebruikt.Is trouwens wel jammer dat je op de mega8 geen volle 8 bits poort overhoud als je de USART gebruikt.

Bedankt nu kan ik weer een stuk verder
Sytse

Ps. Bastiaan die mail mag je wel laten zitten :)

Op 10 april 2003 09:57:08 schreef sytse:
[...]
Ps. Bastiaan die mail mag je wel laten zitten :)

Ok, fijn dat het nu wel werkt. ;)