In Bearbeitung
Auf dieser Seite wird ein Funktionsdekoder mit einem ATtiny85-Digispark-Board vorgestellt. Diesen Ansatz habe ich verwendet und die Hardware ergänzt, damit auch CVs in Wagen, die mit diesem Decoder ausgerüstet sind, auch auf dem Programmiergleis programmiert und zurückgelesen werden können. Der damit ausgestattete Dekoder hat dann nur noch 3 Ausgänge, da der 4. Port für das ACK-Signal zum CV-Lesen genutzt wird.
Der ergänzte Arduino-Sketch für die 3-Port-Variante mit ACK ist auf obiger Seite abgelegt, ebenso ein Sketch für 4 Ports ohne CV-Lesemöglichkeit. Das Programmieren kann aber „blind“ auf dem Programmiergleis erfolgen.
Eine gute Informationsquelle zur Programmierung des ATtiny85 ist Wolles Elektronikkiste.
Ich verwende nach ersten Test mit dem im Link erwähnten Upgrade auf die 300ms-Bootzeit nur noch die ISP-Programmierung ohne den Micronucleus-Bootloader.
Nach ersten positiven Versuchen mit einem fliegendem Aufbau und einer ersten Leiterplatte habe ich festgestellt, dass das Zurücklesen nicht immer zuverlässig klappt, wenn ein Stützkondensator angeschlossen ist. Eine zusätzliche Diode verhindert, dass der ACK-Impuls seine Energie aus dem Stützkondensator bezieht.
Die kleine Zusatzplatine wird rückseitig mit Stiften aufgelötet. Nachfolgend der überarbeitete LP-Entwurf mit der zusätzlichen Diode.
Schaltplan
Bestückungsplan
Stückliste
Bestellmöglichkeit der Leiterplatte für Eigenbau bei Aisler
Eine kommerzielle Nutzung ist untersagt.
Hier ein Einbaubeispiel der ersten Version der Platine im Pwgs/Daa-Wagen. Nachträglich wurde die zusätzliche Diode eingefügt, damit auch mit dem Stützkondensator ein CV-Lesen mit dem ACK-Signal zuverlässig funktioniert.
Die oben verlinkte Software-Variante wurde von mir weiterentwickelt. Da ich die USB-Funktion im endgültigen Einbau nicht benötige, verwende ich das Board ohne den Micronucleus-Bootloader sondern mit ISP-Programmierung ohne Bootloader mit dem STK500-Programmer. Für das Board habe ich eine Programmier-Adapter erstellt.
Ohne Bootloader sind ca. 20% mehr Programmspeicherplatz vorhanden, der für zusätzliche Funktionalität genutzt werden kann. Der aktuelle Sketch würde mit 98% Programmspeicher-Nutzung aber noch in den Programmspeicher mit Micronucleus-Bootloader passen.
Diese Funktionen wurden zugefügt:
Informationen und Arduino-Sketch sind auf Github verfügbar.
Dort liegt auch eine ausführliche Funktionsbeschreibung: DCC-Funktionsdekoder (3-Port)
Folgende Funktionen sind aktuell als default konfiguriert:
Wenn auf das Lesen der Konfigurationsvariablen verzichtet werden kann oder ein optionaler Schalter/Jumper möglich ist, dann kann auch Port PB3 als Ausgang genutzt werden. Mit PB3 (AUX2) ist aber kein Dimmen möglich, da an diesem Port kein PWM unterstützt wird.
Die Zusatzplatine wird rückseitig mit Stiften auf das Digispark-Board aufgelötet.
Die Platine kann auch für die oben beschriebene 3-Port-Variante genutzt werden. Der Anschluss ACK muss dann überbrückt werden, PB3 wird dann nur für das ACK-Signal verwendet, AUX2 kann dann nicht genutzt werden.
Schaltplan
Bestückungsplan
Stückliste
Bestellmöglichkeit der Leiterplatte für Eigenbau bei Aisler
Eine kommerzielle Nutzung ist untersagt.
Aus den obigen Erfahrungen wurde eine komplette Dekoder-Platine entwickelt, mit der alle Sketche ausgeführt werden können. Für die 3-Port-Variante muss zwischen den ACK-Lötpads eine Brücke gelegt werden, das letze Anschluss-Pad ist dann nicht nutzbar.
Schaltplan
Bestückungsplan
Stückliste
Bestellmöglichkeit der Leiterplatte für Eigenbau bei Aisler
Eine kommerzielle Nutzung ist untersagt.
Zu den 4-Port-Varianten gibt es auf Github Informationen.
Dort liegt auch eine ausführliche Funktionsbeschreibung: DCC-Funktionsdekoder (4-Port)
Auf der Basis der oben genannten Hard- und Software wurde eine Lichtleiste mit einem ATtiny85 aufgebaut. Diese benötigt ebenfalls keinen Bootloader, wie das Digispark-Board. Die Programierung erfolgt über einen 6-poligen ISP-Stecker mit dem STK500-Programmer. Es wird der gleiche Sketch wie bei der 3-Port-Variante verwendet. Es werden drei Ausgänge genutzt und das ACK-Signal wird beim CV-Lesen erzeugt.
Die Lichtleiste wird in SCHICHT-Rekowagen eingesetzt. Dort sind auch die Leiterplattendaten abgelegt.
Nachdem ich den Funktionsdekoder auf Basis des ATtiny85 für die Beleuchtung meiner Wagen erfolgreich in Betrieb genommen hatte (s.o.), habe ich auf gleicher Basis die Entwicklung eines Sketches für einen Zubehördekoders begonnen, um damit Ausgänge u.a. für Signale zu steuern.
Als ersten Ansatz dafür war ein Arduino-Beispielsketch der NmraDcc-Bibliothek von MRRWA. Dieser wurde dann um die Funktionen zur Ansteuerung der Ausgänge ausgebaut.
Mit den 4-Port-Platinen wie oben wird aus dem DCC-Signal die Spanung für das ATtiny85-Board generiert. An die Ausgänge des ATtiny sind Transistoren angeschlossen, um Verbraucher mit der gleichgerichteten DCC-Spannung versorgen zu können. Es kann optional ein Stützkondensator angeschlossen werden, was für stationäre Verbraucher aber eher nicht notwendig ist. Mit dem weiteren Anschluss ACK kann optional auch ein Lastwiderstand zugeschaltet werden, mit dem einen Ausgang zur Erzeugung des DCC-ACK-Signal genutzt wird. Damit ist dann bei geschlossenem ACK-Ausgang auch Lesen der CV-Werte mit dem Programmiergleis-Anschluss möglich.
Die vier Ausgänge (Ports) können mit DCC-Befehlen aktiviert und deaktiviert werden. Mit der Adresse+1 kann der Port als blinkend eingeschaltet werden. Die Blinkperiode (für alle Ausgänge gleich) ist konfigurierbar von 0,25 … 3,75s.
PORT1 und PORT2 können als alternierend verbunden werden (z.B. Weichen, Signale) und es besteht auch die Möglichkeit, bei PORT1 und PORT2 einen Impuls definierter Länge (0,25 … 8s) zu erzeugen, z.B. bei Weichen ohne Endabschaltung.
Für die Adressierung gibt es unterschiedliche Varianten. Ich habe mit Rocrail und der DCC-Commandstation von DCC-Ex die MADA-Adressierung ohne Probleme verwenden können. Andere Adressierungsarten kann ich mit dieser Commandstation nicht testen.
An einer Z21 sollte es mit der PADA-Adressierung funktionieren, wahrscheinlich jedoch mit einem Offset von +4.
Im Video ein Beispiel für eine Signalsteuerung durch Rocrail und dem LocoIO-Keypad.
Für meine Modellbahn habe ich erstmal folgende Signalbilder mit statischer Anzeige vorgesehen:
Die Signalbilder sind im Rocrail mit den Einstellungen für Mustern für die 4 Ausgänge erstellt worden. Es sind 5 Muster möglich, wenn man Muster „Leer“ auch belegt.
Mit Aktionen können auch weitere Signalbilder erzeugt werden, wie Hl 4 und Hl 7. Ich habe mal testweise diese zwei erzeugt:
Link zu Github
Dort sind auch weitere Informationen verfügbar.
Die Hardware ist die gleiche, wie für den 4-Port-Funktions- und -Zubehör-Dekoder
Der Sketch verwendet die NmraDcc-Bibliothek von MRRWA die über die Arduino-Bibliotheksverwaltung eingebunden werden kann.
Es wird das erweiterte DCC-Paket-Format für Zubehör - Extended Accessory Decoder Control Packet Format - verwendet. Damit sind in den meisten Systemen, z.B. DCC-Ex, 32 Signalbegriffe möglich. Verwendet wird ebenfalls die oben erwähnte Zusatzplatine für 4 Ports oder die Platine des kompletten 4-Port-DCC-Dekoders.
Folgende Signal-Begriffe sind mit den 4 LEDs (statisch und blinkend) für eine Nebenbahn-Strecke möglich:
Es sind folgenden Konfigurationsvariablen (CVs) sind vorhanden:
Im Rocrail wird eine DCC-Adresse eingetragen und es wird die Steuerung mit Begriffen eingestellt.
Im Einstellungsdialog wird dann die Anzahl der zu verwendenden Begriffe eingestellt und das dazugehörige SVG.
Das Feld Begriffsnummer muss fortlaufend sein und im Feld Wert wird die Nummer des Begriffs eingetragen, die im Arduino-Sketch verwendet wird. Im Feld „Begriffs-Namen“ wird die Liste erstellt, die dann im Bediendialog des Signals erscheint.
Es können auch Signale mit weniger auswählbaren Begriffen erstellt werden. Dazu muss das entsprechende SVG mit der Anzahl der benutzten Begriffe erstellt werden und die Liste angepasst werden. Entscheidend ist der eingestellt Wert, welcher zum DCC übertragen wird.