Gast
#1818978
Guten Abend,
ich weiß das es dazu jede Menge Beiträge gibt, aber ich finde den Fehler
einfach nicht. Vl siehts ja einer von Euch direkt.
Ich versuche mit einem möglichst einfachen Programm das USARTE0 auf dem
XMega256 zum laufen zu bringen. Hier die Initialisierung:
init_USART:
ldi temp, 0b00001000
sts PORTE_DIRSET, temp
sts PORTE_OUTSET, temp
lsr temp
sts PORTE_DIRCLR, temp
ldi temp, 0
sts USARTE0_CTRLA, temp
ldi temp, 0b00011000
sts USARTE0_CTRLB, temp
ldi temp, 0b00000011
sts USARTE0_CTRLC, temp
ldi temp, 0b11100101
sts USARTE0_BAUDCTRLA, temp
ldi temp, 0b10111100
sts USARTE0_BAUDCTRLB, temp
ret
In der ISR eines timers versuch ich dann alle paar hundert ms mit diesem
code
TD1_OVERFLOW:
lds temp, USARTE0_STATUS
sbrs temp, USART_DREIF_bp
rjmp TD1_OVERFLOW
lds temp, 'A'
sts USARTE0_DATA, temp
reti
ein Zeichen an den PC (hterm) zu senden. Das gnaze geht noch über einen
FT232 und einen ADUM1201. Wenn ich RXD und TXD direkt vor dem AVR (also
hinter Koppler und USB) verbinde, bekomme ich mit hterm alle gesendeten
Zeichen korrekt zurück - der Teil ist also wohl ok. Lasse ich den AVR
dann aber Senden wie oben beschrieben, bekomm ich die falschen Zeichen
im Terminal. Das Problem liegt vermutlich bei meinem Program (Baudrate?)
- ich seh aber nicht wo. Die Baudrate habe ich (unter anderem) mit
diesem: (http://prototalk.net/forums/showthread.php?t=188) tool
berechnet, im Fall oben 1200 Baud.
Der AVR läuft im Moment auf dem 2MHz RC_Oszillator, aber auch 16 oder 32
MHz aus dem 16MHz Quarz abgeleitet haben keine Besserung gebracht.
Vielen Dank für Eure Hilfe!
Nicolas