Hallo
Ich versuche gerade den UART an einem Atmega8 zumlaufen zu bringen.
Dabei bin ich auf die Formeln für die Berechnungen im Wiki gestossen:
1 | // Berechnungen
|
2 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) // clever runden
|
3 | #define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1))) // Reale Baudrate
|
4 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) // Fehler in Promille
|
5 | ...
|
6 | UBRR = UBRR_VAL;
|
Nun habe ich das Ganze für 2MHz bei 9600Baud gerechnet:
(Vorsicht, ab hier meine Interpretation)
UBRR_VAL wird: 12,520833
BAUD_REAL wird: 9244,99
BAUD_ERROR wird -36,9 (Promille)
was natürlich viel zu gross ist. Im Datenblatt des Atmega8 ist für
dieselben Werte ein Wert von 0,2% angegeben.
Etwa 0,16 erhalte ich, wenn ich anstatt 12,520833 genau 12 einsetze, was
ja dann eigentlich auch im Register stehen sollte.
Nun meine Frage: Rechnet der Präprozessor da mit 12,520833 weiter,
anstatt mit 12? Ist das ein Fehler im Wiki?