Lichtsignale

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.

Image

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 ...

Image
Die Entwicklung einer Platine lohnt sich m. E. nicht. Die Anschlusskabel müssen ohnehin verlängert werden. Dazu wurden bei Reichelt  passende vierpolige Stecker ( Artikel-Nr.: BKL 10120738 ) bestellt. Die erforderlichen Vorwiderstände (120 Ohm) wurden direkt am Stecker angelötet und dann mit Schrumpfschlauch gesichert.  Wichtig ist, dass die weiße Markierung angebracht wird.  Damit können die Signle direkt über ein Nano-Screwterminal angeschlossen werden. 
Image
Image
Image
Unter anderem wollte ich für die Signale eine alte Zentrale benutzen, die u. a. die Arduinos mit Strom versorgt. Dazu oben rechts eine  neue DCC-Converter-Platine,  die zur Erzeugung der 5V für die Arduinos einen Stepdown-Converter enhält.

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.  

Image

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.