Hallo SprinterSB,

ich habe mir mal den Code aus dem Wiki vorgenommen und kriege leider das gleiche Ergebnis. 19200 Baud sind fest eingestellt (mit Berechnung das gleiche) und 9600 Baud kommen raus. Die Initialisierung des UART rufe ich vor jedem Sendevorgang auf und ob ich den UART mit RXEN am Ende oder am Anfang einschalte macht leider keinen Unterschied. Das der Bootloader einen Fehler hat habe ich auch erst gedacht und mir deshalb einen Megaload Nachbau in GCC installiert mit gleichem Ergebnis.

Bin etwas ratlos :(.

/* USART-Init 19200 Baud bei 16MHz für Mega32 */

uint8_t sreg = SREG;

UBRRH = 0; // Highbyte ist 0
UBRRL = 51; // Lowbyte ist 51 ( dezimal )

// Interrupts kurz deaktivieren
cli();

// UART Receiver und Transmitter anschalten, Receive-Interrupt aktivieren
// Data mode 8N1, asynchron
UCSRB = (1 << RXEN) | (1 << TXEN) | (1 << RXCIE);
UCSRC = (1 << URSEL) | (1 << UCSZ1) | (1 << UCSZ0);

// Flush Receive-Buffer (entfernen evtl. vorhandener ungültiger Werte)
do
{
// UDR auslesen (Wert wird nicht verwendet)
UDR;
}
while (UCSRA & (1 << RXC));

// Rücksetzen von Receive und Transmit Complete-Flags
UCSRA = (1 << RXC) | (1 << TXC);

// Global Interrupt-Flag wieder herstellen
SREG = sreg;


Das seltsame ist, stelle ich die doppelte Baudrate ein von der die ich eigentlich will, funktioniert die Sache super.