mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ATmega32 - Problem bei serieller Übertragung


Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: A. F. (artur-f) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
du wartest wahrscheinlich nicht, bis der Sendebuffer leer ist.
Also, es liegt an deinem Programm, konnte ich nicht öffnen :-)

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
dann tippe ich auf Zeile 42.

Autor: Markus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
lol - Beim meinem Glück ist auch genau die Schuld... ;)

Autor: Markus Dörschmidt (cipher1978)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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

Autor: Igor Metwet (bastel-wastel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
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.

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
es heisst "nützen" :-)

Autor: Igor Metwet (bastel-wastel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bäh ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.