USART-Baudrate falsch

OP #995581
Lesenswert?

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
Lesenswert?

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?

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