Mechanisches 7-Segment Display

Von einem Tankstellenbauer habe ich ein altes mechanisches 7-Segment Display einer Zapfsäule bekommen. Nun hätte man natürlich die alte Hardware rausnehmen und durch eigene neue ersetzen können… Mein Zeil war aber möglichst viel der Originalhardware zu nutzen. Die 2-Lagige Platine von 1988 wurde offensichtlich mit Klebestreifen Layoutet (sehr schick…!) Die  Datenblätter einiger ICs ließen sich auch noch finden und bald stellte sich heraus, das das intelligenteste auf dem Board wohl zwei 8-Bit Schieberegister sind.

Das war erfreulich, da so die Ansteuerung recht einfach sein sollte, wenn erstmal die Zuordnung der Bits zu Leitungen auf dem PCB geklärt ist. (So dachte ich jedenfalls zunächst…) Ich fing also an die Leitungen nachzuverfolgen und einen rudimentären Schaltplan zu zeichnen.

Schaltplan des 7-Segment Displays
Schaltplan des 7-Segment Displays

Dieser half mir die Funktion der Bits in diesem Logikgrab nachzuvollziehen: Die Segmente werden in einem Register adressiert und im Zweiten ist der Status der einzelnen Segmente kodiert. Zusätzlich gibt es noch eine Leitung die ein mysteriöses Treiber-IC steuert. Leider fand sich kein Datenblatt hierzu, aber die Verkabelung ließ auf eine Art H-Brücke Schließen.

Zur Ansteuerung nutze ich das ATMega32 Entwicklungsboard aus der Campuswoche. Zunächst versuchte ich ein einzelnens Segment zu schalten. Nachdem ich das Programm gestartet hatte, machte es tatsächlich auch „klick“ und ein Element wurde weiß. YAY! Kurz darauf trat allerdings unglücklicherweise der magische Rauch aus einem Bauteil aus. Und wie wir alle wissen funktionieren Bauteile ohne diesen nicht mehr… :/

Es handelte sich um ein Darlington-Array. Scheinbar habe ich versucht das Segment gleichzeitig zu setzten und zu löschen. Wieder was gelernt… 🙂 Nach kurzer Suche fand sich sogar ein Ersatztyp, aber die Versandkosten hielten mich vom umgehenden Bestellen ab. Trotzdem wollte ich das Ding wieder zum laufen bekommen, wo ich doch jetzt schon so weit war. Nach einiger Suche fand ich im Labor tatsächlich einen (fast) passenden Ersatz… „Er hat nur ein paar Beinchen zu viel…“ Statt einem 8-Fach Array hatte ich ein 10-Fach in der Hand. Ein beherzter Griff zum Seitenschneider und schon passte es… XD

Naja, lange Geschichte kurz: Einige Abende mit dem Oszilloskop später und ich konnte tatsächlich gezielt und ohne Geruchsbelästigung Segmente setzen und löschen:

An weiteren Abenden konnte ich die Ansteuerung noch weiter optimieren. Nun wird die Geschwindigkeit der Datenübertragung dynamisch angepasst: Gewartet wird nur, wenn sich das Segment mechanisch bewegen muss. Ansonsten kann die volle Frequenz des Schieberegisters genutzt werden. Auch habe ich einen netten Übergangseffekt gebaut:

Der Sourcecode ist hier auf GitHub zu finden.