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
Lesezeichen