µcFlo
12.10.2013, 23:38
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".
#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
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".
#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