Meine Erfahrungen mit Mono-Bus 10

last update 11.05.2026

Vorwort

Bus hinten 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:

The Mono FlipDot-System


Mit diesem Wissen ausgestattet fing ich dann an.

Der elektrische Anschluss

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:

Anschluss

Die PIN's im Rundstecker haben Gottseidank eine Nummer.

1 - weiß +24V
Da werden 24V angelegt für die Flip Dot Magneten, welche dann die magn. Felder auf oder abbauen.
Ich habe es auch mal mit 18V oder 20V versucht, jedoch werden dann einige Dots nicht mehr geschaltet.
Man sollte also schon die kompl. 24V anlegen um Pixelfehler zu vermeiden ;-).

2 - braun 0V / Masse
Da gibt es wohl nicht so viel zu erklären ;-).

3 - grün Daten
Hier ist der interessanteste Teil. Über diese Leitung werden wir unsere Befehle an das Modul senden
Dabei gilt folgendes:
- L (logisch 0) = 0V
- H (logisch 1) = +24V
- Bitrate 19200
- 8 Datenbits, no parity, 1 Stopbit
Das Senden und Empfangen wird hier bidirektional über 1 Leitung abgewickelt.
Da uns aber die Antworten nicht interessieren, kümmern wir uns nur um das Senden ;-)

4 - gelb +8V
Da es sich hier um TTL Schaltkreise handelt, benötigen diese 5V damit sie laufen.
Die angelegten 8V gehen an einem Spannungsstabilisator, welcher daraus die 5V generiert.
Ich habe da auch mal 5V angelegt und die Elektronik lief dennoch.
Ergo, werde ich ein 2€ Zigarettenanzünder USB Charger nehmen, welcher aus den 24V die 5V generiert ;-).

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:

Schaltplan

Die Schaltung ist so einfach, das man nicht mal eine Leiterplatte benötigt.
Dies kann man auf frei schwebend verlöten.
Ich habe einfach ein Nullmodemkabel genommen und dies in der Mitte durchgeschnitten.
So hat man 2 RS232 Buchsen. Einfach Pin 3 an die Diode löten und PIN 5 an Masse.
Funktionsweise ist einfach. Die Diode lässt nur pos. Spannung durch.
Liegt dort also -12V an, kommt nichts durch, der Transistor schaltet nicht und am Ausgang liegen +24V an.
Kommen dann +12V von der RS232, so schaltet der Transistor durch und der Ausgang wird auf Masse gezogen, so das fast 0V am Ausgang sind.
Fertig ist unser Pegelwandler ;-).
Jetzt haben wir also alles soweit, fehlen nur noch die Kommandos um die Anzeige zu schalten.

Die Hardware

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.

schalter

Durch diesen 4-Bit Adresschalter kann man dem Gerät seine Adresse zuweisen.
Rein techn. sind also 16 Adressen (0...F) einstellbar, jedoch sind mir z.Z. nur 4 bekannt.
Wie man anhand der LAWO PDF erkennen kann, sind die Anzeigen in einem Bus wie folgt adressiert:

Adresse 1 = Anzeige Front
Adresse 2 = Anzeige rechts (Einstiegsseite)
Adresse 3 = Anzeige hinten (meine Anzeige hier)
Adresse 4 = Anzeige links (Fahrerseite, wird eigentlich nie verbaut)

Dann gibt es da noch 4 LED's.
Die rote ERROR LED, die grüne OK LED und jeweils die gelbe Senden und Empfangen LED.
Nach dem einschalten leuchtet die grüne und die rote LED.
Die rote ERROR LED erlischt, sobald ein gültiges Datenpaket an das Gerät gesendet wurde.

Die Software

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:

Download App 1


Nach dem herunterladen entpackt ihr das ZIP File. Darin befindet sich die Datei program_source.cs Diese öffnet ihr nun mit einem Texteditor (notepad) und bearbeitet es.
Oben steht der Comport, welchen ihr natürlich anpassen müsst mit eurem Comport. Bei mir war es COM3.
Wenn ihr das dann abgespeichert habt, klickt ihr auf compile.bat. Daraufhin wird das EXE File erstellt. Klickt danach auf die neu erstellte monobus.exe und das Display fängt an zu arbeiten ;-).

Jetzt kommt das Bild auf die Anzeige

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 ;-)

Bild


Mein Programmbeispiel ließt nun aus dem bild.bmp die letzten 64 Bytes heraus, wo die Bildinformationen drin stecken, rechnet es um und sendet es zur Anzeige.

Download App 2


Somit haben wir unser Ziel erreicht und der Bus hat viele Hingucker :-))))))))))))))))

fertig

fertig


Nun folgen die großen Anzeigen

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.

fertig


Die große Frontanzeige

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:

Download App 3


Dabei ist zu beachten das die einzelnen Module nicht durchgehen adressiert sind (es sind ja nur 28 statt 32 Spalten) und hinzu kommt noch das das 2 Bit Bitmap Format auch 2 Bytes pro Zeile zuviel hat.

Der Partybus nimmt Formen an ;-)

fertig fertig fertig fertig fertig