DCC/MM Universaldecoder selbst gebaut


In der Märzausgabe 2003 der Elektronikzeitung " Elektor" fand ich eine Beschreibung einer Einplatinen Entwicklungsplattform für einen ATMEL AT90S2313 Mikrocontroller. Ich war sofort von den Eigenschaften dieses Controllers begeistert und begann sofort dar­über nachzudenken, wie ich einen solchen Baustein für Aufgaben auf der Modellbahn ein­set­zen kann. Der Beschluss war schnell gefasst und ich bestellte die Platine bei Elektor und die Bauteile bei Conrad.
Als ich wenige Tage später alles zusammengelötet hatte, wurde das "Entwicklungs­system" an den RS232 Port des PCs angeschlossen und das Unerwartete geschah: Eine Beispiel­ap­pli­ka­tion von Elektor wurde runter geladen und lief sofort. Im Display las ich "DisplayTech 162".
Nun konnte ich mich an die eigentliche Arbeit machen. Von Littfinski hatte ich schon diverse Weichendecoder in verschiedenen Ausprägungen im Einsatz, mit Halbleiter Impulsausgängen für Weichenspulen und mit Relaisausgängen für Motorweichen. Als Einstiegsprojekt schien mir ein solcher DCC Zubehördecoder also sehr geeignet. Bei den Littfinski Geräten besorgt ein Zilog Controller die Dekodierarbeit, bei mir sollte es halt der ATMEL sein.

Die Eigenschaften, die den ATMEL in meinen Augen so geeignet erscheinen ließen:

  • Er hat 2 KByte Flash Programmspeicher, also ausreichend für die Zerlegung des DCC-Protokolls
  • Mit 128 Byte SRAM (statischer Schreib-/Lesespeicher) und 128 Byte EEPROM z.B. zur Speicherung der Decoderadresse
  • Zwei Zeitgeber / Zähler mit Interrupt Eigenschaften, z.B. für das Ausmessen der Zeitdauer der DCC-Signalen
  • Genügend E/A-Ports mit den verschiedensten umschaltbaren Eigenschaften.
  • Zuschaltbare interne Pull-Up-Widerstände, wenn die Ports als Eingang laufen
  • Komparator für Analogspannungen mit Interrupt Möglichkeit

Funktionsprinzip

Programmierung in Assembler war für mich nicht ganz neu. Ich hatte in der 8-Bit-Heimcomputer-Zeit schon umfangreiche Erfahrungen mit dem Zilog Z80 Mikro­con­troller gemacht und sehr komplexe Programme in Assembler geschrieben. Die größte Schwierigkeit, die ich bei meinem Projekt sah, war die Zerlegung (Dekodierung) des DCC-Signals, die ich mithilfe von E/A- und Timer Interrupt erledigen wollte.
Ich machte mich daran, den Vorgang in einem Flussdiagramm niederzulegen, das sich allmählich über mehrere DIN-A4 Seiten erstreckte. Ich war davon ausgegangen, dass ich "Einsen" und "Nullen" des Signals schon lesen konnte, hatte aber dafür noch keine genaue Lösung. Wie sollte ich nun aber das grundlegende Erkennen der Bits erledigen?

Decodierung des DCC-Signals
Decodierung des DCC-Signals

Nach einigem grafischen Zerlegen von Signalen fand ich folgende Lösung, die unabhängig von der Polarität des DCC-Signals funktionieren sollte:

Die Regeln dieses Algorithmus sind im obigen Diagramm bildlich dargestellt. In Worten:

  • Jede positive Flanke (oder aber jede negative Flanke) des Signals erzeugt einen Programm Interrupt (eine Programmunterbrechung). Welche Flanke gemessen wird, bestimmt die Verdrahtung des DCC-Signals am Decodereingang.
  • Der Interrupt aktiviert einen 87 µs Timer, der beim Ablauf einen weiteren Interrupt auslöst. In dieser Timer Interruptroutine wird der aktuelle Pegel des Signals noch­mals gemessen, ist das "0", dann haben wir eine "1" gemessen, ist das immer noch "1", dann haben wir eine "0" gemessen. Die 87µs sind 3/4 der Periodenzeit des "1"-Signals. Für die Verarbeitung der Information stehen bis zum nächsten Timer-Interrupt mindestens wieder 116 µs zur Verfügung, in der der ATMEL Controller bei 10 MHz Taktfrequenz ca. 800 Anweisungen verarbeiten kann (mein ganzes Progrämmchen ist nur ca. 630 Worte/Anweisungen lang).
  • Die einzelnen Bits werden gezählt und gespeichert und zwischendurch immer wieder kontrolliert, bis am Ende eine "Präambel" (das Achtungssignal - "jetzt geht es los"), ein Adressbyte, ein Befehlsbyte und ein Prüfbyte zusammenkommen.
  • Nun wird nur noch die Nutzinformation rausgefiltert, mit der die Ausgänge entsprechend angesteuert werden.

