Guten Tag,
ich habe noch recht wenig Erfahrung mit µcs. Nun habe ich ein Problem mit der Baudrate. Ich verwende einen ATmega8 und wollte eigendlich mit einer Frequenz von 8 Mhz und einer Baudrate von 9600 über den USART senden. Doch bei 8 Mhz kommt nur Schrott an. Wenn ich es aber auf 1 Mhz laufen lasse funktioniert es gut.
Da ich in C programmiere beziehe ich den UBRR-Wert über die Include-Datei "setbaud.h".
Code:
#define F_CPU 1000000 // bzw. 8Mhz
#define BAUD 9600
#include <util/setbaud.h>
void usart_init(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
#if USE_2X
#warning "U2X wird genutzt"
UCSRA |= (1 << U2X);
#else
UCSRA &= ~(1 << U2X);
#endif
UCSRB |= (1<<TXEN); // UART TX einschalten
UCSRC = (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); // Asynchron 8N1
}
Aber laut den Rechnungen die ich auf "www.mikrocontroller.net" gefunden habe habe ich bei 8 Mhz eine geringere Abweichung (unter 1%) als bei 1 Mhz (über 1%). Es wird bei 1 Mhz auch der U2X-Modus genutzt.
Nun Frage ich mich natürlich was da Falsch läuft. Ich stelle natürlich auch immer den intern Takt um, wenn ich die Frequenz im Code ändere.
Ps.: Da ich gelesen habe, dass es in den meisten Fällen um Hardware Probleme geht, wenn es zum USART kommt, habe ich den Post einfach mal hier gemacht.
Vielen Dank,
Flo
Lesezeichen