www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Störungen im RS232 Softwarepuffer ( ATMEGA32 )


Autor: Wolfram Quehl (quehl)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
ich habe ein Problem bei der Suche nach meinem Programmfehler. Ich habe 
das Programm insgesamt mal angehängt (Assembler).

Programmiert sind eine Funkuhr (aus dem Forum auf meinen Bedarf 
angepaßt) und ein RS232 Sende- und Empfangspuffer. Die übrigen 
Programmteile sind für später vorgesehen und hier abgeschaltet. 
Verwendet wird auf dem PC Hterm.
Und das Schalten von 2 LEDs und ein Summer.

Fehler: Wenn ich nichts eingebe oder Reset mache, läuft alles 
ordnungsgemäß. Wenn ich R1 zum Schalten der LED eingebe, funktioniert 
das, aber in unregelmäßigen Zeitabständen schaltet die LED von alleine. 
Diese Unregelmäßigkeit macht die Fehlersuche so schwierig. Wenn ich 
Hterm schließe oder das Kabel abziehe, bleibt der Fehler bestehen. Wenn 
ich statt R1 andere Zeichen eingebe, die nur durchlaufen, funktioniert 
das nach außen noch einwandfrei. Da zum Schalten der LED 2 Zeichen 
eingegeben werden müssen, ist ein falsches Schalten an anderer Stelle 
fast ausgeschlossen. Ich vermute am ehesten einen Fehler bei den Zeigern 
des Pufferspeichers in Verbindung mit Timingproblemen.
Die Funkuhr ist nicht angeschlossen. Ob da eine fehlerhafte Übernahme 
erfolgt ist, kann ich nicht sagen. Eine Optimierung wollte ich dafür 
erst später vornehmen.
Beim Senden hatte ich gelegentlich das Problem, daß erst nach dem 8. 
Zeichen angefangen wird, zu senden (Uhrzeit). Es geht aber kein Zeichen 
verloren.
Vielleicht können das andere im Mega32 nachvollziehen. Ich habe schon 
manchmal den Eindruck, daß der Chip defekt ist. Verify ist aber OK.

mfg

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuch mal den Code in einzelne Module zu zerlegen, z.B. wie ich es in 
meinem Bootloader-Beispiel gemacht habe.

Dein Spaghetticodemonster macht es einem sehr schwer, da durchzusehen.


Peter

Autor: Quehl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ja, das habe ich mir schon gedacht. In einem früheren Thread hatte ich 
nur die wesentlichen Schnipsel gepostet und hatte keine Antwort 
bekommen. Auf eine pers. Nachfrage wurde mir gesagt, daß das ohne 
vollständigem Code nicht ablauffähig ist und darum nicht kontrolliert 
werden kann.
Weil ich nicht weiß, an welcher Stelle der Fehler auftritt, konnte ich 
hier nur den Gesamtcode posten.
Es wäre zu betrachten die Interruptroutinen, die in der Interrupttabelle 
freigeschaltet sind, die Initialisierung, das Mainprogramm mit Funkuhr, 
Senden und Empfangen. Der Interrupt vom Funkuhrtimer sind 8ms. Die UART 
läuft mit 38400 bps, 8MHZ Takt.

Ich hatte auch schon daran gedacht, Senden abzuschalten oder die Funkuhr 
besser zu überbrücken. Aber als Ergebnis kann nur kommen, es liegt am 
Empfangspuffer oder der Funkuhr. Und dann suche ich weiterhin 
vergeblich. Darum habe ich auf diese Aufteilung verzichtet. Sicherlich 
könnte ich alles mögliche rausnehmen, aber dann ist der Fehler auch 
nicht zu finden, weil jedes Teil für sich funktioniert.

mfg

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.