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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren