Fangen wir damit an, dass ich zu meinem Geburtstag ein Linienbus (nicht mehr fahrtüchtig) geschenkt bekommen habe.
Es handelt sich um ein Mercedes-Benz CITARO.
Dieser soll nachher auf meiner Koppel als Partylokation dienen.
Warum ein Bus?
Nun ja, da dieser beweglich ist benötigt er keine Baugenehmigungen ;-).
Aber kommen wir nun zu dem eigentlichen Thema.
Die Anzeigen (Front, Seite und hinten) sollen natürlich wieder was anzeigen.
Da der Bus jedoch von seinen Gerätschaften (SICMA & Co) entkernt wurde, müssen wir nun anderweitig versuchen diese zum Laufen zu bekommen.
Das alles soll natürlich auch nicht viel kosten ;-).
Damit ich mich nun in aller Ruhe um die Geheimnisse der Anzeigen kümmern kann, muss diese aus dem Bus raus und ab ins Labor.
Was liegt da also näher als das wir die hintere kleine Anzeige dafür nehmen (28x16 Pixel).
Wie man anhand der Videos erkennen kann, ging ich ziemlich blauäugig an die ganze Sache ran.
Durch querlesen in diversen Foren habe ich was von einem IBIS Busprotokoll gehört und ging durch den 4 poligen Anschluss auch davon aus das es sich hier um jenes welches handeln würde.
Aber dies ist ein kompletter Irrglaube gewesen.
Es handelt sich hier nicht um ein IBIS Busprotokoll!
Das gute war, es stand sogar groß auf dem Gerät das es sich hier um ein Mono-Bus 10 Anschluss handelt.
Im Grunde ist dies jetzt im Nachhinein sogar ein Vorteil, aber dazu später.
Leider half Google auch nicht viel weiter. Man bekam fast immer nur dieselben Foren einträge zu sehen, welche auch kaum Informationen enthielten.
Selbst das groß gelobte ChatGPT half nicht viel. Wie auch, bezieht es sein Wissen auch nur aus dem Internet.
Ein Dokument brachte jedoch etwas Licht in das Dunkle:
Wie haben an diesem Gerät 2 Steckverbindungen.
Ein Rundstecker mit 4 Pole und ein Flachstecker mit 2 Kabelstiften.
Der Flachstecker mit den 2 Kabelstiften dient zur Versorgung der Beleuchtung im dunklen mit den typ. 24V.
Der 4 polige Rundstecker versorgt dann die kompl. Elektronik der Flipdot Anzeige.
Hier sind die Anschlüsse zu sehen:

Die Spannungen dort anzulegen stellt kein großes Problem dar. Notfalls kann man wie ich, auch Batterien dazu nehmen ;-).
Das gute ist ja an diesen magnetischen Flip Dot Anzeigen, das diese auch ohne Spannung ihre Werte behalten und die Anzeige immer zu sehen ist.
Man muss im Grunde nur bei Änderungen die nötigen Spannungen dazu schalten.
Jetzt zu dem wichtigen Teil, die Kommunikation.
Unser Anschluss (PIN 3) müssen wir mit Daten versorgen.
Es wäre so einfach, wäre es ein normaler serieller Anschluss, wie wir ihn von älteren PC's her kennen.
Aber nein, man muss ja die Spannungen ändern.
Die Schaltzentrale in meinem Bus wird nachher ein Laptop sein. Diese ausrangierten Dinger eignen sich perfekt dafür.
Natürlich haben die schon lange kein Comport (9 pol. serieller Anschluss) mehr.
Aber dafür gibt es ja USB - RS232 Konverter. Diese kosten ca. 10€.
Wer will kann auch einen Raspberry PI dafür nehmen, diese haben den auch auf ihrer Stiftleiste.
Ein Comport ist für die Industrie unabdingbar.
Jetzt haben wir also ein Laptop + RS232 ser. Schnittstelle.
Hier mal die Unterschiede zwischen RS232 und Mono Bus:
| RS232 | Mono Bus | |
| Pegel Low (logisch 0) | +12 V | 0V |
| Pegel High (logisch 1) | -12 V | 24V |
Was fehlt ist ein kleines Modul, welches die Spannungen angleicht.
Dieses kostet und nicht mal 1€ und besteht aus 4 Teilen.
1x Diode 1N4004
1x NPN Transistor BC 548
2x Widerstände 1K
Hier der Schaltplan:

