ATMega 8 - Seltsame Probleme mit UART

OP #2632038
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
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
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.