ATMEGA 644 - UART um den Faktor 8 langsamer als berechnet

Gast #1468441
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);

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