Das DCC Weichentelegramm

Wie sieht ein solches DCC-Telegramm für einen Zubehörartikel aus? Nun, jedes Tele­gramm beginnt mit einem "Achtungspfiff", einer Folge von mindestens 10 bis maxi­mal 14 digitale "Einsen". Wenn danach ein "Null"-Bit folgt, beginnt erst die eigent­liche Übertragung. Für einen Zubehördecoder werden zwei Byte (eine Folge von 8 Bit) und ein Prüfbyte übertragen. Nach dem ersten "Null"-Bit kommt zunächst das Adressbyte, das für Zubehörartikel immer mit der Folge "10XXXXX " anfängt. Nach dem Adressbyte folgt wieder ein Null-Bit als "Trennzeichen" zum nachfolgenden Befehlsbyte. Das Befehlsbyte enthält den Rest der Adresse und die Information für die normalerweise 4 Magnetartikel, die vom Deco­der gesteuert werden. Da im Normalfall ein Magnetartikel, wie eine Weiche, 2 Spulen hat, die jeweils stromlos oder stromführend sein können, sind 16 Informationen erforderlich, die binär kodiert in den letzten 4 Bit des Befehlswortes Platz finden (2 Spulen x 2 Zustände x 4 Magnetartikel = 16). Nach dem Befehlsbyte wird wieder eine digitale "0" übertragen, die vom Prüfsummenbyte gefolgt wird. Das Telegramm wird nach dem Prüfsummenbyte mit ei­ner digitalen "Eins" abgeschlossen. Der Decoder bildet nun aus Adressbyte und Befehlsbyte ebenfalls die Prüfsumme (Bitweise XOR-Verknüpfung beider Bytes) und vergleicht sein Er­geb­nis mit dem gerade gelesenen Prüfsummenbyte. Wenn die Summen gleich sind, kann die Information ausgewertet werden, sonst wird sie verworfen und der Bediener der Weiche muss die Taste noch mal betätigen. Bildlich dargestellt, sieht ein Telegramm für Zubehör­artikel und seine Aufbereitung also wie folgt aus:

DCC-Telegramm
Das komplette DCC Telegramm für einen Zubehördecoder

Nun wird das Telegramm im Decoder weiterverarbeitet. Die beiden Adressteilen werden kor­rekt zusammengefügt, so dass sich eine 9-Bit Adresse ergibt. Die 3 Adressbits im Befehls­byte sind die höherwertigen Bits der Adresse. Sie werden invertiert gesendet, so dass der Deco­der die in der nachfolgenden Abbildung dargestellten Arbeiten ausführen muss. Mit dieser 9-Bit Adresse lassen sich theoretisch 512 Decoder mit jeweils 4 Ausgängen adressieren, also mehr als 2000 Magnetartikel oder mehr als 4000 Spulen. Das dürfte auch für große Anlagen mehr als ausreichen.

Verarbeitung des Weichentelegramms
Zusammenstellen der Adresse

Die eigentliche Arbeit für den Decoder kommt dann, wenn die so zusammengebastelte Adresse genau seiner im EEPROM gespeicherten oder an den Dipschaltern eingestellten Adresse entspricht. Jetzt erst kann er die im Befehlsbyte kodierten Ausgänge entsprechend setzen. Befehlsbyte
Das Befehlsbyte
In der Praxis - zumindest ist das so bei meiner IntelliBox - ist das Bit B immer auf logisch 1. Man geht wohl davon aus, dass der Weichendecoder die Spule nach einer Zeit automatisch ausschaltet oder dass die Weichenspulen über eine End­ab­schal­tung verfügen. Die IntelliBox sendet ein Weichenbefehl so lang wiederholt aus, bis der Anwender seinen Finger von der Taste nimmt oder die voreingestellte maxi­male Zeit abläuft. Drückt der Anwender nur sehr kurz, wird der Weichenbefehl so lange wiederholt, bis die minimale Zeit abläuft. Für Wei­chen und andere Magnetartikel liegt es deshalb nahe, die Spulenausgänge nach einer Min­destzeit auch wieder zurückzunehmen.

