Heute habe ich auch einmal eine Frage:
Im letzten Jahr habe ich für das Projekt eines Diplomanden (ein Niederschlagssammler) nach seinen Vorgaben die elektronische Steuerung mitentwickelt. Wir haben dazu einen ATmega8 verwendet, den ich in BASCOM programmiert habe. Das Gerät steht im Betrieb ja dann irgendwo allein, verlassen und verschlossen in der Prärie und "wie's drinnen aussieht, geht niemand was an". Zumindest für das Ausprobieren des Programms hätte ich aber schon gern eine Anzeige gehabt, die mir zeigt, wo im Programm wir gerade sind und wo evtl. die Säge klemmt, weshalb wir die Steuerung mit einem LCD 2*16 ausgestattet haben.
Die Anschlüsse des ATmega8 waren ein bißchen knapp, weswegen wir die für die ISP-Schnittstelle verwendeten Anschlüsse als normale Ein- bzw. Ausgänge benutzt haben, was auch kein Problem darstellt. Zunächst hatte ich die Steuerung mit einem über Relais angeschlossenen Motor und einigen Optokopplern auf dem Tisch liegen und alles lief prima. Auch das fertige Gerät hat dann gut funktioniert. Das muß ich hier noch einmal explizit sagen: Das Steuerprogramm hat immer tadellos funktioniert! ABER:
Ab irgendeinem (nicht reproduzierbaren) Zeitpunkt zeigte das LCD Unsinn an, unsinnige Zeichen und an den falschen Stellen. - Wie gesagt, im Betrieb ist die Anzeige nicht zu sehen und wird eigentlich nicht gebraucht, aber wenn sie schon einmal dran ist, sollte sie auch richtig funktionieren.
Ich hatte die Fehlfunktion der Anzeige auf elektrische Störungen durch die Motoren, Ventile und einen (zumindest im Einschaltmoment) stromfressenden kleinen Kompressor geschoben und hatte noch ein paar Kondensatoren "fliegend" eingebaut, Auch hatten wir den Steuer- und den Laststromkreis völlig voneinander getrennt; es waren sogar zwei verschiedene Akkus. Trotzdem blieb der Fehler.
Da das Gerät aber von der Steuerung her einwandfrei funktionierte, ist die Arbeit des Diplomanden trotzdem gut bewertet worden und er wurde sogar gebeten, noch ein zweites Gerät zu bauen.
In der Steuerung des zweiten (verbesserten) Geräts habe ich die entsprechenden Kondensatoren von vorn herein schon vorgesehen und wir haben für "sensible" Eingänge abgeschirmte Leitungen verwendet. Diesmal werkelt ein ATmega32, um keinen Anschluß der ISP-Schnittstelle als normalen Anschluß verwenden zu müssen und das LCD hat die Größe 4*20, um mehr Informationen darstellen zu können. Einige kleinere Änderungen an der Steuerung gab es auch. Jedenfalls funktioniert die Steuerung wieder problemlos, aber das Anzeigeproblem ist auch wieder da...
Wir hatten nun die Idee, die Anzeige in 4 Variablen - eine für jede Zeile - im Speicher zusammen zu basteln und bei jeder nötigen Ausgabe die Anzeige ganz zu löschen und alle Zeilen neu anzuzeigen. Das bringt aber auch nichts. Bei einem Versuch blieb dann einmal der Bildschirm sogar ganz leer... Die Steuerung funktionierte aber weiter...
Ich habe nun einmal folgendes versucht: Alle Befehle, in denen ein Motor usw. eingeschaltet werden soll, habe ich auskommentiert, nur die entsprechenden Wartezeiten blieben erhalten. AUCH DA trat das Anzeigeproblem nach einiger Zeit auf. Es hat also definitiv nichts mit elektrischen Störungen durch "Großverbraucher" zu tun.
Bei meinen Überlegungen bin ich auf eine Sache gestoßen, die in BASCOM mit $FrameSize bezeichnet wird. So wie ich das verstehe, ist es ein Speicherbereich im SRAM, der für Zwischenergebnisse, z. B. Umwandlungen von Zahlen in Strings usw. und auch Variablen benutzt wird. Könnte hier der Fehler liegen? Wenn dieser Bereich nicht ausreicht und auf falsche Positionen des Speichers zugégriffen wird und dadurch falsche Befehle und Daten an das LCD gesendet werden? Zwar habe ich schon einmal den Wert $FrameSize (vielleicht zu zaghaft?) vergrößert, aber der Anzeigefehler tritt immer noch auf. Es ist, wie gesagt, mehr ein Schönheitsfehler, sollte doch aber trotzdem funktionieren. Und es wäre ein mächtiger Schritt nach vorn, wenn wir hinter die Ursache dieses Fehlers steigen würden.
Ich verwende auch nicht zum ersten Mal ein LCD mit einem ATmega und noch nie ist ein solches Problem aufgetreten. Und hier nun bei beiden Geräten...??
Falls das noch von Belang ist: Zur Stomversorgung wird ein 12-V-Akku mit 17 Ah verwendet und die 5 V für die Steuerung erzeugt ein kleines Schaltnetzteil von Herrn C... (Nr. 191136). (Es wird jetzt nur EIN Akku verwendet, aber elektrische Störungen, die auf die Anzeige durchschlagen, wurden ja schon ausgeschlossen.)
Hat vielleicht einer der µC-Gurus einen Tip für mich? Das wäre ganz super! Falls noch Informationen fehlen - so geheim ist das Projekt sicher nicht, daß ich nicht noch etwas davon preisgeben könnte.
Danke schon mal für das Lesen des langen Textes bis hierher!