Guten Abend,
ich habe ein Problem mit dem USART0 des MEGA644P.
Ich habe ihn wie folgt initialisiert:
1 | #define UBRR_VAL 10
|
2 |
|
3 | UCSR0B |= (1 << TXEN0); // UART TX einschalten
|
4 | UCSR0C |= (1 << UCSZ01)|(1 << UCSZ00); // Asynchron 8N1
|
5 |
|
6 | UBRR0H = UBRR_VAL >> 8;
|
7 | UBRR0L = UBRR_VAL & 0xFF;
|
Und in der Hauptschleife lasse ich dann folgendes ausgeben:
1 | while (!(UCSR0A & (1<<UDRE0))) /* warten bis Senden moeglich */
|
2 | {
|
3 | }
|
4 |
|
5 | UDR0 = 'p';
|
Der Controller läuft mit 20 MHz - auf externe Taktquelle ist er gefused.
Laut Datenblatt muss bei 20 MHz UBRR auf 10 gesetzt werden (Baudrate
115,2k). Die Fehlerquote beträgt -1,4%. Ich habe es auch schon mit
anderen Baudraten probiert (auch mit 2400 bei 520 für UBRR und 0%
Fehler).
Im HTerm empfange ich immer nur 00h 80h abwechselnd.
Was habe ich übersehen? Ich such mich grade schon verrückt nach dem
Fehler - wahrscheinlich liegt es nur an der Uhrzeit...
Liebe Grüße Andy