Forum: Mikrocontroller und Digitale Elektronik UART spricht merkwürdig ...


von joerg_seemann (Gast)


Angehängte Dateien:

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?

von Stefan (Gast)


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.

von Obelix (Gast)


Lesenswert?

Stimmt die Baud Rate überein ???

von thomas (Gast)


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

von joerg_seemann (Gast)


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.


von joerg_seemann (Gast)


Lesenswert?

trotzdem geht´s nich...

von Falk (Gast)


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


von Jörg X. (Gast)


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 :(

von joerg_seemann (Gast)


Lesenswert?

Ich bedanke mich und bitte um nachsicht, bin erst seit knapp 14 tagen 
mit AVR
und ASM beschäfftigt...

nen perfekten tag wünsch ich...

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.