Benutzer-Werkzeuge


modellbahn:umbauten:dcc-dekoder

DCC-Dekoder

In Bearbeitung

DCC-Funktions-Dekoder mit ATtiny85

Funktions-Dekoder mit Digispark-Board

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.

Zusatzplatine 3-Port-Variante

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:

  • Funktionsmapping für zwei Ports.
  • Dimmung der drei Ports

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:

  • F0 Taste schaltet richtungsabhängig beide Schluss-LEDs an PB0 (LV) und PB4 (LR)
  • F1 Taste schaltet Wagenbeleuchtung an PB1 (AUX1), die beiden Onboard-LEDs des Digispark-Boards wurden durch Entlöten des Vorwiderstands deaktiviert.

Zusatzplatine 4-Port-Variante

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.


DCC-Multi-Funktions-Dekoder 4-Port

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)


Funktions-Dekoder auf Lichtleiste

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.


DCC-Zubehör-Dekoder mit ATtiny85

Entwicklungsboard

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:

  • Hl 1 - ein grünes Licht - Fahrt mit Strecken-Höchstgeschwindigkeit
  • Hl 3a - ein gelbes Licht unten, darüber ein grünes Licht - Fahrt mit 40 km/h, dann mit Strecken-Höchstgeschwindigkeit
  • Hl 10 - ein gelbes Licht oben - „Halt“ erwarten
  • Hl 12a - ein gelbes Licht unten, darüber ein gelbes Licht - Geschwindigkeit auf 40 km/h ermäßigen, „Halt“ erwarten
  • Hl 13 - ein rotes Licht - „Halt“

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:

  • Hl 6a - ein gelbes Licht, darüber ein grünes Blinklicht
  • Hl 9a - ein gelbes Licht, darüber ein gelbes Blinklicht

Link zu Github
Dort sind auch weitere Informationen verfügbar.


DCC-Signal-Dekoder mit ATtiny85

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:

  • Hp0 - Halt
  • Hl1 - Fahrt mit Streckenhöchstgeschwindigkeit
  • Hl3a - Fahrt mit 40 km/h, dann mit Streckenhöchstgeschwindigkeit
  • Hl7 - Höchstgeschwindigkeit auf 40 km/h ermäßigen
  • Hl9a - Fahrt mit 40 km/h, Fahrt mit 40 km/h erwarten
  • Hl10 - Halt erwarten
  • Hl12a - Fahrt mit 40 km/h, Halt erwarten

Es sind folgenden Konfigurationsvariablen (CVs) sind vorhanden:

  • CV1 = 6 bit LSB, default 1
  • CV7 Versionsnummer, im Sketch eingestellt
  • CV8 Hersteller-ID, entsprechend nmra-Bibliothek 13 für DIY
  • Schreiben auf CV8 führt einen Decoder Reset mit Default-Werten aus
  • CV9 = 3 Bit MSB, default 0
  • CV29 Configuration, default 192
    • Bit6=1 = Output Address Mode
    • Bit7=1 = Accessory Decoder Mode
  • CV34 Blink-Periode - default 4 für 1 s Blink-Frequenz (4 bit für Blink-Periode in s (0.25 … 3.75 s))

Steuerung mit Rocrail

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.

modellbahn/umbauten/dcc-dekoder.txt · Zuletzt geändert: 2026/05/28 20:38 von miho