Wie der Name Mono-Bus schon sagt, hängen alle Geräte an demselben 4 Adrigen System-Bus.
Der Laptop ist in diesem Mono-Bus der MASTER und alle Anzeigen sind die SLAVE's.
Damit nun der MASTER die entsprechende Anzeige ansprechen kann, haben diese eine Adresse.

Wie oben schon erwähnt, kommunizieren wie hier über ein Comport mit 19200 Baud 8N1.
Die Datenpakete sind folgendermaßen aufgebaut:
Startbyte -
Kommando|Adresse -
Datenbyte ... Datenbyte -
Checkbyte -
Stopbyte
Das erste Byte und das letzte Byte ist immer 7E.
Damit wird der Start und das Ende eines Datenpakets signalisiert.
Das 2. Byte setzt sich aus 4 Bit Kommando und 4 Bit Adresse zusammen.
In unserem Fall gibt es nur 2 Kommandos von Interesse:
9 = Sende 6 Byte Configdaten
A = Sende FlipDot Daten
Danach folgen dann die Datenbytes.
Das vorletzte Byte ist dann ein Prüfsummen Byte (Checkbyte) damit der Empfänger testen kann ob alle Bytes die empfangen wurden richtig sind.
Er werden einfach alle gesendeten Bytes mit FF ge-XOR-t.
Kluge Köpfe sehen schon das man das Startbyte und Stopbyte dabei weg lassen kann, denn 7E XOR 7E = 00 ;-).
Aber was passiert wenn in den Datenbytes ein 7E vorkommt?
Ja, das würde zum beenden des Datenempfangs führen ;-). Aus diesem Grunde werden die zu sendenden Datenpakete auf das Vorkommen von 7E geprüft und ersetzt durch 7D 5E.
Was aber wenn 7D im Datenpaket vorkommt? Ja, auch das hat man im Vorfeld genauestens überlegt und scannt dann vorher noch nach 7D und ersetzt es durch 7D 5D. Klingt ein wenig kompliziert, ist es aber im Grunde gar nicht ;-).
1. scann nach 7D und ersetze es durch 7D 5D
2. scann nach 7E und ersetz es durch 7D 5E
Zuerst muss immer eine Config Paket gesendet werden bevor wir die FlipDot Daten senden können.
Das erkennt man schon allein daran, dass die Error LED erst nach dem Kommando 9 Datenpaket erlischt ;-).
Wie sieht so eine Config Datenpaket aus?
Da man nichts darüber findet, außer das es 6 Bytes sind, habe ich nach dem bekannten Try and Error Prinzip folgendes heraus gefunden:
1. Byte Start Pixel
2. Byte End Pixel
die anderen Bytes einfach auf die Werte lassen, welche ich hier poste. was diese bedeuten, keine Ahnung.
Es gibt bestimmt noch viele Möglichkeiten, jedoch kenn ich diese nicht.
Ich bin glücklich das ich diese Config gefunden habe ;-).
Somit sieht unser erstes Datenpaket wie folgt aus:
7E -
93 -
00 - 07 - 00 - 00 - 00 - 02 -
69 -
7E
Nach dem senden erlischt die ERROR LED und das Modul erwartet die FlipDot Pixel Datenpakete.
Dies sind 3 Bytes.
1. Byte Spaltenadresse
2. Byte 4 Pixel Daten
3. Byte 4 Pixel Daten
Ja genau, 1 FlipDot Pixel benötigt 2 Bit. Somit müssen wir 2 Bytes senden um 8 Pixel zu ändern.
Hier mal die Bitkombinationen:
00 = FlipDot Pixel wird ignoriert, es ändert seinen Zustand nicht
01 = FlipDot Pixel wird ignoriert, es ändert seinen Zustand nicht
10 = FlipDot Pixel wird dunkel (OFF)
11 = FlipDot Pixel wird hell (ON)
Will man also alle 4 Pixel löschen, so sendet man 10 10 10 10 = AA.
Will man alle 4 Pixel setzen, so sendet man 11 11 11 11 = FF
Gesagt getan, das habe ich auch zu meinem Display gesendet mit dem Spaltenwert 00.
Was soll ich sagen, nichts passierte.
Durch die berühmte Try and Error Methode fand ich dann heraus, dass meine erste Spalte mit E0 adressiert war.
Darauf soll man erst einmal kommen.
Also lautet das Datenpaket um die ersten 8 Pixel in der ersten Spalte zu setzen:
7E -
A3 -
E0 - FF - FF -
BC -
7E
Man sollte hierbei noch erwähnen das man nach jedem gesendeten Datenpaket eine Pause von ca. 200ms einlegen sollte.
Da wir nur senden und den Empfang vom Modul nicht auswerten, machen wir eine Höflichkeitspause ;-).
Um nun die erste Spalte komplett Hell zu machen, senden wir folgendes zu Modul:
7E -
93 -
00 - 07 - 00 - 00 - 00 - 02 -
69 -
7E (200ms warten)
7E -
A3 -
E0 - FF - FF -
BC -
7E (200ms warten)
7E -
93 -
08 - 0F - 00 - 00 - 00 - 02 -
69 -
7E (200ms warten)
7E -
A3 -
E0 - FF - FF -
BC -
7E (200ms warten)
Um dann die erste Spalte komplett zu löschen wird dann folgendes gesendet:
7E -
93 -
00 - 07 - 00 - 00 - 00 - 02 -
69 -
7E (200ms warten)
7E -
A3 -
E0 - AA - AA -
BC -
7E (200ms warten)
7E -
93 -
08 - 0F - 00 - 00 - 00 - 02 -
69 -
7E (200ms warten)
7E -
A3 -
E0 - AA - AA -
BC -
7E (200ms warten)
Um Zeit zu sparen senden wir die erste Konfig und senden danach 28 Spaltenpakete für die oberen 8 Pixel, danach kommt das Konfigpaket für die unteren Pixel und dann die 28 Spaltenpkete für die unteren 8 Pixel.
So viel zur Theorie. Nun wollen wir es ja auch praktisch testen ;-).
Wie wohl die wenigsten wissen, haben wir unter Windows schon alles um EXE Dateien zu erstellen.
Irgendwann wurde unter Garantie schon das .NET Framework installiert, da viele Programme damit arbeiten.
Was also liegt da näher, als das wir uns dessen auch bedienen ;-)
Zum Schreiben der Programme reicht das hauseigene Notepad. Aber wer es schöner mag sollte sich Notepad++ installieren.
Ein einfacher Texteditor reich also um unsere Programme in C# zu schreiben.
Mit dem Compiler von .NET Framework erstellen wir danach ein EXE File welches wir dann ausführen können.
Der Compiler ist auch immer so Nett uns auf eventuelle Fehler hinzuweisen ;-).
Ich habe nun ein einfaches Programm geschrieben, welches unsere Anzeige zum Laufen bringt.
Hier ist das Programm dazu:
Nun haben wir alles um endlich ein Bild auf unserer Anzeige zu zaubern.
Wie anfangs schon erwähnt, haben wir gegenüber dem IBIS System den Vorteil, das wir nun selber Pixel für Pixel bestimmen können was da angezeigt werden soll.
Da wir nur 2 Farben haben (AN,AUS bzw. Schwarz, Grün) machen wir auch nur ein 2 Farben Bild.
Wir können es sogar mit dem hauseigenen Paint von Windows erstellen ;-).
Ich persönlich nutze dafür GIMP.
Aber es bleibt jedem selber überlassen mit was er es gestalten möchte.
Wir erstellen nun ein Bild in der Größe von 28x16 Pixel und 2 Farben.
Dann lassen wir unserer Kreativität freien Lauf :-).
Wichtig ist nur, dass wir es am Ende als 2 Farben BMP abspeichern.
Denn dort wird es 8 Pixel = 1 Byte abgespeichert, so das wir es mit unserem C# Programm perfekt auslesen können um es dann zur Flip Dot Anzeige zu übertragen.
Hier mal mein gemaltes Bild ;-)



Die seitliche Anzeige und die vordere Anzeige bestehen im wesentlichen auf 4 einzelnen 28x16 Flip Dot Anzeigen, welche miteinander verbunden wurden.
Dabei gelten folgende Adressen für die einzelnen Anzeigen:
1. Anzeige Adresse: 0x80-0x9B
2. Anzeige Adresse: 0xA0-0xBB
3. Anzeige Adresse: 0xC0-0xDB
4. Anzeige Adresse: 0xE0-0xFB
Da wird es mit dem Programmieren ein wenig tricki ;-)
Im Video habe ich es leider falsch wiedergegeben mit der Codierung der einzelnen Segmente. Diese sind im Grunde alle baugleich. Allein die Position bestimmt dann den Adressraum. Man kann diese Module also komplett wechseln, die Adressierung wird bestimmt durch die Einbaureihenfolge.

Hier ist der Ausbau ein wenig komplizierter, da diese Anzeige doch ziehmlich verbaut wurde.
Das Programm für die Front und Seitenanzeige gibt es hier: