Eine 4-stellige Siebensegment Anzeige

Von einem anderen Bastelprojekt hatte ich noch 4 Siebensegment Displays übrig. Daraus wollte ich einen 4-stelligen Zähler machen. Da die einzelnen Elemente 25 mm hoch sind, bestehen sie intern aus zwei LEDs pro Balken. Das macht eine Ansteuerung mit üblichen TTL Pegeln etwas unhandlich (Durchlass Spannung laut Datenblatt ca. 4,4 Volt). Zudem sollte die Anzeige in der Helligkeit regulierbar sein, ein einfacher 7447 reicht also nicht aus.

Nach 5342 Sekunden

Zuerst hatte ich gedacht, die Segmente über eine Schieberegisteransteuerung mittels Open Collector bzw. Open Drain anzusprechen. Dazu hatte ich in meiner Bastelkiste aber nichts brauchbares und Schieberegister mit Open Collector sind auch nicht leicht zu bekommen.

Der nächste Gedanke war HCT statt TTL Typen zu verwenden. Die vertragen mehr als 5 Volt Betriebsspannung. Der 74HCT595 ist bis zu 7 Volt zugelassen. Das würde zur Ansteuerung reichen. Die Inputs würden auch bei 7V sicherlich noch zuverlässig mit normalen TTL Pegeln zu schalten sein. Allerdings ist die zusätzliche Versorgungspannung etwas unhandlich.

Direkte AnsteuerungDeshalb habe ich mich dazu entschlossen, die Ansteuerung bei 5 Volt, dafür aber ohne Vorwiderstand auszuführen. Für eine kommerzielle Schaltung sicherlich eine unzulässige Vorgehensweise, da sie so sehr stark auf Bauteil- und Versorgungsspannungs-schwankungen reagiert.

Mein Microcontroller liefert auf der 5 Volt Schiene nur 4,8 Volt. Die LEDs benötigen 4,4 Volt und der Mosfet aus dem Treiber benötigt laut Datenblatt zwischen 0,15 und 0,4 Volt. Alles zusammen gibt einen Strom, der zwar noch unterhalb der zulässigen 20 Milliampere liegt (das Display erreicht nicht die volle Helligkeit) aber doch eine gute Anzeige erzeugt. Und es spart noch den Platz für 32 Widerstände. Die Schaltung wird dadurch deutlich kompakter.

Der 74HTC595 bringt noch einen weiteren Vorteil mit: er hat einen Enabled Eingang, den ich mit einem Pulsweitenmodulationsausgang des Controllers verbinden kann. Darüber kann ich ohne weiteren Hardwareaufwand eine Helligkeitssteuerung aufbauen. Im Testprojekt habe ich  die Steuerung dafür verwendet, bei einem Wechsel der Anzeige nicht einfach hart umzuschalten. Statt dessen wird die alte Anzeige kurz ausgeblendet, der Wert gewechselt und die neue Anzeige eingeblendet (ca. 200 Millisekunden). Es ergibt sich daraus eine altmodische Glühlampen-Anmutung.

Damit das Gesamtmodul möglichst klein bleibt, habe ich die Siebensegmentanzeige auf die eine Seite der Platine gesetzt und die Schieberegister auf die andere Seite. Das war ein wenig fummelig, hat aber doch ganz gut funktioniert.

Rückseite

Jetzt fehlt nur noch die Ansteuerung. Ich habe hierfür ein mbed Modul LPC 1768 verwendet. Dieses setze ich gerne für temporäre Aufbauten zum experimentieren ein. Der Vorteil der mbed Umgebung ist, dass es eine sehr komfortable Software zur Ansteuerung der verschiedenen Ein- und Ausgänge gibt.

MainDas Hauptmodul ist trivial. Es wird pro Anzeigestelle eine Struktur initialisiert, welche die Daten für einen endlichen Automaten enthält. Zudem wird eine Interruptroutine aufgesetzt, die alle 5 Millisekunden läuft und den Automaten weiter schaltet.

Jedes Display „kennt“ die Ziffer der aktuellen Anzeige sowie die Ziffer, welche beim Wechsel nach Aus- und Einblenden angezeigt werden soll.

Damit nur die Stellen dunkler werden, die sich verändern, hat jede Stelle seine eigene Pulsweitenmodulation.

ChangeNach der Initialisierung geht das Hauptprogramm in eine Endlosschleife, die einen Zähler weiter schaltet (setInt) und danach jeweils eine Sekunde lang wartet.

Beim Hochzählen muss für jede Anzeigestelle der neue Wert berechnet werden. Wenn er vom aktuellen Anzeigewert abweicht, wird der neue Wert im Feld nextView gespeichert und der endliche Automat gestart, der die Anzeige langsam Aus- und wieder Einblendet. Diese Funktion ist also nach wenigen Mikrosekunden wieder beendet.

Die Aktualisierung der Anzeige sowie das Aus- und Einblenden findet in der Interruptfunktion statt. Diese wird über eine Timer-Variable alle 5 Millisekunden aufgerufen und prüft für alle vier Anzeigestellen den aktuellen Status.

  • 0: normale Anzeige, keine Änderung des Status-Werts.
  • 56 – 105: Anzeige ausblenden. Die Helligkeit ist bei 105 maximal, bei 55 minimal. Bei jedem Schritt den Status um eins herunter zählen.
  • 55: den Wert „nächste Anzeige“ in die aktuelle Anzeige übernehmen und den Inhalt des Schieberegisters aktualisieren.
  • 50 – 1: Anzeige wieder einblenden. Die Helligkeit ist bei 50 minimal, bei 1 maximal. Bei jedem Schritt den Status weiter um eins herunter zählen.

StateMachineIm normalen Betrieb ist der Status 0, es findet keine weitere Aktion statt. Sobald der Ein-Sekunden Timer den Anzeigewert hochschaltet, wird für jede Displaystelle der neue Wert berechnet und im Feld nextView eingetragen. Der aktuelle Anzeigewert darf noch nicht überschrieben werden, da die Anzeige mit dem alten Wert ja langsam ausgeblendet werden soll.

Jede Stelle, die sich verändert hat, bekommt einen Statuswert 105. Daraufhin zählt der Automat bis 55 herunter und verringert dabei die Helligkeit auf Null.

Bei 55 wird das Schieberegister mit dem neuen Wert geladen und der Automat zählt weiter runter. Ab 50 beginnt er damit, die Helligkeit wieder herauf zu setzen. Bei 0 ist dann wieder die maximale Helligkeit erreicht und der Status bleibt bei 0 stehen.

Leider kommt meine kleine Digitalkamera nicht gut mit den stark schwankenden Helligkeitswerten klar und der Autofocus macht sich selbstständig. Ich richtigen Leben ist das Aus- und Einblenden glatter. Das wird wohl teilweise durch die automatische Helligkeitskorrektur der Kamera weggebügelt. Aber man kann den gewünschten Effekt trotzdem noch erkennen.

 

Schreibe einen Kommentar