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
Servus, Nicolas schrieb: > ich weiß das es dazu jede Menge Beiträge gibt, aber ich finde den Fehler > einfach nicht ich kann nur schwer deinen Code lesen. Bitte mehr kommentieren! zB Beispiel: ; USARTE0 - PE3 (TXD0) as output Leider bin ich kein Assembler-Spezialist aber ich empfehle dir mal auf diese Seit http://ax-hpage.de/xplain.html zu schauen. - Atxmegas in Assembler - gut beschrieben - Beispielcode (USART und Vieles mehr) weiter viel Spaß wünscht XMEGA
Hallo, danke für den Tipp, XMEGA - da kann ich sicher auch was abschauen. Den Fehler hab ich gefunden: Anstelle von lds temp, 'A' muss es ldi temp, 'A' heißen. Dann sendet man nämlich auch das 'A' und nicht was auch immer an der Speicheradresse 'A' steht. Arg!!! Viele Grüße Nicolas
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.