Ich bin beim Programmieren nun wieder bei meinem alten UARTPROBLEM mit dem UBRR Wert gelandet da ich die Baudrate erhöhen wollte.

Kann es sein das MYUBRR_VAL 16000000/16/UART_BAUD_RATE-1 nur zufällig funktioniert?
Sobald ich die Baudrate erhöhe funktioniert der Code schon nichtmehr.

Defines... Fehlerhaft?
PHP-Code:
#define F_CPU 16000000UL
#define UART_BAUD_RATE 9600     //9600
#define UBRR_VAL ((F_CPU+UART_BAUD_RATE*8)/(UART_BAUD_RATE*16)-1)   // clever runden
#define BAUD_REAL (F_CPU/(16*(UBRR_VAL+1)))     // Reale Baudrate
#define BAUD_ERROR ((BAUD_REAL*1000)/UART_BAUD_RATE-1000) // Fehler in Promille 

Makro nicht korrekt???
PHP-Code:
#define UART_BAUD_SELECT(baudRate,xtalCpu)  (((xtalCpu) + 8UL * (baudRate)) / (16UL * (baudRate)) -1UL) 
Aufruf in der MAIN verkehrt???
PHP-Code:
uart_initUART_BAUD_SELECT(UART_BAUD_RATE,F_CPU) ); 

oder die Initfunktion von p.fleury ansich nicht geeignet???

PHP-Code:
void uart_init(unsigned int baudrate)
{
    
UART_TxHead 0;
    
UART_TxTail 0;
    
UART_RxHead 0;
    
UART_RxTail 0;
    
#if defined( AT90_UART )
    /* set baud rate */
    
UBRR = (unsigned char)baudrate

    
/* enable UART receiver and transmmitter and receive complete interrupt */
    
UART0_CONTROL _BV(RXCIE)|_BV(RXEN)|_BV(TXEN);

#elif defined (ATMEGA_USART)
    /* Set baud rate */
    
if ( baudrate 0x8000 )
    {
         
UART0_STATUS = (1<<U2X);  //Enable 2x speed 
         
baudrate &= ~0x8000;
    }
    
UBRRH = (unsigned char)(baudrate>>8);
    
UBRRL = (unsigned charbaudrate;
   
    
/* Enable USART receiver and transmitter and receive complete interrupt */
    
UART0_CONTROL _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);
    
    
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
    #ifdef URSEL
    
UCSRC = (1<<URSEL)|(3<<UCSZ0);
    
#else
    
UCSRC = (3<<UCSZ0);
    
#endif 
    
#elif defined (ATMEGA_USART0 )
    /* Set baud rate */
    
if ( baudrate 0x8000 //Baudrate
    
{
           
UART0_STATUS = (1<<U2X0);  //Enable 2x speed 
           
baudrate &= ~0x8000//Baudrate
       
}
    
UBRR0H = (unsigned char)(baudrate>>8); //Baudrate
    
UBRR0L = (unsigned charbaudrate;     //Baudrate

    /* Enable USART receiver and transmitter and receive complete interrupt */
    
UART0_CONTROL _BV(RXCIE0)|(1<<RXEN0)|(1<<TXEN0);
    
    
/* Set frame format: asynchronous, 8data, no parity, 1stop bit */
    #ifdef URSEL0
    
UCSR0C = (1<<URSEL0)|(3<<UCSZ00);
    
#else
    
UCSR0C = (3<<UCSZ00);
    
#endif 

#elif defined ( ATMEGA_UART )
    /* set baud rate */
    
if ( baudrate 0x8000 
    {
        
UART0_STATUS = (1<<U2X);  //Enable 2x speed 
        
baudrate &= ~0x8000;
    }
    
UBRRHI = (unsigned char)(baudrate>>8);
    
UBRR   = (unsigned charbaudrate;

    
/* Enable UART receiver and transmitter and receive complete interrupt */
    
UART0_CONTROL _BV(RXCIE)|(1<<RXEN)|(1<<TXEN);

#endif

}/* uart_init */ 
Ich verstehe einfach nicht wo das Problem liegen soll.... irgendwie ist es völlig unlogisch für mich das der Code so nicht funktioniert aber ich lass mich gerne eines besseren belehren...

FUSES korrekt gesetz! DSOSC_16KCK_65MS_XOSXC_SLOWPWR
und CKDIV 8 haken nicht gesetzt!

Ich bin am verzweifeln.... hat keiner einen heißen Tipp für mich???

VIELEN DANK