Ich möchte ein einfaches Zeichen über den UART senden und dieses mit einem Terminalprogramm anzeigen. Das Ganze funktioniert auch wenn ich als Baudrate 9600 verwende. Bei jeder anderen Baudrate bekomme ich nur Mist.(habe sie auch immer im Terminal entsprechend angepasst) Vieleicht kann mir jemand helfen. Danke Controller: ATmega 328 P Takt: Externer 16Mhz Quarz Programmierumgebung: Atmel Studio 6.0 Einstellung der Fuses siehe Anhang
1 | #include <avr/io.h> |
2 | #define F_CPU 16000000UL
|
3 | #include <util/delay.h> |
4 | |
5 | |
6 | |
7 | //Daten für Uart Kommunikation
|
8 | #define FOSC 16000000 // Clock Speed
|
9 | #define BAUD 9600
|
10 | #define MYUBRR FOSC/16/BAUD-1
|
11 | |
12 | void USART_Init( unsigned int ubrr) |
13 | {
|
14 | /*Set baud rate to 9600 */
|
15 | UBRR0H = (unsigned char)(ubrr>>8); |
16 | UBRR0L = (unsigned char)ubrr; |
17 | /*Enable receiver and transmitter */
|
18 | UCSR0B = (1<<RXEN0)|(1<<TXEN0); |
19 | UCSR0A = (1<<UDRE0); |
20 | /* Set frame format: 8data, 1stop bit */
|
21 | //UCSR0C = (1<<USBS0)|(3<<UCSZ00);
|
22 | UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); // Set frame: 8data, 1 stp |
23 | }
|
24 | |
25 | |
26 | |
27 | |
28 | int main(void) |
29 | {
|
30 | |
31 | USART_Init(MYUBRR); |
32 | |
33 | while(1) |
34 | {
|
35 | UDR0 = 'k'; |
36 | _delay_ms(500); |
37 | }
|
38 | |
39 | }
|