Temperaturabhängige (?) Anzeigefehler Mega8 und DOG-M 162

OP #874303
Lesenswert?
• ▲
▼
Zuerst einmal meinen Dank an das Forum, besonders an die Profis, welche 
mit ihrem Fachwissen eine absolute Hilfe sind! Ohne die tollen Beiträge 
hätte ich meine µC Basteleien niemals geschafft.

Mein erstes µC-Projekt ist ein ATMega8 an dem ein DOG-M 162 LCD, ein 
DS18B20 und ein paar binäre Eingänge angeschlossen sind. Der Mega 8 
läuft mit dem internen Takt, welchen ich auf 8 MHz eingestellt habe, das 
Display wird im 4 Bit Modus mit 5V betrieben. Das Programm ist in C 
geschrieben, zur Ansteuerung des DOG-M nutze ich die Bibliothek von 
Peter Fleury, wobei ich die Startprozedur und einige Funktionen 
angepasst habe.

Zu meinem Problem: Bisher funktionierte fast alles prima, es gab nur 
alle paar Stunden einen Positionierungsfehler des Cursors, d.h. ein 
Ausgabewert, welcher sekündlich auf das Display gegeben wurde, erschien 
an der falschen Stelle im Display.
Ich habe die Ursache nicht finden können und das Programm dahingehend 
geändert, daß die eigentlich unverändert angezeigten Inhalte alle paar 
Sekunden ebenfalls neu ausgegeben und mögliche falsche Ausgaben mit dem 
richtigen Wert überschrieben werden.

Als das Wetter wärmer wurde, hatte ich auf einmal alle paar Sekunden bis 
Minuten einen Anzeigfehler. Dabei werden einige Positionen scheinbar 
immer einwandfrei angezeigt und andere häufig fehlerhaft, obwohl die 
gleiche Routine aufgerufen wird. Es gibt bisher keinen einzigen 
Zeichenfehler, nur die Ausgabeposition ist manchmal an der falschen 
Stelle.

Soweit zu den Symptomen, als Ursache vermute ich natürlich erst einmal 
ein Temperaturproblem. Wieso aber werden die Zeichen bisher immer 
korrekt ausgegeben, nur die Ausgabeposition ist fehlerhaft? Warum 
funktioniert es meistens, aber nicht immer? Sollte ich einen Quarz 
einsetzen statt dem internen Taktgenerator?

Kennt jemand das Problem oder hat eine Idee, was ich probieren könnte?

Vielen Dank schon einmal.

Parker
#878209
Lesenswert?
• ▲
▼
Klingt danach, daß Du versuchst aus nem Interrupt und aus dem Main 
gleichzeitig auf das LCD zu schreiben. Sowas muß schiefgehen.
Das LCD darf nur exklusiv von einem Prozeß benutzt werden.


Wenn man es optimal gut machen will, dann reserviert man einen 
Textspeicher (2*16=32Byte) und schreibt nur dort hinein.

Damit können verschiedene Prozesse völlig konfliktfrei auf verschiedene 
Bereiche schreiben.

Und dieser Textspeicher wird dann alle 200ms von einem Timerinterrupt 
auf das LCD ausgegeben.
Die 200ms verhindern ein störendes Flackern, wenn sich ein Wert ständig 
ändert.


Peter

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.