Hallo zusammen, ich möchte Daten von einem ATmega32 an ein Notebook senden. Der UART des AVRs wird dazu eingestellt auf 2400 bps, 8 Datenbit, 1 Stopbit, ungerade Parität. Zum Testen soll der immer wieder beliebte String "Hallo, Welt!\n" übertragen werden. Bei der Übertragung kommt am Notebook "Ha", dann einige fehlerhafte Zeichen und dann wieder "lt!" gefolgt von einigen falschen Zeichen an. Was läuft hier falsch? Die Baudrateneinstellung habe ich aus dem Datenblatt entnommen und sollte bei 16MHz Taktfrequenz mit U2X = 0 dem Wert 416 (0x1a0) entsprechen. UBRRH wird vor UBRRL beschrieben. Zum Testen hatte ich die Baudraten-Werte auch schon erhöht und verringert. Die Einstellung der Fusebits ist LFUSE = 0xFF, HFUSE = 0xC9 (externer Quarz mit hoher Frequenz für biszu 16 MHz) Beim ATtiny2313 hatte ich ein ähnliches Problem, bis ich feststellte, dass der interne Takt durch 8 geteilt wird. Dummerweise hat der Mega8 kein Fuse-Bit um den Vorteiler einzustellen... Danke schon mal für eure Tipps! Gruß aus dem etwas verregneten München, Markus
Also, es kann entweder an einem ungenauen internen Takt liegen (passiert z.B. wenn man Atmegas auf Platinen montiert, die ein bißchen wärmer werden) oder der Fehler für die Gewünschte Datenrate ist über die maximal zulässige Grenze hinaus. Wenn du einen externen Quarz nutzt, schaue, ob die Kapazitäten stimmen, diese sollten bei 18-22 pF liegen.
du wartest wahrscheinlich nicht, bis der Sendebuffer leer ist. Also, es liegt an deinem Programm, konnte ich nicht öffnen :-)
Markus wrote: > ich möchte Daten von einem ATmega32 an ein Notebook senden. Der UART des > AVRs wird dazu eingestellt auf 2400 bps, 8 Datenbit, 1 Stopbit, ungerade > Parität. Und den Empfänger auch so eingestellt? Versuchs mal ohne Parität, nimmt eh keiner mehr. Wenn Fehlererkennung sein muß, nimmt man besser CRC. Peter
Danke an euch, aber das ist es leider alles nicht. Auf Grund der Fuse-Bits läuft der AVR mit dem externen 16MHz Quarz. Diek Kondensatoren am Quarz haben beide 22pF. Das Programm prüft vor dem Senden eines Zeichens, ob der Sendepuffer leer ist. Das Programm an sich läuft - bis auf die Baudrate - ohne Anpassung auf einem ATtiny2313 mit 8MHz ohne Probleme. Die Einstellung der übrigen UART-Register scheint bei beiden Controllern identisch zu sein. Markus
lol - Beim meinem Glück ist auch genau die Schuld... ;)
Ich habe das Problem mittlerweile gelöst. Die Konfiguration der Register ist genauso wie beim ATtiny2313 nur liegen die Register UCSRC und UBRRH auf der gleichen Adresse. Welches Register beschrieben wird, liegt am Bit 7 (1 bedeutet, dass UCSRC beschrieben wird) Dieses Bit ist beim ATtiny2313 nach der Spezifikation auf 0 zu setzen. Die Moral aus dieser Geschichte? Wer Lesen kann ist klar im Vorteil und sollten diesen auch ausnützen! ;) Markus
Sorry für Offtopic, aber: heißt es ausnützen oder ausnutzen? In letzter Zeit sehe ich dieses "nützen" immer mehr. Da kriege ich schon Gänsehaut davon. Sagt mir bitte, dass es "nutzen" heißt.
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.