Project start: March 2020
Last updated: January 2024
Flipdot
Elektromechanische Segmentanzeigen faszinieren mich schon eine ganze Weile.
Rasterdisplays mit individuel steuerbaren Bildpunkten sind dabei sehr universel verwendbar und beschränken sich im Gegensatz zu Beispielsweise Splitflap Anzeigen nicht nur auf Zahlen und Buchstaben.
Konkret geht es hier um Flipdotdisplays.
In freier Wildbahn waren sie oft als Anzeige der Linie bei Bussen und Bahnen, dynamische Fahrgastinformation an Busbahnhöfen oder groß Fluginformation an Flughäfen zu finden bis sie durch LCD und LED Technologie abgelöst wurden.
So traf es auch die Anzeigen der Berliner Trams.
Glücklicherweise konnte einige Flipdot Module davon gerettet werden und fanden Verwendung in einer
Interaktiven Installation auf dem 36C3, dem
Fluepdot.
Drei dieser Module fielen dabei in meine Hände. Vielen Dank an die Projektverantwortlichen für das Überlassen der drei ausrangierten Module und Fabian für das Nachfragen und mitbringen.
fluepke (Fabian Luepke) hat dazu die Module reverse engineered und eine Platine inklusive Software entworfen. Zu finden auf
github.com/Fluepke/Fluepdot .
Nachfolgend ein paar Fotos von der Fluepdot Installation auf dem 36C3.
Anfang 2020, als ich die Module ausprobieren wollte, funktionierte die dort dokumentierte Ansteuerung mit einem ESP8266 auf meinem Breadboard nicht richtig. Mittlerweile sieht die Dokumentation und Steuerplatine deutlich fortgeschrittener aus.
Mangels Verständnis über die Ansteuerung dieser Flipdot Module entschied ich mich sie selber nachzuvollziehen und eine Steuerung zu entwerfen.
Ein Modul besteht aus 25 Spalten x 16 Zeilen.
Jedes Flipdot ist ein 10 mm x 10 mm groß und diagonal getrennt in schwarz und gelb fluoreszierend. Mit UV Licht leuchten sie dadurch hell grün.
Darauf befestigt ist ein dreieckiges Plättchen mit schwarzer Rückseite und gefärbter Vorderseite. Diese klappe ist so befestigt, dass sie diagonal umklappen kann. Ein kleiner Magnet ist dazu darin eingelassen.
Hinter jedem dieser Bildpunkte befindet sich eine Spule mit Kern. Fließ kurzzeitig ein Strom durch diesen Elektromagnet richtet sich das Plättchen aufgrund des Permanentmagneten entsprechend dem Magnetfeld aus und klappt um.
Je nach Polarität erscheint das quadratische Element komplett schwarz oder gelb.
Ein Modul besitzt 400 solcher Punkte und Elektromagnete, welche seperat voneinander angesteuert werden müssen.
In den Trams der BVG waren mehrere dieser Module nebeneinander geschaltet und ergaben eine Anzeige mit 16 Zeilen. Ausreichend fü Zahlen, Zeichen und Buchstaben.
Jedes Modul besteht aus zwei PCBs. Auf einem sitzen die Spulen zusammen mit einer SMD Doppeldiode.
Die zweite Platine, beschriftet mit 37623.0, wird von hinten aufgesteckt und beinhaltet die Spaltentreiber als 25 diskrete Halbbrücken.
Diese Halbbrücken werden von Schieberegistern angesteuert. Die Daten davon müssen von außen zugeführt werden.
Die Zeilentreiber wa¨ren auf der Steuerung der gesamten Anzeige zu finden. Diese haben wir jedoch nicht.
Die Zeilen werden mittels Wannenstecker über alle Module hinweg verbunden.
Um das Pinout der Anschlüsse zu verstehen und wie die Signale zum Umschalten der Dots aussehen habe ich die Platine von beiden Seiten Fotokopiert.
Damit konnte ich die in Kicad bereits nachgezeichneten Leiterbahnen rot markieren. Die Arbeit von fluepke war eine große Hilfe einige der Schaltungen schneller zu verstehen.
Zunächst habe ich die vorhandenen integrierten Schaltungen recherchiert und deren Pinbelegungen notiert.
Um nicht jedes Mal mit der Lupe die Beschriftung lesen zu müssen war ein Lageplan sehr hilfreich.
IC Übersicht Notizen:
Flipdot_IC.PDF
Dann ging es ans Nachzeichnen. Bahn für Bahn, Bauteil für Bauteil.
Heraus kam folgender Schaltplan:
20231027_schematic_annax37623.PDF
Kicad Files und weitere Informationen im Repo unter:
git.ctdo.de/interfisch/flipdot/src/branch/master/reverseengeneering
Bevor wir uns sie Schaltung genauer angucken möchte ich kurz auf die Verschaltung der Elektromagnete eingehen, da diese nicht ganz wie erwartet aussieht.
Die Spalten werden im Folgenden mit Xn bezeichnet. Bei 25 Zeilen gibt es demnach X0 bis Xp.
Entsprechend nennen wir die Zeilen Y0 bis Yf.
Die Skizze zeigt, wie die Spulen angeschlossen sind. Das mit A7 beschriftete SOT-23 Bauteil ist ein BAV99 und enhällt zwei Dioden.
Darauf wird klar, dass sich die Flipdots nicht mit zwei Halbbrücken an Zeilen und Spalten betreiben lassen.
Ein einzelner Punkt lässt sich nur mit U_Yn > U_Xn umflippen. Und zwar auf die gelbe Seite.
Damit das Magnetfeld umgekehrt wird kann der Stromweg nur von Xn nach Clear sein.
Der mit "Clear" bezeichnete Anschluss ist hinter allen Spulen des Moduls parallel verbunden und an dem Stecker herausgeführt.
Dies macht die Steuerung einfacher, da die Zeilentreiber keine Halbbrücke benötigen sondern nur High-Side schalten m¨ssen.
Gleichzeitig lassen sich so nur ganze Spalten auf schwarz flippen, wenn U_Xn > U_clear.
Bei einer Anzeige, die nur alle paar Minuten den kompletten Anzeigetext ändern muss ist dieser Kompromiss nachvollziehbar und erklärt auch das typische refresh Muster, bei dem erst von links nach rechts die Anzeige schwarz wird und sich anschließend erst reihenweise aufbaut.
Verfolgen wir die Ansteuerung mit diesem Wissen einen Schritt zurück zu den Halbbrücken der Spalten.
Jede davon besteht aus einem BD419 NPN Transistor für die High-Side und einem BD439 für die Low-Side.
Vorwiderstände an der Basis der Transistoren sind in den Widerstandsnetzwerken zu finden.
In meinem Plan sind die Signale mit beispielsweise
BHP für Bridge_High_P oder
BLF für Bridge_Low_F beschriftet.
Getrieben werden die Transistoren
QHn und
QLn durch Darlinghton Arrays ULN2004.
Das zu
BHP korrespondierende Signal heisst
IHP, zu
BLN gehört
ILN etc.
Weiter zurück in der Signalkette finden wir die CD4015 Schieberegister.
Da jedes nur 4-Bit abdeckt gibt es sieben Stück davon.
Das erste Bit (bzw. das zuletzt gesendete Bit) setzt
IH0, das nächste
IL0, dann
IH1, usw.
Dabei werden die Signale, welche die Low Side Transistoren steuern, inventiert womit im Resetzustand alle Transistoren aus sind.
Nachfolgend eine Übersicht, welches Bit mit welchem IC und Pin korrespondiert und die damit angesteuerten Transistoren.
|
|
Part |
Pin |
Bit |
Name |
USR1B |
Q1/13 |
0 |
H0 |
|
Q2/12 |
1 |
~L0 |
|
Q3/11 |
2 |
H1 |
|
Q4/2 |
3 |
~L1 |
USR1A |
Q1/5 |
4 |
H2 |
|
Q2/4 |
5 |
~L2 |
|
Q3/3 |
6 |
H3 |
|
Q4/10 |
7 |
~L3 |
USR3B |
Q1/13 |
8 |
H4 |
|
Q2/12 |
9 |
~L4 |
|
Q3/11 |
10 |
H5 |
|
Q4/2 |
11 |
~L5 |
USR4B |
Q1/13 |
12 |
H6 |
|
Q2/12 |
13 |
~L6 |
|
Q3/11 |
14 |
H7 |
|
Q4/2 |
15 |
~L7 |
USR4A |
Q1/5 |
16 |
H8 |
|
Q2/4 |
17 |
~L8 |
|
Q3/3 |
18 |
H9 |
|
Q4/10 |
19 |
~L9 |
USR3A |
Q1/5 |
20 |
HA |
|
Q2/4 |
21 |
~LA |
|
Q3/3 |
22 |
HB |
|
Q4/10 |
23 |
~LB |
USR5B |
Q1/13 |
24 |
HC |
|
Q2/12 |
25 |
~LC |
|
Q3/11 |
26 |
HD |
|
Q4/2 |
27 |
~LD |
|
Part |
Pin |
Bit |
Name |
USR7B |
Q1/13 |
28 |
HE |
|
Q2/12 |
29 |
~LE |
|
Q3/11 |
30 |
HF |
|
Q4/2 |
31 |
~LF |
USR6B |
Q1/13 |
32 |
HG |
|
Q2/12 |
33 |
~LG |
|
Q3/11 |
34 |
HH |
|
Q4/2 |
35 |
~LH |
USR7A |
Q1/5 |
36 |
HJ |
|
Q2/4 |
37 |
~LJ |
|
Q3/3 |
38 |
HK |
|
Q4/10 |
39 |
~LK |
USR6A |
Q1/5 |
40 |
HL |
|
Q2/4 |
41 |
~LL |
|
Q3/3 |
42 |
HM |
|
Q4/10 |
43 |
~LM |
USR5A |
Q1/5 |
44 |
HN |
|
Q2/4 |
45 |
~LN |
|
Q3/3 |
46 |
HO |
|
Q4/10 |
47 |
~LO |
USR2B |
Q1/13 |
48 |
HP |
|
Q2/12 |
49 |
~LP |
|
Q3/11 |
50 |
x |
|
Q4/2 |
51 |
x |
USR2A |
Q1/5 |
52 |
x |
|
Q2/4 |
53 |
x |
|
Q3/3 |
54 |
x |
|
Q4/10 |
55 |
x |
|
Die Platine hat zwei Stecker auf der Vorderseite.
Einen 34 poligen Wannenstecker und einen 4 poligen Printstecker.
Zweiterer ist lediglich an verschiedenen Stellen der Datenpins der Schieberegister angeschlossen.
Pin 4 ist dabei der Dateneingang
Data_in des Moduls an Q1 Pin 13.
Pin 3
Data_out ist der Output des letzten Schieberegisters und kann beispielsweise mit dem Input des nachfolgenden Moduls verbunden werden.
Daneben gibt es noch einen Datenoutput bei Bit 40 (der Ausgang von USR7A). Ich vermute es gab auch Module mit fünf Spalten weniger.
Zuletzt an diesem Stecker befindet sich Pin 1, welcher direkt mit Pin 30 des Wannensteckers verbunden ist.
Ich nutze ihn, und vermutlich war es auch so gedacht, so, dass das erste Modul die Schieberegisterdaten über Pin 30 des Wannensteckers bekommt.
An diesem Modul verwende ich an dem Printstecker, bei dem Pin 1 und 4 verbunden sind. Pin 3 geht dann zu Pin 4 vom nachfolgenden Modul usw.
Clock und Reset der Schieberegister kommt über den Wannenstecker Pin 34 und Pin 31.
Vin an Pin 29 ist der Spannungseingang zu einem LM7812. Hier sollten daher mindestens 13,5V anliegen.
Die gesamte Platine arbeitet mit einer Logikspannung von 12V. Nicht sonderlich kompatibel zu aktuellen Microcontrollern.
Masse für die ICs
VSS befindet sich an Pin 33 und 32.
An Pins 25 bis 28 und 21 bis 24 liegt die Spannungsversorgung, mit der die Spulen angetrieben werden.
Diese habe ich hier mit 12V beschriftet, tatsächlich kann eine etwas höhere Spannung nötig sein.
Ein etwas anders aussehendes Modul flippt beispielsweise erst ab 14.5V zuverl&aouml;ssig.
Pin 17 bis 20 sind direkt mit den weiter oben beschriebenen
Clear Signalen verbunden.
Daran wird auf der noch zu erstellenden Platine der Transistor zum schwarz-flippen der Dots angeschlossen.
Verbleiben nur noch Pins 1 bis 16. Diese sind wie an ihrer Bezeichnung zu erkennen mit den Spalten der Flipdot Matrix verbunden.
Nachher wird es ein Flachbandkabel mit mehreren Wannensteckern geben, welches alle Module parallel verbindet.
Dadurch sind alle Resets, Clocks, Spannungsversorgungen und Spalten durchverbunden.
Auf der Platine befindet sich noch ein CD4013 Dual D-Flip-Flop. Dieser dient nach meinem Verständnis zum initialen Reset der Schieberegister.
Row Driver Board
Soweit zu der vorhanden Hardware.
Wie zu sehen fehlen die Zeilentreiber. Diese wären auf der Steuerplatine einer kompletten DFI Anzeige zu finden.
Aufgrund der vereinfachten Clear Schaltung zum schwarz flippen der Dots müssen die Zeilen nur nach Masse gezogen werden.
Hier verwende ich zwei TBD62783 Transistor Array ICs.
Die 16 Zeilen passen hier wesentlich schöner an zwei 8-Bit HC595 Schieberegister.
Logikspannung ist hier 5V.
Nachfolgend noch einmal der Wannenstecker. Diesmal von der Seite wo die Signale und Spannungen her kommen werden.
Data, Clock und Reset der Spaltentreiber werden mittels diskreter Transistorschaltung nichtinvertierend im Spannungslevel von 5V auf 12V angepasst.
Clear sowie die Versorgungsspannung der Spulen
Vdrive ist schaltbar ausgelegt.
Etwas dickere Transistoren BD138 und ein BD139 sollten den kurzzeitigen Ströne von etwa 1A standhalten können.
Vdrive machte ich als Sicherheitsfeature schaltbar. Damit nur nach gesetzten Spalten und Zeilen die Spulenspannung für eine definierte Zeit aktiviert wird.
Die Steuerung übernimmt ein ESP32. Dieser hat genügend GPIO pins und WLAN zur späteren Steuerung und Einbindung ins IoT via MQTT.
Der Logikpegel ist jedoch 3.3V! Da die beschriebenen Schaltungen am zuverlässigsten mit 5V funktioniert haben nutze ich einfach einen TXS0108 Levelshifter IC.
Insgesamt sind durch den Microcontroller folgende Signale zu steuern:
- Clear (Rücksetzen einer selektierten Spalte)
- Drive (Aktivierung der Spulenspannung)
- Clock Column
- Data Column
- Reset Column
- Clock Row
- Data Row
- Latch Row
- Output Enable Row
Nachfolgend der fertige Schaltplan der Platine zur Ansteuerung der Flipdot Module.
PDF:
20231028_driverboardAnnax37623.pdf
Diesen Schaltplan habe ich parallel zum Aufbau der Schaltung auf dem Breadboard gezeichnet.
Teilweise lagen mehrere Monate zwischen einzelnen Fortschritten an der Schaltung. Der Schaltplan war bei der Wiedereinarbeitung eine große Hilfe.
Nachdem der Code soweit funktional war, dass definierte Muster nacheinander angezeigt werden konnten, wollte ich die Hardware zusammenbringen.
Das Breadboard mit den vielen empfindlichen Kabeln und aufgestellten Flipdot Modulen war kein Dauerzustand und auch mit der Grund, warum sich das Projekt so lange hinzog.
Zunächst zur Platine. Der Schaltplan stand bereits. Das PCB war auch an einem Nachmittag erstellt. Und Löten macht ja sowieso Spaß.
Die Module werden später nebeneinander montiert.
Ein Flachbandkabel mit Wannensteckern an den entsprechenden Stellen wird hinter den Modulen entlanggeführt und am Ende an das "driverboard" angesteckt.
Wie beschrieben kommt auf das logisch erste Modul an den Printstecker eine Brücke, um Pin 30 des Wannensteckers mit Data In der Schieberegister zu verbinden.
Von dort hüpft das Kabel vom Output zum Input des nächsten Moduls.
Bevor die Module fest verbaut werden musste ich mich noch um ein paar fehlende Flipdot Klappen kümmern.
Dazu habe ich eine zwecks Ausmessen ausgebaut.
Die FreeCAD Zeichnung und STL ist im unten verlinkten Git zu finden.
Die Ersatzklappe kommt aus dem Resindrucker. Die features sind zu fein, für einen üblichen FDM Drucker.
Zudem ist das Teil weniger als 1mm dick und wäre aus PLA oder PETG zu flexibel.
In die Aussparung musste ein sehr flacher Magnet geklebt werden. Dazu habe ich den kleinsten und dünnsten Neodym Magneten gekauft und mit Hammer und Meissel geviertelt.
Eingeklebt ist er mit Sekundenkleber.
Die andere Seite soll ein ähnliches Neongelb bekommen.
Zunächst küere ich mich um eine weiße Grundfläche.
Mit Sekundenkleber wurde etwas Papier aufgeklebt und mit Schleifpapier angerauht. Dadurch wird es schonmal deutlich weißer als das schwarze Material.
Das beste Ergebnis erzielte ich mit fluoreszierendem neongelben Pigment.
Aufgetragen habe ich es auf dünnen Schichten Sekundenkleber und wiederholten Abschleifen, um die Gesamtdicke nicht zu stark zu beeinflussen.
Die Rückseite bekamt mit einem schwarzen Edding eine extra Farbschicht.
Der Grund warum die Klappen fehlten waren beschädigte oder teilweise abgebrochene Haken an der Front.
Einen davon habe ich mit Sekundenkleber und etwas Draht repariert.
Der Rahmen wird aus 19mm Eiche entstehen.
Weil die Flipdots sonst recht laut und ungeschützt sein werden kommt eine 6mm dicke Glasplatte vorne vor.
Im Rahmen sind Nuten eingesägt, in welche Glasplatte, Platinen und Rückwand bzw. Wandhalterung eingeschoben werden.
Eine Zeichnung des Zuschnitts hier:
20230223_Flipdot_Rahmen.pdf
Rundrum habe ich etwas Spiel gelassen. Ich gleiche die Freiräume lieber mit Schraumstoff oder 3D Druck Einsätzen, wie beim Glas, aus, als alles zusammenzupressen.
Jetzt konnten die Module nebeneinander in den Rahmen eingesetzt werden.
Zu diesem Zeitpunkt habe ich mich weiter um die Software gekümmert, die bisher nur ein proof of concept war.
Das Display soll in der Wohnung hängen und als Anzeige für diverse IoT bezogene Informationen dienen.
Benachrichtigungen wie "Waschmaschine Fertig", "Co2 zu hoch", "Zigbee Schalter Batterie leer" oder ganz banal die Uhrzeit.
Ein Stapel verschieden dicker holzplatten passt in zwei der hinteren Nuten. Diese Blöcke dienen als Wandhalterung.
Das gesamte Display kann darauf eingesetzt werden und sitzt damit bündig an der Wand.
Hier im Bild ist es in der Küche über der Tür zum Flur.