Ich hab vor ein paar Tagen auch mit dem UART und nicht funktionierenden Libraries gekämpft, meine Lösung stammt praktisch aus dem Atmega Datenblatt:
Baudrate kann man universell über define einstellen, oder direkt den Wert für ubrr aus dem Datenblatt übernehmen.
Code:
#define BAUD 9600
#define UBRR_BAUD ((F_CPU/(16UL*BAUD))-1)
UBRRH = (unsigned char)(UBRR_BAUD>>8);
UBRRL = (unsigned char)UBRR_BAUD;
UCSRB = (1<<RXEN)|(1<<TXEN);
UCSRC = (1<<URSEL)|(1<<UCSZ0)|(1<<UCSZ1);
Ein while (!(UCSRA & (1<<UDRE))) vor jedem Senden schadet nicht damit nichts verloren geht, mein Programm wird trotzdem ohne merkbare Verzögerung abgearbeitet.
Weiters schalte ich die Ports anders, mit PORTD |= (1<<PD1), bzw PORTD &= ~ (1<<PD1), kann sein dass du mit deinem Befehl die UART Schnittstelle als digitalen Ausgang überschreibst.
LG
Lesezeichen