Forum: Mikrocontroller und Digitale Elektronik XMega USART falsche Zeichen


von Nicolas (Gast)


Lesenswert?

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

von XMEGA (Gast)


Lesenswert?

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

von Nicolas (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.