Hallo, ich bin da auf ein Problem gestoßen, welches ich mir nicht erklären kann. Ich konnte das Problem einkreisen und kann es auch umgehen, nur weiß ich nicht, warum ich das Problem habe. (vermutlich sowieso ein Programmierfehler) Im Anhang sind 2 Dateien. Im main.c befindet sich ein extra Testprogramm, wo der Fehler auftritt. Und zwar stimmt die Baudrate des UART nicht. Wenn ich die UCSRx Register vor den UBRRx Registern beschreibe, habe ich meine Baudrate von 9600; wenn ich sie erst nach den UBRRx Registern beschreibe,(wie im Datenblatt angegeben,) habe ich laut Oszi ca. 300 Baud. Das Terminalprogramm zeigt dann bei 300 baud die Zeichen leicht verstümmelt an, sind also nicht ganz genau 300 baud. -> siehe Kommentar im Quelltext Ich hatte auch schon statt der Rechnung, die entsprechenden Werte per Zuweisung in die UBRRx Register geschrieben, aber auch dort habe ich den gleichen Fehler. noch ein paar Infos: Linux, avr-gcc 4.3.5, makefile hängt an low Fuse: 0x1F High Fuse:0xD0 Bootloader wird noch nicht benutzt Sieht hier jemand mehr als ich ? Jogibär
> UCSRC = (1<<UCSZ0) | (1<<UCSZ1);
da fehlt noch ein _BV(URSEL)
Dann ggf. noch CKOPT löschen.
HTH
g457 schrieb: > da fehlt noch ein _BV(URSEL) Jöpp. Beim Beschreiben von UCSRC muss das höchstwertige Bit (URSEL) gesetzt sein. Wenn das Bit nicht gesetzt wird, beschreibst du statt dessen das UBRRH Register. Ein Blick ins Datenblatt hätte dir die Augen geöffnet:
1 | Bit 7 – URSEL: Register Select |
2 | |
3 | This bit selects between accessing the UCSRC or the UBRRH Register. |
4 | It is read as one when reading UCSRC. The URSEL must be one when |
5 | writing the UCSRC. |
Hallo, oh je, da habe ich aber wirklich gepennt !! Stimmt, mit URSEL funktioniert es auch andersrum. Da habe ich wohl an der falschen Stelle gesucht, da ja die andere Version funktioniert hat. Bit 7 – URSEL: Register Select This bit selects between accessing the UCSRC or the UBRRH Register. It is read as one when reading UCSRC. The URSEL must be one when writing the UCSRC. Das habe ich anscheinend mit voller Absicht überlesen. Danke noch mal an alle für die Tips. Aber schon komisch, das es andersrum funktioniert hat. Jogibär
Michael Jogwich schrieb: > Aber schon komisch, das es andersrum funktioniert hat. Weil du dann den falschen Inhalt in UBRRH wieder überschreibst. Und dass nichts nach UCSRC geschrieben wurde stört nicht weiter, denn das, was du da reinschreiben willst, ist eh schon da drin (als Default-Inhalt nach einem Reset).
Hallo, stimmt. Siehe Beschreibung URSEL weiter oben. Danke noch mal an alle. Jogibär
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.