Hallo,
ich bin gerade dabei, mich etwas tiefer in den UART einzuarbeiten und wollte eine serielle Ausgabe ohne Zuhilfenahme von Arduino-Bibliotheken realisieren. Den Code unten hab ich aus dem Atmega328p-Datasheet entnommen.
Leider funktioniert er nicht wie erwartet, d.h. er liefert beim seriellen Monitor gar nichts, und bei HTerm kommt nur Müll raus. Desweiteren kommt es ab und an zu Problemen beim Hochladen des Sketches.
Die Baudrate habe ich auf 9600 eingestellt und in HTerm die 2 Stop-Bits auch ausgewählt.
Könnt ihr mir bitte sagen, wo der Fehler liegt ?
#define FDSC 16000000UL
#define BAUD 9600
#define MYUBRR FDSC/16/BAUD-1
void USART_Init(unsigned int ubrr)
{
/* Set baud rate */
UBRR0H = (unsigned char)(ubrr>>8);
UBRR0L = (unsigned char)ubrr;
/* Enable receiver and transmitter */
UCSR0B = (1<<RXEN0)|(1<<TXEN0);
/* Set frame format: 8 data, 2 stop bits */
UCSR0C = (1<<USBS0)|(3<<UCSZ00);
}
void USART_Transmit(unsigned char data)
{
/* wait for empty transmit buffer */
while (!(UCSR0A & (1<<UDRE0)))
{
/* Put data into buffer, sends the data */
UDR0 = data;
}
}
void setup() {
// put your setup code here, to run once:
USART_Init(MYUBRR);
}
void loop() {
// put your main code here, to run repeatedly:
USART_Transmit("Hallo Freunde");
}