Hallo Leute, ich habe ein 16X2-Zeichen/Zeilen - LCD-Modul (Conrad-Elektronik)an ein 80C552-System angeschlossen. Da die externe Reset-Beschaltung - bestehend aus einem Widerstand nach Masse und einem Kondensator nach Betriebsspannung (+5Volt) schlecht funktioniert hat, obwohl ich einen hochwertigen Kunststoff-Folien-Kondensator von 10 Mikro-Farad eingesetzt hatte, kam ich auf die Idee, den integrierten Wachhund einzusetzen, der, wenn ein Pin des Controllers auf Masse gelegt wird, ständig in Betrieb ist. Damit erreichte ich einen einigermassen funktionierenden Reset (vielleicht liegt es daran, daß das System mit langen Drähten zusammengesteckt ist oder der Oszillator nicht sauber anspringt oder ...); nun muß ich jetzt aber regelmäßig den Wachhund rücksetzen, sonst gibt es einen periodischen Warmstart. Das ist kein Problem (2-3 Befehle reichen aus). Abfallprodukt des Wachhundes ist der Einsatz als Display-Schoner. Prinzip: Der Wachhund - Timer wird abgefragt. Hat er einen bestimmten Wert erreicht, z.B. hier den Wert 80h (11bit-Prescaler und 8bit-Timer), dann wird er auf 00 gesetzt und ein Speicherplatz von Null ab runtergezählt. D.h. jedesmal, wenn der Wachhund rückgesetzt wird, wird der Speicherplatz um eins abwärtsgezählt. Hat der Speicherplatz (genannt z.B. LCSAVE) den Wert 00 erreicht (abzufragen mit dem Befehl djnz), wird das Display ausgeschaltet (wenn es nicht schon ausgeschaltet war). Für das eigentliche Programm braucht man zwei Bits (Flags). Das 1.Bit kennt den IST-Zustand des Displays. Das 2.Bit kennt den WAR-Zustand des Displays. Diese Flags brauche ich, damit, wenn ich eine Taste drücke, entweder nur der Display-Inhalt zu lesen ist oder gleich eine Aktion zustande kommt. So etwa wie es auf dem Windows-PC läuft (laufen sollte). Ich will das Programm hier nur umreissen; ich habe eines entwickelt, das funktioniert und es ist einfach; es sind nur die zwei Flags nötig sowie ein Register bzw. eine Speicherstelle sowie der Wachhund. Ein Unterprogramm für den Wachhund/Display-Schoner aktivieren, falls nötig. Ein Unterprogramm für die Tasten-Antwort/Display-Schoner-Byte rücksetzen/Display-Zustand festhalten/Display einschalten, falls nötig. Im Hauptprogramm kann das Flag "Display war an/aus-geschaltet"abgefragt werden und entsprechend reagiert werden (keine Reaktion bzw. Aktion Scrollen o.ä.). Die LCD-Module kennen Befehle für Display-Aus und Display-An und man kann sie ausschalten und einschalten. Dabei geht der Display-Inhalt nicht verloren! Das LCD-Display wird möglicherweise geschont, vor allem aber die Batterien/Akkus, mit denen ein CMOS-8bit-System sparsam umgehen sollte.
"Da die externe Reset-Beschaltung - bestehend aus einem Widerstand nach Masse und einem Kondensator nach Betriebsspannung (+5Volt) schlecht funktioniert hat, obwohl ich einen hochwertigen Kunststoff-Folien-Kondensator von 10 Mikro-Farad eingesetzt hatte..." Das hat nichts mit der Qualität des Elkos zu tun, sondern mit dem Prinzip: Bei kurzen Spannungseinbrüchen oder Unterspannung kann sich der Kondensator nicht weit genug entladen, um ein sauberes Reset zu machen. Der interne Watchdog hilft da auch nicht weiter. Deshalb haben richtige Reset-Schaltungen eine Spannungserkennung, die bei jeder Unterschreitung für ein ordentliches Reset sorgt. Ich nehme für professionelle Anwendungen immer den MAX813L. Neuere AVRs haben das intern, nennt sich Brown-Out-Reset, den sollte man grundsätzlich immer enablen. 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.