UART spricht merkwürdig ...

Gast #514625
Lesenswert?
• ▲
▼
hallo, hallo

juhu, habe die UART-kommunikation (einseitig TX) mit dem ATmega168 in 
.asm gebastelt. Erste Versuche mit nem Terminalprogramm ergaben:

Ursprungstext:   Joerg

draus geworden:  ...Mé+r¦... bzw. ...233 43 114 166 77...

Was ist da los?
Angehängte Dateien:
Gast #514630
Lesenswert?
• ▲
▼
Aus der Reihe "Passende Kommentare" ;-)
1
ldi temp, LOW(UBRRVAL)    ; Highbyte: 0x00    
2
sts UBRR0L, temp      ; im Register setzen  
3
ldi temp, HIGH(UBRRVAL)    ; Lowbyte: 0x2F    
4
sts UBRR0H, temp      ; im Register setzen

Ich habe nicht geprüft, ob das das Problem ist.
Gast #514633
Lesenswert?
• ▲
▼
Hallo Joerg,

Interessant wäre in diesem Zusammenhang zu wissen, was Du senden willst 
(Originalnachricht). Es scheint ja erstmal was zu passieren, das ist 
nicht schlecht.

Wie sendest Du die Daten an den PC? Mittels MAX232 oder ähnlichem?

MfG Thomas
Gast #514646
Lesenswert?
• ▲
▼
sende über max232 und hab grad mal mit dem oszi gemessen, dass die 
bitlänge 0,09868ms beträgt. Resultierende BAUD: 10134, also 
timingproblem.

habe ein 7.3728MHz Quarz und dieses auch in den fusebits eingestellt.

Gast #514663
Lesenswert?
• ▲
▼
@joerg_seemann

>sende über max232 und hab grad mal mit dem oszi gemessen, dass die
>bitlänge 0,09868ms beträgt. Resultierende BAUD: 10134, also
>timingproblem.

>habe ein 7.3728MHz Quarz und dieses auch in den fusebits eingestellt.
>trotzdem geht´s nich...

Waaaaas? Soooo ein toller Baudratenquarz und der UART geht trotzdem 
nicht? Kaum zu glauben!!!!

Ok, das musst jetzt raus, war nicht persönlich gemeint.

Aber wieso verwendest du immer STS um die Konfigurationsregister zu 
schreiben? Die Registernamen sind für die Verwendung von IN/OUT 
ausgelegt. Ausserdem ist der Befehl STS 2 Worte lang, OUT nur einen. Das 
da überhaupt was zuckt wundert mich sowieso.

MfG
Falk

Gast #514666
Lesenswert?
• ▲
▼
ich behaupte:
1
ldi temp, 0x03    ; Asynchron, Paritätsbit N, Datenlänge 8Bit, Stopbit 1      |
2
sts UCSR0C, temp
ist falsch
(ok, war unfair, ich hab im Datenblatt nachgeschaut, d.h. ich weiß, dass 
das falsch ist) -> du stellst auf 6 datenbits und UCPOL0 gesetzt
1
ldi temp, 1<<UCSZ1 | 1<<UCSZ0
2
...
geht wahrscheinlich

@Falk:
st(s) ld(s) sind bei den megax8ern nötig, die USART regs liegen 
außerhalb der 64 I/Os :(

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.