Viessmann Multiplex Signale
Lichtsignale können sehr viele Signallampen (LEDs) haben. Für eine einfache Ansteuerung würde man für jede LED eine Signalleitung benötigen. Bei einer größeren Anzahl von Signalen ist das ein Problem. Bei zwei LED's wären mit der Masse drei Leitungen erforderlich.

Wenn man Plus und Minus jeweils vertauscht (Abb. links), kann man auf die Masseleitung verzichten. Die untere Abbildung zeigt die Erweiterung des Prinzips mit drei Eingängen und sechs Dioden. Bei vier Eingängen ist eine Ansteuerung von zwölf Dioden möglich. Mit diesem Charlieplex-Prinzip sind bei n-Eingängen n(n-1) LED's ansteuerbar.
Es leuchtet aber immer nur genau eine LED. Für ein bestimmtes Signalbild müssen aber für den Betrachter mehrere LEDs leuchten. Dies erreicht man, indem die LEDs mit einer für das Auge nicht wahrnehmbaren Frequenz nach einander geschaltet werden. Das alles lässt sich mit einem Arduino gut programmieren. Dabei wird die Tristate-Eigenschaft der Ausgänge benutzt. Jeder Ausgang kann die Zustände 0V, +5V oder neutral (sehr hochohmig) annehmen.
Weitere Infos und ein Beispiel für die Steckerbelegung findet man hier ...




Die Multiplex-Programmierung ist ziemlich aufwendig und kompliziert. An einem Arduino können bis zu vier Multiplex-Signale angeschlossen werden. Eine saubere, objektorientierte Programmierung eines Signals ermöglicht ein einfaches Arduino-Programm mit mehreren Exemplaren. Die recht komplizierten Algrithmen der Klasse Multiplex (rechts) bleiben dabei für den Anwender im Verborgenen. Die Implementierung der Klasse wurde bewuss so einfach wie möglich gehalten.
Ich habe an einem Arduino jeweils drei Ausfahrsignale angeschlossen. Das Hauptprogramm kennt außer dem Konstruktor der Klasse Multiplex nur die Methoden frameWriter() und setSignal(byte state).
Den Signalobjekten werden über den Aufruf des Konstruktors die Ardunio-Pins zugewiesen.
Multiplex Signal1( 8, 13, 6, 7);
Multiplex Signal2( 4, 13, 5, 3);
Multiplex Signal3(11, 13, 9, 10);
Die Klasse kennt folgende vier Signalzustände:
Hp0 1
Sh1 2
Hp1 3
Hp2 4
Mit Signal2.setSignal(3) wird beispielsweise das 2. Signal auf grün gesetzt.
Die Methode frameWriter() muss für jedes Signal in der Arduino loop() aufgerufen werden.
FrameWriter schaltet nacheinander die LEDs des gesetzten Signalbildes nach dem CharliePlex-Prinzip an.

Intern werden zwei Signalzustände gespeichert. Immer dann, wenn sich das Signalbild ändert, wird der das aktuelle Signalbild abgedunkelt und danach das neue Signalbild aufgeblendet.
Die Software steht unter GitHub zur Verfügung.