ATMega 8 - Seltsame Probleme mit UART

OP #2632038
Lesenswert?

Hallo,

ich bin da auf ein Problem gestoßen, welches ich mir nicht erklären 
kann.

Ich konnte das Problem einkreisen und kann es auch umgehen, nur weiß ich 
nicht, warum ich das Problem habe.
(vermutlich sowieso ein Programmierfehler)

Im Anhang sind 2 Dateien.

Im main.c befindet sich ein extra Testprogramm, wo der Fehler auftritt.

Und zwar stimmt die Baudrate des UART nicht.
Wenn ich die UCSRx Register vor den UBRRx Registern beschreibe, habe ich 
meine Baudrate von 9600; wenn ich sie erst nach den UBRRx Registern 
beschreibe,(wie im Datenblatt angegeben,) habe ich laut Oszi ca. 300 
Baud.
Das Terminalprogramm zeigt dann bei 300 baud die Zeichen leicht 
verstümmelt an, sind also nicht ganz genau 300 baud.
-> siehe Kommentar im Quelltext

Ich hatte auch schon statt der Rechnung, die entsprechenden Werte per 
Zuweisung in die UBRRx Register geschrieben, aber auch dort habe ich den 
gleichen Fehler.

noch ein paar Infos:

Linux, avr-gcc 4.3.5, makefile hängt an

low Fuse: 0x1F
High Fuse:0xD0
Bootloader wird noch nicht benutzt



Sieht hier jemand mehr als ich ?

Jogibär
Angehängte Dateien:
Persönliche Seite #2632094
Lesenswert?

g457 schrieb:
> da fehlt noch ein _BV(URSEL)

Jöpp. Beim Beschreiben von UCSRC muss das höchstwertige Bit (URSEL) 
gesetzt sein. Wenn das Bit nicht gesetzt wird, beschreibst du statt 
dessen das UBRRH Register.

Ein Blick ins Datenblatt hätte dir die Augen geöffnet:
1
Bit 7 – URSEL: Register Select
2

3
This bit selects between accessing the UCSRC or the UBRRH Register.
4
It is read as one when reading UCSRC. The URSEL must be one when
5
writing the UCSRC.
OP #2632137
Lesenswert?

Hallo,

oh je, da habe ich aber wirklich gepennt !!

Stimmt, mit URSEL funktioniert es auch andersrum.
Da habe ich wohl an der falschen Stelle gesucht, da ja die andere 
Version
funktioniert hat.


Bit 7 – URSEL: Register Select

This bit selects between accessing the UCSRC or the UBRRH Register.
It is read as one when reading UCSRC. The URSEL must be one when
writing the UCSRC.

Das habe ich anscheinend mit voller Absicht überlesen.

Danke noch mal an alle für die Tips.
Aber schon komisch, das es andersrum funktioniert hat.

Jogibär

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