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
hi Du könntest probieren ob der Fehler mit externem Quartz noch auftritt Tobi
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.