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


von Wolfram Q. (quehl)


Angehängte Dateien:

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

von Peter D. (peda)


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

von Quehl (Gast)


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

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
Noch kein Account? Hier anmelden.