Natürlich gibt es auch Decoder mit Relaisausgängen oder bi-stabilen Relais. Decoder für Lichtsignale benötigen natürlich Dauerausgänge für Signalbilder, die sich gegenseitig ab­lösen.

Die NMRA Recommended Practices (RPs) sehen für Weichendecoder genauso Konfigura­tions­variablen (CVs) vor, wie für Lokomotivdecoder. Die CVs gehen von 513 an aufwärts. CV 513 ist z.B. für die Decoderadresse vorgesehen, die CVs 515 bis 518 für die Schaltdauer der 4 Ausgangspaare. Diese RP921 sieht ebenfalls ein Telegramm für die Programmierung der Wei­chendecoder in laufenden Betrieb der Anlage vor, genauso wie man auch Lokomotiven "on track" umprogrammieren kann. Die Programmierung eines Zubehördecoders wäre daher noch einfach über die Zentrale machbar. Das Auslesen von CVs am Programmiergleis erfor­dert jedoch einen zusätzlichen elektronischen Mechanismus, mit dem Anfragen der Zentrale bestätigt werden können. Nach NMRA besteht eine solche Bestätigung aus einem erhöhten Stromverbrauch für die Dauer von 6 ms. Ein solcher, 100% kompatibler, Decoder schien mir wegen dieser erhöhten Komplexität als Erstlingswerk weniger geeignet.

Die Einstellung der Decoderadresse hat also mit anderen, einfacheren, Mitteln zu erfolgen. Ich habe mich dazu entschlossen, mit einem kleinen Taster einen Programmierungsmodus zu aktivieren, der von einer LED angezeigt wird. Die Adresse des ersten Weichenbefehls, den der Weichendecoder nun im Schienensignal erkennt, legt die Adresse des Decoders fest. Bei meiner IntelliBox geht diese Adressierung nach der Formel:

Decoderadresse =( IB_Weichennummer-1)/4 + 1

Wurde eine Weichenadresse erkannt, geht die LED wieder aus und der Decoder reagiert von nun an auf alle Befehle, die an diese Adresse gerichtet sind. Die Adresse wird null­span­nungs­sicher im EEPROM abgelegt und bei jedem Hochfahren der Anlage wieder in den Arbeitsspeicher (RAM) kopiert.

Bei mindestens 100.000 Schreibzyklen des EEPROM kann die Adresse fast beliebig häufig geändert werden. Wahrscheinlich gibt der Taster eher auf als der EEPROM Speicher.


Schaltung und Aufbau

Der Aufbau des Decoders geht mit einfachen Mitteln vonstatten. Ein Viertel einer Lochrasterplatine in Europakartenformat reicht für einen Decoder. Weil der ATMEL Controller intern schon Pull-Up-Widerstände hat, kommt man mit recht wenigen externen Bauteilen aus. Nicht zu vermeiden ist ein Optokoppler, der das Schienensignal von der Stromversorgung entkoppelt. Die Leistungs-Endstufen des ULN2803 liefern mit 0,5 A Dauer­strom für das Schalten von Weichen mit Doppelspulenantrieb ausreichend Strom. Jeder Ausgang allein schafft 500 mA, der gesamte Baustein darf mit ca.1A belastet werden. Die Freilaufdioden, die zum Schalten von induktiven Lasten nötig sind, sind bereits im ULN2803 integriert.
Die Stromaufnahme der Controller-Schaltung schwankt durch die Ansteuerung des Treibers derart, dass eine einfache Stromversorgung mit einem Vorwiderstand und einer Zenerdiode mit 5,1V Spannung nicht ausreicht. Der deswegen eingesetzte MC 7805 Spannungsregler ist mit 1 A zwar etwas überdimensioniert aber recht preiswert zu haben. Besonders wenn die Schaltung aus dem DCC Schienensignal gespeist wird, ist die höhere thermische Belast­bar­keit des MC 7805 von Vorteil.


