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);
|