Forum: Mikrocontroller und Digitale Elektronik ATMEGA 644 - UART um den Faktor 8 langsamer als berechnet


von foobar (Gast)


Lesenswert?

Ich habe hier einen Mega 644P auf einem Pollin-Funkevalboard bei 12 MHz 
am laufen. Schnell etwas Code vom Mega8 portiert, u.a. ein paar Routinen 
für die UART. Alles funkioniert beinahe wie erwartet - wäre da nicht ein 
kleiner Schönheitsfehler: die Baudrate auf der UART ist um den Faktor 8 
langsamer, als nach Formel aus dem Datenblatt berechnet.

Ich schreibe also den Wert 77 für 9600 Baud ins UBRR0-Register - und 
erhalte oh Wunder exakt 1200 Baud an der Schnittstelle. Ich habe 
inzwischen sogar die Frequenz des Quarzes angezweifelt - aber der Oszi 
zeigt ein einwandfreies Signal mit 12 MHz an den Clock-Pins. Ebenso habe 
ich die Baudrate nachgemessen, ein Bit ist knapp eine ms lang, also 1200 
Baud.

Nach stundenlagem Brüten über dem Datenblatt bin ich mittlerweile recht 
ratlos - daher hier mal mein Code zur UART-Initialisierung, vielleicht 
fällt jemandem ja was dran auf...
1
#define UART_BAUD    9600
2
#define bauddivider (uint)(F_CPU / UART_BAUD / 16 - 0.5)
3
...
4
UBRR0 = bauddivider;
5
UCSR0A = 0;
6
UCSR0B = (1<<TXEN0);
7
UCSR0C = (1 << UCSZ01)|(1 << UCSZ00);

von Stefan E. (sternst)


Lesenswert?

CKDIV8 Fuse?

von holger (Gast)


Lesenswert?

CKDIV8 Fuse abschalten.

von gast (Gast)


Lesenswert?

#define UART_BAUD           9600UL
#define UBRR_UART0       ( (F_CPU/(16*BAUDRATE_UART0))-1)

so gehts zumindest bei mir

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Auf exernen Takt bzw. Quarz umfusen.

von foobar (Gast)


Lesenswert?

[quote]
CKDIV8 Fuse
[/quote]
Was für ne geile Falle. Und das Ding ist zu allem Überfluss auch noch 
aktiv, wenn es auf 0 steht ;)

Besten Dank, jetzt läuft alles wie gewohnt.

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.