Hallo, Meine Baudrate wird falsch berechnet. Und zwar kommt bei folgendem Code (wo ja wohl 9600 rauskommen sollte), eine Baudrate von 19200; Partity None; 8 Data Bits; 1 Stop Bit raus. Und ich weiß nicht wo der fehler liegt. -) Atmega8 -) Ext. XTAL 4MhZ -) Datenübertragung generell geht... hald nur mit 19200 Baud C-File im Anhang.
1 | #ifndef F_CPU
|
2 | #define F_CPU 4000000
|
3 | #endif
|
4 | #define UART_BAUD_RATE 9600
|
5 | // Hilfsmakro zur UBRR-Berechnung ("Formel" laut Datenblatt)
|
6 | #define UART_UBRR_CALC(BAUD_,FREQ_) ((FREQ_)/((BAUD_)*16L)-1)
|
7 | |
8 | unsigned char get; |
9 | |
10 | |
11 | void init_uart(void) |
12 | {
|
13 | UCSRA &= (0<<U2X); |
14 | UCSRB |= (1<<TXEN); //Transmitter Enabled |
15 | UCSRC |= (1<<URSEL) | (3<<UCSZ0); //Asynchron 8N1 |
16 | |
17 | UCSRB |= (1<<RXEN); //Emfpang enabl |
18 | |
19 | UBRRH=(uint8_t) (UART_UBRR_CALC(UART_BAUD_RATE,F_CPU)>>8); |
20 | UBRRL=(uint8_t)UART_UBRR_CALC(UART_BAUD_RATE,F_CPU); |
21 | //UBRRH=0;
|
22 | //UBRRL= 25; //19200 -> 25,0416
|
23 | }
|
24 | |
25 | |
26 | |
27 | int uart_putc(unsigned char c) |
28 | {
|
29 | while (!(UCSRA & (1<<UDRE))); // wait for empty (UartDataRegisterEmpty) transmit buffer |
30 | UDR = c; // put data into buffer, sends the data |
31 | return 0; |
32 | }
|
Nehme an dass es irgend was banales sein wird... -.- Greez Nick