Hallo! Erstmal danke an alle, die jemals ein Problem hatten und das hier lösen konnten, hat mir oft sehr weitergeholfen :-). Für das folgende Problem habe ich allerdings im Internet keine Lösung gefunden: Wenn ich mit dem Windows Hyperterminal zu meinem Atmel verbinde klappt alles, d.h. ich lass vom Atmel in einer Endlosschleife 'A' senden und es wird alles korrekt empfangen. Mit anderen Terminalprogrammen empfange ich allerdings immer meine gesendete Zahl + 128. Ab 128 empfange ich alles korrekt. Schalte ich auf 7 Datenbits klappt auch alles korrekt. Habe mir das ganze mal am Oszi angeschaut und bemerkt, dass immer nur 7 Datenbits gesendet werden. Als 8. Datenbit erkennt das Terminal Programm dann einen 0-Pegel, d.h. logische 1, entspricht 128. Das Windows Hyper Terminal schaltet anscheinend automatisch auf 7 Datenbits, das wäre zumindest meine Erklärung für das Verhalten. Beispiel: Ich sende 51 (0011 0011) Zu erwarten: -__--__--__________ S01234567.......... Auf meinem Oszi: -__--__-___________ S0123456........... Hab auch schon probiert am Atmega 9 Datenbits einzustellen, aber nichts ändert sich. Meine Baudraten stimmen (am Oszi nachgemessen). Ich benutze einen 3,6864MHz Quarz, funktioniert auch (ebenfalls per CKOUT am Oszi nachgemessen). Hier meine UART initialisierung:
1 | UBRR1H = (uint8_t)(baud>>8); |
2 | UBRR1L = (uint8_t)baud & 0xff; |
3 | UCSR1A = (1 << U2X1); |
4 | UCSR1C = (1 << URSEL1) | (3 << UCSZ01); |
5 | UCSR1B = (1 << RXEN1) | (1 << RXCIE1) | (1 << TXEN1); |
baud = 47 (9600 baud) Mit anderen Baudraten funktioniert es ebenfalls nicht. Ich hoffe Ihr könnt mir helfen, sonst dreh ich bald durch :) Gruß Sebastian