Hallo µC.net!
Ich bin gerade dabei, mich mit der Benutzung der USART-Schnittstelle
meines ATmega644 vertraut zu machen. Zur Initialisierung habe ich
folgende Zeilen geschrieben:
1 | #define BAUD 2400
|
2 | #define UBRR_VAL ((AVR_CLOCK_FREQUENCY+BAUD*8)/(BAUD*16)-1)
|
3 | #define BAUD_REAL (AVR_CLOCK_FREQUENCY/(16*(UBRR_VAL+1))) //Reale Baudrate
|
4 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) //Fehler in Promille
|
5 |
|
6 | #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10)) //max. +/-10 Promille Fehler
|
7 | #error "Systematischer Fehler der Baudrate grösser 1 Prozent und damit zu hoch!"
|
8 | #endif
|
9 |
|
10 | void uart_init(void)
|
11 | {
|
12 | UBRR0 = UBRR_VAL;
|
13 | // ...
|
14 | }
|
... Das klappt auch so weit. Bis auf die Warnung "Integer Overflow", die
bei "UBRR0 = UBRR_VAL;" auftritt. Allerdings habe ich den Anspruch,
warnungsfrei kompilieren zu können.
Ich hoffe, ihr wisst, wie man es besser machen kann. Freu' mich!
Gruß,
Kinners