mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik uart datenmüll nach 10 sekunden


Autor: Richard Jamboua (jamboua)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich verwende den AT90CAN128 mit einem externen Quarz (8MHz). Mit Hilfe 
des Tutorials habe ich mir ein Programm geschrieben um Daten an die 
serielle Schnittstelle des PCs zu senden. Eigentlich funktioniert es 
wunderbar, allerdings nur 10 Sekunden lang. Die Ausgabe sieht dann immer 
so aus (jede Sekunde wird eine Zeile ausgegeben):

initialising uart
1 Sekunde!
2 Sekunden!
3 Sekunden!
4 Sekunden!
5 Sekunden!
6 Sekunden!
7 Sekunden!
8 Sekunden!
9 Sekunden!  •­Õ¹‘þ¡ø
16 ÷en!
       ¹‘•¹…{s¹‘•¹þkundå Sek¹

Es dauert immer zwischen 8 und 10 Sekunden. Als wenn sich da irgend 
etwas an der Taktung "verstimmen" würde. Die Fuses habe ich mehrfach 
überprüft und sind richtig gesetzt.
Weiß jemand womit das zusammenhängen kann?
Vielen Dank schon mal.

Autor: Jupp (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hängt zwischen PC und µC ein USB-RS232-Umsetzer?

Autor: µluxx .. (uluxx) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
nee ich glau mal minimal falsche baudrate, am anfang gehts noch und nach 
den 10 sekunden ist die abweichung zu groß....

uLuxx

Autor: Johannes M. (johnny-m)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Luxx .. wrote:
> nee ich glau mal minimal falsche baudrate, am anfang gehts noch und nach
> den 10 sekunden ist die abweichung zu groß....
Wie soll das gehen? Bei UART wird mit jedem Byte neu synchronisiert. Das 
ist also sicher keine Erklärung...

Autor: Tcf Kat (tcfkat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1) Stimmt Deine l2a-Routine? Wieso machst Du das nicht mit sprintf()???
2) Wird Windows nicht überfahren? Mal niedrigere Baudrate probiert?

Autor: Quarzler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
vielleicht wird Dein Quarz warm und er verändert dadurch seine Frequenz? 
Wenn die Übertragung beim Einschalten vlt. schon zusätzlich Grenzwertig 
läuft, kann soetwas schon einmal passieren.

Gruß

Autor: Tcf Kat (tcfkat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Quarzler wrote:
> vielleicht wird Dein Quarz warm und er verändert dadurch seine Frequenz?
> Wenn die Übertragung beim Einschalten vlt. schon zusätzlich Grenzwertig
> läuft, kann soetwas schon einmal passieren.
>
> Gruß

So ein völliger Quatsch!

Mache Deine message[4] mal größer.
tab[] in l2a() sollte man "static" deklarieren...

Autor: Richard Gottschalk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank erstmal für eure Antworten.
hier mal einige Zusätze meinerseits:
- ja, ich verwende einen MAX232.
- die l2a funktion hab ich hier aus der Codesammlung (die ist auch nicht 
das Problem, da das gleiche Verhalten auch bei Ausgaben ohne diese 
auftritt).
- mit verschiedenen Datenraten (bis minimal 2400) hab ich's auch 
versucht -> gleiches Verhalten.

Eine "leicht falsche" Datenrate kann ich mir auch nicht vorstellen, da 
jedes Frame ja neu synchronisiert wird.
Dieses Verhalten ist auch aufgetreten, wenn ich nur die Funktion 
uart1_send_char verwendet habe. Ich glaucbe also nicht, dass der Fehler 
in l2a oder uart1_send_str steckt.
Es könnte allerdings die Funktion uart1_send_char sein - aber die is 
doch so primitiv!
Hat denn noch niemand dieses Problem gehabt??

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Richard,

sinkt evtl. die durch den Max erzeugte Spannung nach und nach ab?

Otto

Autor: falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Alle Käse.

Das ist zu 99,9999% ein Softwarefehler. Dein Programm verhaspelt sich. 
MAX232 und Quarz scheiden praktisch aus.

MfG
Falk

Autor: Richard Jamboua (jamboua)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
OK, damit kann ich leben. Aber kannst du mir auch sagen wo?
Ich bin den Quelltext schon zig-fach durchgegangen und hab fast alles 
mit Beispielen aus dem Netz verifizieren können. So viel gibt es ja 
eigentlich nicht softwaretechnisch einzustellen.
Ich bin im Moment ziemlich ratlos.

Autor: Otto (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Richard,

wenn gar nichts hilft, kommentiere alles aus und sende zyklisch 
irgendeinen Testsatz ("the quick brown fox..."), wenn es dann geht, hat 
"falk" recht.

Gruss Otto

Autor: Tcf Kat (tcfkat)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mache Deinen message[4]; buffer mal größer!!!
Mit l2a(2366,message); schreibst Du über den Buffer (\0 nicht 
vergessen).
Ich kenne das Speicherlayout der AVRs nicht, aber solche Buffer- bzw.
Stackoverruns können immer spassige Seiteneffekte haben...

Autor: Richard Jamboua (jamboua)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,
vielen Dank für eure Hilfe. Hab die Lösung gefunden. Die 
Versorgungspannung des Netzteils war etwas zu niedrig. Die Beschriftung 
stimmte nicht mit der gemessenen Spannung überein.

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mach trotzdem den Buffer größer.

Autor: Lupin (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Genau, mach jetzt den verdammten Buffer größer oder du wirst vom Forum 
gesteinigt! :D

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.