Prototype schon mit 6n139
Prototype V1 mit 6N139 als Optokoppler und 2 x ULN 2003 als Ausgangstreiber

Erste praktische Erfahrungen

Die ersten Exemplare des Decoders wurden gebaut und getestet. Als Schwachpunkt stellte sich der Optokoppler heraus. Optokoppler sind recht langsame Bauelemente. Besonders die zunächst von mir gewählten TIL111 verursachten durch Streuung und mangelnde Flanken­steilheit Probleme am Interrupteingang des ATMEL. Die nun in der Ver­sion 2 eingesetzten 6N139 sind zwar auch nicht besonders schnell, haben aber dafür eine recht hohe Stromverstärkung, die Streuungen in der DCC-Eingangsspannung und damit im Eingangsstrom spielend leicht abfängt. Fotostrom und Lastwiderstand sind so gewählt, dass die höchste Flankensteilheit des Optokopplers erreicht wird. Neben dem 6N139 stand auch der 6N137 zur Auswahl an. Da dieser ein so guter Frequenzgang / Flankensteilheit hat, ist er eher störungsempfindlich und deswegen ausgeschieden.


Brown Out Effekt

Ein weiteres Problem mit dem Prototyp war der so genannte "brown out" Effekt. Er kann beim Ein- und Ausschalten der Versorgungsspannung auftreten und verursacht unkon­trolliertes Ausführen von Teilen des Controllerprogramms. Die Folge ist meis­tens ein kor­rupter EEPROM Speicher. Das hat wiederum zur Folge, dass der Decoder seine Adresse oder seine Betriebsart 'vergisst'. Dieser Effekt kann nur verhindert werden, wenn man in der kri­tischen Phase (relativ langsam absinkende oder ansteigende Versor­gungs­span­nung) den Reset-Eingang auf Null hält. Hierfür gibt es verschiedene Bausteine, welche die Versor­gungs­spannung überwachen und den Reset bei weniger als ca. 4,5 V auf Null ziehen. Alle haben den Nachteil der Kosten und/oder des zusätzlichen Platzbedarfs.

Bei diversen Tests hat sich die externe Beschaltung des Resets mit einem Baustein TL 7705 als absolut zuverlässig erwiesen. Alle Zwischenlösungen mit passiven Bauelementen wurden für die Version 2 deswegen ad Acta gelegt. Der TL7705 ist ein so genannter "Voltage Super­visor" von Texas Instruments, der relativ preisgünstig ist aber dafür einige externe Bauteile benötigt.


Selbstbaudecoder WDecD-90 und WDecM-90

Schaltplan, Firmware und Stückliste des von mir auf den Namen WDecD-90 getauften Decoders (Weichendecoder DCC auf der Basis des AT90S2313) habe ich bereits 2003 zur nicht kommerziellen Nutzung im privaten Bereich veröffentlicht. Als der iden­tische Decoder dennoch von mehreren Händlern im Internet angeboten wurde, habe ich den Hex-Code von der Webseite entfernt.Die Software war von da an nur in Form von program­mierten Prozessoren WDecD-90 bei mir erhältlich. Seit November 04 gibt es eine funktions­gleiche Variante mit gleicher Hardware für das Märklin-Motorola Gleisformat, die ich WDecM­-90 genannt habe. Die Software beider Decoder in der Version 2 kennt acht verschie­dene Betriebsarten:

  • Bedienung von 4 Doppelmagnetartikeln mit 0,25 s Impulsen
  • Bedienung von 4 Doppelmagnetartikeln mit 0,5 s. Impulsen
  • 4 x 2 Dauerausgänge für 2-begriffige Signale, Doppelspulenantriebe mit Endab­schaltung oder mit (bistabilen) Relais für motorische Weichenantriebe
  • Kombination von 2 x 2 Dauerausgängen und 2 x 2 Impulsausgängen
  • Kombination von 1 x 2 Dauerausgängen 2 Blinksignalen und 2 x 2 Impulsausgängen
  • 8 unabhängige Dauerausgänge, die mit einem Taster ein-, bzw. ausgeschaltet werden können
  • Kombination von 2 x 3 Dauerausgängen für 3-begriffige Signale und 1 x 2 Impulsaus­gängen 0,25 s
  • 2 x 4 Dauerausgänge für die Ansteuerung von 2 4-begriffigen Signalen.

