Ich bin drauf reingefallen, dass man beim ATmega 16 ein Bit mehr setzen muss (nämlich das URSEL Bit), als bei allen anderen ATmegas. Denn beim ATmega 16 haben zwei Register für den seriellen Port die selbe physikalische Adresse!

Im Makefile:
-DBAUD=9600 -DF_CPU=15000000

Im C Programm:
Code:
        // set baudrate 
        UBRRH = UBRRH_VALUE;
        UBRRL = UBRRL_VALUE;
        #if USE_2X
            UCSRA |= (1 << U2X);
        #else
            UCSRA &= ~(1 << U2X);
        #endif
        // enable receiver and transmitter
        UCSRB = (1<<RXEN) | (1<<TXEN);
        // framing format 8N1
        #ifdef URSEL
            UCSRC = (1<<URSEL) | (1<<UCSZ1) | (1<<UCSZ0);
        #else
            UCSRC = (1<<UCSZ1) | (1<<UCSZ0);
        #endif