hallo, mein Ziel ist es über UART was an den PC zu schicken.
Ich habe mich ans Tutorial gehalten und bekomme jetzt eine Warnung und
den Fehler das der Baudratenfehler zu groß ist.
Die Warnung lautet: interger overflow in expression
und bezieht sich auf die zuweisung der Bautrate in die Register UBRRH
und UBRRL.
1 | #ifndef F_CPU
|
2 | #define F_CPU 8000000L //systemtakt in Hz
|
3 | #endif
|
4 |
|
5 | #define BAUD 9600 //Baudrate
|
6 |
|
7 | #define UBRR_VAL ((F_CPU+BAUD*8)/(BAUD*16)-1) //clever runden
|
8 | #define BAUD_REAL (F_CPU/(16*UBRR_VAL+1)) //Reale Baudrate
|
9 | #define BAUD_ERROR ((BAUD_REAL*1000)/BAUD-1000) //Rehler in Promille
|
10 |
|
11 | #if ((BAUD_ERROR>10) || (BAUD_ERROR<-10))
|
12 | #error Sysematiser Fehler der Baudrate grösser 1% und damit zu hoch!
|
13 | #endif
|
14 |
|
15 | int main(void)
|
16 | {
|
17 | //Bautrate setzen durch makro
|
18 | //UBRR = UBRR_VAL;
|
19 |
|
20 | UBRRH = UBRR_VAL >> 8; // interger overflow
|
21 | UBRRL = UBRR_VAL & 0xFF;
|
22 |
|
23 | // UART enable TX
|
24 | UCSRB |= (1<<TXEN);
|
25 | UCSRC |= (0<<UMSEL) | (3<<UCSZ0);
|
bis auf die Register habe ich gegentlich nichts geändert.
Wobei die laut datenblatt eigentlich anderst (UBRRH0 UBRRL0) heißen aber
die bezeichung mag er auch nicht.