Hallo zusammen,
in der UART-Bibliothek von Peter Fleury wird die Baudrate wie folgt
gesetzt:
1 | #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu)/((baudRate)*16l)-1)
|
Dabei werden bei der Berechnung auftretende Nachkommastellen
abgeschnitten. Das hat bei manchen Baudraten zur Folge, dass der Fehler
so groß wird, dass eine Kommunikation nicht möglich ist.
So wird z.B. bei 8 MHz und 57600 Baud ein Wert von 7,7 berechnet, der
auf 7 abgeschnitten wird, so dass der Fehler bei +8,5% liegt.
Wenn in diese Definition eine Rundung eingebaut wird, funktioniert das
wieder:
1 | #define UART_BAUD_SELECT(baudRate,xtalCpu) ((xtalCpu+
|
2 | (8l*(baudRate)))/((baudRate)*16l)-1)
|
Damit wird bei obigem Beispiel ein Wert von 8 erzeugt und der Fehler
liegt nur noch bei -3,5%;
Hat schon mal jemand diese Beobachtung gemacht bzw. lässt sich das
Problem an anderer Stelle beheben?
Schöne Grüße
Sören