Decoder für Viessmann Multiplex-Signale
#arduino #arduino nano #dcc #decoder #signale #viessmann
Achtung: Dieses Projekt ist noch nicht abgeschlossen. Alle hier aufgeführten Informationen, Schaltpläne und Code sind daher mit Vorsicht zu genießen und funktionieren unter Umständen noch nicht richtig.
Es handelt sich um einen DCC-Decoder für 4 Multiplex-Signale von Viessmann. Der Decoder basiert auf einem Arduino Nano.
Funktionen
- Ansteuerung von bis zu 4 HV-Signalen, jeweils optional mit Vorsignal am Mast
- KS-Signale wären theoretisch auch möglich, sind aber noch nicht implementiert, da ich keine zum Testen da habe
- Automatische Erkennung der Signaltypen beim Einschalten
- Alle Signalbilder schaltbar, inklusive “dunkel”
- Sanftes Überblenden zwischen den Signalbildern
- Steuerung über DCC-Weichenbefehle
- Separate Adressen pro Signal und Vorsignal
Adresseinstellung
- ggf. neue Signale anschließen und den Dekoder neu starten, indem der Reset-Knopf auf der Arduino-Platine gedruckt wird. Dadurch werden die neu angeschlossenen Signale erkannt.
- Es darf nun kein Fahrbetrieb mehr stattfinden und keine (anderen) Weichen und Signale geschaltet werden!
- Den Adressprogrammierknopf einmal drücken -> die LED auf der Platine fängt an zu blinken.
- Das erste angeschlossene Hauptsignal fängt an, nacheinander alle Signalbilder durchzuschalten.
- Möchte man die Adresse des Signals nicht ändern, drückt man einfach den Adressprogrammierknopf nochmal. Andernfalls sendet man einen Weichenbefehl mit der Digitalzentrale. Das Signal übernimmt dann die gesendete Adresse.
- Jetzt fängt das nächste Signal an alle Signalbilder durchzuschalten. War am Mast des Hauptsignals ein Vorsignal angeschlossen, fängt dieses an die Signalbilder durchzuschalten.
- Nun sendet man die Adresse des nächsten Signals wie in Schritt 5 beschrieben.
- Wenn alle angeschlossenen Signale neue Adressen erhalten haben, hört die LED auf der Platine auf zu blinken.
Hardware
Der Schaltplan ist sehr einfach gehalten und bietet Anschlussmöglichkeiten für sowohl die Stecker der Viessmann-Signale als auch eigene Verlängerungsleitungen. In allen Signalleitungen sind 680Ω-Widerstände verbaut. Damit leuchten die Signale immer noch sehr hell. Das DCC-Signal wird über einen 6N137-Optokoppler eingelesen. Die Stromversorgung geschieht an einem separaten Eingang über einen Gleichrichter mit nachgeschaltetem 7805-Linearregler. Man kann beide Eingänge auch parallel schalten, wenn man keine separate Stromversorgung benutzen möchte. Der Programmierknopf ist an A6 angeschlossen. Da dieser Eingang nicht über einen internen Pull-Up-Widerstand verfügt, ist dieser extern vorgesehen.
Eine abgespeckte Version der Platine habe ich derzeit auf Lochraster aufgebaut. Aufgrund der einfachen Schaltung ging das flott von der Hand. Eine “professionell” gelayoutete Platine habe ich ebenfalls erstellt, aber noch nicht fertigen lassen (der Arduino fehlt im 3D-Bild):
Software
Die Software ist für die Arduino-IDE geschrieben und muss mittels dieser in den
Arduino Nano übertragen werden. Falls die Übertragung nicht funktioniert, sollte
man nochmal sichergehen, dass im Menü unter Werkzeuge -> Board
Arduino Nano
ausgewählt und unter Werkzeuge -> Prozessor
Atmega328P
oder Atmega328P (Old Bootloader)
ausgewählt ist. Ob der Bootloader des Arduinos neu oder “old” ist, lässt sich
am besten durch probieren herausfinden; wenn die Übertragung klappt, hat man
den richtigen Eintrag ausgewählt.
Konfigurationsoptionen
Einige Optionen sind nur beim Programmieren des Arduinos und nicht im
späteren Betrieb einstellbar. Die notwendigen Einstellungen befinden sich
allesamt in der Config.h
-Datei und müssen angepasst werden, bevor der
Arduino programmiert wird.
- DEMO
- 0: Normaler Betrieb
- 1: Demomodus aktiv: Alle Signale schalten nacheinander automatisch ihre Signalbegriffe durch.
- 2: Demomodus aktiv: Alle Signale schalten zufällige Signalbegriffe durcheinander.
- DARK_MAIN_SIGNAL_ASPECT
- 0: Hauptsignale können nicht dunkel geschaltet werden.
- 1: Hauptsignale können zusätzlich dunkel geschaltet werden.
- DARK_DISTANT_SIGNAL_ASPECT
- 0: Vorsignale können nicht dunkel geschaltet werden (steht das Hauptsignal auf rot, wird das Vorsignal aber in jedem Fall dunkel geschaltet!).
- 1: Vorsignale können zusätzlich dunkel geschaltet werden.
- USE_SERIAL
- 0: Keine Debug-Ausgaben über den seriellen Anschluss.
- 1: Zusätzliche Debug-Ausgaben über den seriellen Anschluss.
1
2
3
4
5
#define DEMO 0 // 0: no demo, 1: demo (cycle aspects), 2: demo (random aspects)
#define USE_SERIAL 1 // 0: no debug output on Serial, 1: debug output on Serial
#define DARK_MAIN_SIGNAL_ASPECT 1 // 0: no support for darkening main signals, 1: enable darkening main signals
#define DARK_DISTANT_SIGNAL_ASPECT 1 // 0: no support for darkening distant signals, 1: enable darkening distant signals
Config.h | dargestellt sind nur Zeile 4 bis 8 | Quelle | Download
Downloads und weitere Dateien
Alle Dateien befinden sich in meinem GitHub Repository im Ordner MultiplexDecoder.
Enthaltene Dateien:
- AbstractSignal.cpp
- AbstractSignal.h
- AspectMapping.h
- CharlieLed.h
- Config.h
- DigitalPin.h
- Dimming.h
- Hardware/Multiplexdecoder-cache.lib
- Hardware/Multiplexdecoder.kicad_pcb [KiCad Platinenlayout]
- Hardware/Multiplexdecoder.pdf
- Hardware/Multiplexdecoder.png
- Hardware/Multiplexdecoder.pro [KiCad Projekt]
- Hardware/Multiplexdecoder.sch [KiCad Schaltplan]
- LICENSE
- Makefile
- MultiplexDecoder.ino [Arduino Projekt]
- Signal.h
- tests/ex_utils.py
- tests/main.py
- tests/testcase.py