mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XMega USART falsche Zeichen


Autor: Nicolas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: XMEGA (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Nicolas (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.