USART-Baudrate falsch

OP #995581
Hi,

hab hier ein komisches USART-Problem.
Habe jetzt ermittelt dass die Baudrate um den Faktor 16 höher ist als 
die laut Formel gültige (bei definierten 1200Baud empfange ich die 
Zeichen am PC bei 19200Baud richtig), d.h. UBR_VAL ist um den Faktor 16 
zu niedrig.
Dieser Faktor schreit geradezu nach einem Konfigurationsproblem, jedoch 
konnte ich im Datenblatt nichts auffälliges finden und die Formel ist 
laut Datenbaltt für den asynchronen Betrieb richtig.


Prozessor:  ATMEGA32
Oszillator: Quarz mit 16MHZ
FUSE-Bits: siehe Screenshot
Code:
...
  #define F_CPU 16000000UL
...
#define BAUD 1200UL
#define UBR_VAL ((F_CPU/(16*BAUD))-1)
...
UCSRB|= (1<<RXEN)|(1<<TXEN);
UCSRC|= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UBRRH = UBR_VAL >> 8;
UBRRL = UBR_VAL & 0xFF;


Kann jemand den Fahler entdecken oder mich mit nem Tritt zum richtigen 
Beitrag befördern?
Angehängte Dateien:
Persönliche Seite #995596
Also der erste Fehler, den ich erkenne, ist dass du die |= zu = 
umwandeln solltest. Mit UCSRC |= machste nämlich nen Fehler (du liest 
UBRRH ein und setzt dann zusätzlich in diesem Wert die drei Bits).

Hast du diese Fuse-Bit Ansicht auch erst "geladen"? Also nach dem öffnen 
nen "Read"-Access durchgeführt?

Den richtigen Quarz drin?

Das richtige include für den Prozessor benutzt? Ist im Makefile auch m32 
angegeben?
OP #995616
...|= zu = -> hab ich korrigiert

Fuse-Bits wurden neu geladen, Quarz stimmt schon 
(Funk-AVR-Evaluations-Board von Pollin).

Mit m32 meinst du wahrscheinlich "MCU=atmega32". m32 bewirkt afaik dass 
das ganze in 32bit kompiliert wird.
Gast #995637
>UBR_VAL ist um den Faktor 16 zu niedrig.

Da könnte man doch glatt vermuten das F_CPU irgendwo auf 1MHz
umdefiniert wird. Irgend welche Warnings beim compilieren?
OP #995689
Da hab ich wohl den Wald vor lauter Bäumen nicht mehr gesehen.
Ich mach ein #ifndef F_CPU (was ich hier nicht erwähnt habe), binde 
zuvor aber schon die delay.h ein, welche den Wert auf 1mhz setzt....

Danke für die Hilfe!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 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.