mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik UART-Problem.. Durcheinander nach 20 Zeichen


Autor: Tobias Hagemeier (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Ich habe ein kleines Problem mit einem P89C51RD2. Das Ding ist extern
mit 18.432mHz getaktet um gewöhnliche Baudraten vernünftig timen zu
können.
Ich verwende für die UART-Kommunikation Timer 1 im Auto-Reload-Modus
mit folgenden Werten:
RCAP2L = 0xC4;
RCAP2H = 0xFF;
Das ganze habe ich mit der Formel 65536 - (OszFreq / 32 * BaudRate)
berechnet (der µC läuft im 12-Takt-Modus). Übertragungsrate sollte 9600
Baud sein, ich habe allerdings auch schonmal mit 2400 getestet was das
gleiche Ergebnis bringt. Der Bootloader schafft bis zu 28800 Baud,
daran sollte es also nicht liegen..

Problem ist nun folgendes: Wenn ich einzelne Zeichen übertrage passt
alles wunderbar. Sobald ich aber "Volllast" fahre und schnell Daten
hin- und her schiebe bekomme ich nach einiger Zeit Datenmüll bzw
überhaupt keine Zeichen mehr übertragen. Die komplette Initialisierung
der UART-Schnittstelle hänge ich mal an.

Hat vielleicht jemand eine Idee was hier nicht stimmt? Oder hat sich
bei der Berechnung der Reload-Werte ein Fehler eingeschlichen?

Ich freu mich über jede Antwort..

- Tobi

Autor: Tobias Hagemeier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: Könnte es an meinem USB to COM-Adapter liegen der kein
sauberes Signal produziert? Wieso würde dann der Upload des Hex-Files
funktionieren?

- Tobi

Autor: ape (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Verwendest du einen Sende-Buffer?
Das von dir beschriebene Verhalten passt ganz gut zu nem
Buffer-Überlauf oder sowas.

Autor: Tobias Hagemeier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ja, ich arbeite mit einem Buffer, mit einem selbst programmierten. Aber
selbst wenn ich die Zeichen direkt wieder per UART zurück schicke (was
ja aufgrund der in beide Richtungen gleichen Sendegeschwindigkeit super
passen sollte) treten die Fehler auf. Außerdem treten die Fehler in
beide Richtungen auf..
Da meine erste Vermutung auch der Buffer war, hatte ich den auch
schonmal umgeschrieben und eine andere Methode benutzt. Da treten aber
genau die gleichen Probleme immer noch auf...

- Tobi

Autor: ape (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Naja diese Buffergeschichten sind immer komplizierter als man denkt, ich
hab mir bei meinem UART-Buffer bald die Ohren gebrochen bis er richtiug
funktioniert hat. Wichtig ist immer schön die Interrupts abzuschalten
wenn man ein Zeichen hizufügt oder rausnimmt.
Ansonsten probier doch testweise erstmal komplett ohne Buffer und warte
bei jedem zu sendenden Zeichen bis das vorige vollständig gesendet ist.
Wenn das Problem dann nicht mehr auftritt ist es auf jeden Fall dein
Buffer :)

Autor: Tobias Hagemeier (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!
Ich habe jetzt mal den Buffer komplett als Fehlerquelle ausgeschlossen
und sende alles was ich empfange direkt zurück an den PC. Wenn ich
jetzt nur 0xAA-Bytes (entspricht Bitfolge 10101010) sende, bekomme ich
diese auch zurück. Allerdings ist dazwischen immer mal wieder 11110101
für sich alleine oder mit nachfolgendem 10101011 oder 11010101. Danach
empfängt er die Zeichen wieder ganz normal. Wenn ich vom Microprozessor
aus selbstständig Texte verschicke, kommen diese sauber und ohne
jegliche Probleme an. Der Fehler passiert also auf dem Weg vom PC zum
µC. Die Overflow-Rate des Timers kann ich +-4 verändern ohne das
Zeichenwirrwar übertragen wird, ich bin also mit der Übertragungsrate
exakt auf den 9600 Baud.

Ich habe den Verdacht, das über den USB-Adapter wirklich kein sauberes
12V-Signal ankommt, da der µC offensichtlich das Startbit zu früh
erkennt (da wo eigentlich noch durchgehend ein HIGH-Pegel anliegen
sollte) und dadurch diese Verschiebungen auftreten.
Was mich dann aber wundert ist, das der Bootloader das korrekte
Programm empfängt.. oder ist das zum Austausch der Daten verwendete
Protokoll so sicher das diese Fehler (die im Durchschnitt alle 6-7
Zeichen auftreten) ausgebügelt werden??

- Tobi

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.