Für die Ansteuerung von 3- und 4-begriffigen Lichtsignalen sind die Modi 7 und 8 zuständig. Applikationsbeispiele finden Sie in der Bedienungsanleitung. Speziell für die Anwendung als Signaldecoder, kann die Version 2 die zuletzt angezeigten Signalbilder speichern. Ist die Speicherung - vielleicht wegen der begrenzten Anzahl der Schreibzyklen des EEPROMs - nicht erwünscht, kann eine Brücke gesteckt werden, die Pin 8 des ATMELs mit Masse verbindet.


Handbuch, Firmware und Stückliste

Der Selbstbau eines Weichendecoders hat abgesehen vom handwerklichen Vergnügen auch noch einen wirtschaftlichen Vorteil. Etwas Lochrasterplatine und die Kompo­nen­ten schlagen mit weniger als 10 Euro zu Buche. Der technische Fortschritt hat uns außerdem noch den Atmel ATTiny2313A mit einem eingebauten Voltage Supervisor und einem 8 MHz RC-Oszillator beschert. Deswegen können die Komponenten Quarz und TL7705 in den neuen Entwürfen entfallen und wird der Aufbau weiter vereinfacht. Diese heißen nun auch nicht mehr WDecD-90 und WDecM-90, sondern WDecD-TN und WDecM-TN (TN = ATTiny und 90 = AT90). Handbuch, Firmware und Stückliste habe ich in meinem Blog "Meine Digitale Modellbahn" aktualisiert und zur privaten Nutzung zum Download zur Verfügung gestellt.


Beispiele von Selbstbaudecodern

Der fertige Zubehördecoder des Verfassers
Der fertige DCC Zubehördecoder in der Version2, Abm. 50 x 80 mm
Die Rückseite des Decoders
Die Rückseite

Hier sind einige Beispiele von Nachbauten von Hobby-Kollegen. Als Erstes ein Bild des Nachbaus von Jörg Leuschke, der gleich 4 Exemplare auf einer Lochrasterplatine aufbaute.

Zubehördecoder (4-fach) augebaut von Jörg Leuschke auf einer Streifenrasterplatine
Nachbau von Jörg Leuschke, der die 4 Reset-Eingänge der ATMELs über einen TL7705 Baustein steuert. Hier kommt der 8-fache Ausgangstreiber ULN2803 4-mal zum Einsatz

Zubehördecoder von Peter de Heij auf einer Lochrasterplatine
Der Nachbau von Peter de Heij aus den Niederlanden. Version mit 2 x ULN2003, Steckbrücke für die Speicherung, ausgewachsener Sicherung, Taster und LED.

Decoder Nachbau von Marco Nardi
Dieser Nachbau von Marco Nardi hat schon eine geätzte Leiterplatte als Träger.

Decoder WDecD-TN und WDecM-TN

Von Mitte Mai 2005 bis Ende 2016 wurden die Decoder mit dem ATTiny2313 als Fertig­modell von der Firma Darisus GmbH gefertigt und vertrieben. Die Decoder basierten hard- und software-technisch auf den oben beschriebenen Decoder, hatten aber eine überarbeitete Hardware, die es erlaubte, auch die Variante WDecN-TN auf der­selben Plati­ne aufzubauen. Anstelle eines 10 MHz Quarzes wurde hier von Anfang an der interne 8 MHz RC Oszillator des ATTiny2313 verwendet. Der Funktionsumfang der WDecD-TN und WDecM-TN war dennoch mit dem der Selbstbau­varianten WDecD-90 bzw. WDecM-90 identisch.
Darisus hat den Vertrieb dieser Decoder eingestellt. Diese Decoder können heute für den privaten Gebrauch frei nachgebaut werden. Die dazu passenden neuen Atmel ATTiny2313A Prozessoren können Sie selbst flashen oder die Chips vorprogrammiert bei mir bestellen. In meinem Blog "Meine Digitale Modellbahn"finden Sie die aktuellen Firmware und alle Unter­lagen zum Nachbauen der Decoder.


© 2003 - 2020 Gerard Clemens  letzter Update 09.05.2020


Zurück nach oben