In der Märzausgabe 2003 der Elektronikzeitung „Elektor“ fand ich eine Beschreibung einer Einplatinen Entwicklungs­platt­form für einen ATMEL AT90S2313 Mikrocontroller. Ich war sofort von den Eigenschaften dieses Controllers begeistert und begann Ideen zu entwickeln, wie ich einen solchen Baustein für Aufgaben auf der Modellbahn einsetzen kann. Der Beschluss war schnell gefasst und ich bestellte die Platine bei Elektor und die Bauteile bei Conrad.
Nachdem ich wenige Tage später alles zusammengelötet hatte, wurde das „Entwicklungssystem“ an den RS232 Port des PCs ange­schlossen und eine Code Beispiel von Elektor runtergeladen. Das Unerwartete geschah: der Code lief sofort. Im Display las ich „DisplayTech 162“.
Nun konnte ich mich an die eigentliche Arbeit machen. Von Littfinski Datentechnik hatte ich schon diverse Weichendecoder in verschie­de­nen Ausprägungen im Einsatz, mit Halbleiter Impuls­aus­gängen für Weichenspulen und mit Relaisausgängen für Motorwei­chen. Als Einstiegsprojekt schien mir ein solcher DCC Zubehör­de­co­der des­wegen sehr geeignet. Bei den Littfinski Geräten macht ein Zilog Con­troller 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 Mikrocontroller 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 mit Hilfe 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?

Nach einigem grafischen Zerlegen von Signalen hatte 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 nochmals 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 ABC des DCC Weichentelegramms

Wie sieht ein solches DCC-Telegramm für einen Zubehörartikel aus? Nun, jedes Telegramm beginnt mit einem „Achtungspfiff“, einer Folge von mindestens 10 bis maximal 14 digitale „Einsen“, „Preambel“ genannt. Wenn danach ein „Null“-Bit folgt, beginnt erst die eigentliche Übertragung. Für einen Zubehördecoder werden zwei Byte (eine Folge von 8 Bit) und ein Prüfsummenbyte ü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 4 Magnetartikel, die normalerweise vom Decoder 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 (C=Checksum) gefolgt wird. Das Telegramm wird nach dem Prüfsummenbyte mit einer digitalen „Eins“ abgeschlossen. Der Decoder bildet nun aus Adressbyte und Befehlsbyte ebenfalls die Prüfsumme (Bitweise XOR-Verknüpfung beider Bytes) und vergleicht sein Ergebnis 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 eventuell noch mal betätigen. Bildlich dargestellt, sieht ein Telegramm für Zubehörartikel und seine Aufbereitung also wie folgt aus:

Nun wird das Telegramm im Decoder weiterverarbeitet. Die beiden Adressteilen werden korrekt zusammengefügt, so dass sich eine 9-Bit Adresse ergibt. Die 3 Adressbits im Befehlsbyte sind die höherwertigen Bits der Adresse. Sie werden invertiert gesendet, so dass der Decoder 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.

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:

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 Endabschaltung verfügen. Die IntelliBox sendet ein Weichenbefehl solange wiederholt aus, bis der Anwender seinen Finger von der Taste nimmt oder die voreingestellte maximale Zeit abläuft. Drückt der Anwender nur sehr kurz, wird der Weichenbefehl solange wiederholt, bis die minimale Zeit abläuft. Für Weichen und andere Magnetartikel liegt es deshalb nahe, die Spulenausgänge nach einer Mindestzeit 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 ablösen.

Die NMRA Recommended Practices (RPs) sehen für Weichendecoder genauso Konfigurationsvariablen (CVs) vor, wie für Lokomotivdecoder. In 2003 galt noch Festlegung, dass für Zubehördecoder die CVs bei der Nummer von 513 beginnen. Heute starten die CVs für Zubehördecoder genauso bei 1 wie die für Lokomotivdecoder. CV 513 (CV1) ist z.B. für die Decoderadresse vorgesehen, die CVs 515 bis 518 (CV3 bis CV6) für die Schaltdauer der 4 Ausgangspaare. Diese RP921 sieht ebenfalls ein Telegramm für die Programmierung der Weichendecoder 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 erfordert jedoch einen zusätzlichen elektronischen Mechanismus, mit dem die 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 Programmier-Modus zu aktivieren, der von einer LED angezeigt wird. Die Adresse des ersten Weichenbefehls, den der Weichendecoder nun im digitalen Schienensignal erkennt, legt die Adresse des Decoders fest. Bei meiner IntelliBox, wie bei der Redbox und der Mastercontrol von Tams 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 nullspannungssicher 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 100 x 160 mm reicht für einen Decoder. Weil der ATMEL Controller intern schon Pull-Up-Widerstände hat, kommt man mit recht wenig externen Bauteilen aus. Nicht zu vermeiden ist ein Optokoppler, der das Schienensignal von der Stromversorgung entkoppelt. Die ULN2803 Leistungs-Endstufe reicht mit 0,5 A Dauerstrom für das Schalten der meisten Weichen mit Doppelspulenantrieb. Jeder Ausgang allein schafft 500 mA, der gesamte Baustein darf mit ca. 1 A 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 Belastbarkeit des MC 7805 von Vorteil.


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 aus der Bastelkiste verursachten durch Streuung und mangelnde Flankensteilheit Probleme am Interrupteingang des ATMEL Prozessors. Die nun in der Version 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 wurde auch der 6N137 mit Erfolg getestet.


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 unkontrolliertes Ausführen von Teilen des Controllerprogramms. Die Folge ist meistens ein korrupter EEPROM Speicher. Das hat wiederum zur Folge, dass der Decoder seine Adresse oder seine Betriebsart ‚vergisst‘. Dieser Effekt kann nur verhindert werden, indem man in der kritischen Phase (relativ langsam absinkende oder ansteigende Versorgungsspannung) den Reset-Eingang auf Null hält. Hierfür gibt es verschiedene Bausteine, welche die Versorgungsspannung ü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 deswegen ad Acta gelegt. Der TL7705 ist ein so genannter „Voltage Supervisor“ von Texas Instruments, der relativ preisgünstig ist aber dafür einige externe Bauteile benötigt.


Selbstbaudecoder WDecD-90 und WDecM-90

Schaltplan, Stückliste und Binärcode des von mir auf den Namen WDecD-90 getauften Decoders (Weichendecoder DCC auf der Basis des AT90S2313) habe ich damals zur nicht kommerziellen Nutzung im privaten Bereich veröffentlicht. Der Code wurde aber dennoch umgehend für kommerzielle Zwecke genutzt und deswegen von der Seite entfernt. Seit November 2004 gibt es einen in der Funktion identischen Decoder mit gleicher Hardware für das Märklin-Motorola Gleisprotokoll, den ich WDecM-90 genannt habe. Die Software beider Decoder kennt acht verschiedene 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 Endabschaltung 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 Impulsausgä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, können die Decoder die zuletzt angezeigten Signalbilder speichern und beim Einschalten der Anlage wieder anzeigen. 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.


AT90S2313, ATTiny2313 oder ATTiny2313A?

Der Prozessor AT90S2313 wurde von ATMEL abgekündigt und kann nur noch aus Restbeständen bezogen werden. Als Ablösung schlug ATMEL den ATTiny2313 vor, der vom Befehls- und Speicherumfang mit dem AT90S2313 kompatibel ist. Auch der Prozessor ist nicht mehr aktuell und wurde vom ATTiny2313A abgelost. Der ATTiny2313(A) bietet zusätzlich einige Eigenschaften, über die der AT90 nicht verfügte:

  • interner RC Clock Generator
  • interner Brown Out Schutz
  • zusätzliche Funktionen der I/O Ports
  • erweiterte Konfigurierbarkeit mittels sog. „Fuses“

Der Code für den AT90S2313 war zwar 1:1 auf dem ATTiny2313(A) lauffähig setzte aber voraus, dass die Schaltung ebenfalls mit dem für den AT90S2313 noch notwendigen 10MHz Quarz ausgestattet wurde. Mittlerweile wurde der Decoder auf der Basis ATTiny2313 von der Firma Darisus gebaut und vertrieben. Der Code für die kommerziellen Decoder wurde angepasst – Entfall des Quarzes und Verwendung des eingebauten Burn-Out-Schutz. Die neuen Decoder erhielten im Namen den Zusatz „-TN“ für „Tiny“ statt „-90“.

Die Prozessoren für die Selbstbau-Decoder wurden aber weiterhin mit dem Code für den AT90 ausgeliefert. Da die Burnout Protection nicht im Code verankert war, sondern mit Fuses aktiviert wird konnte auch das Layout des Selbstbaudecoders vereinfacht werden. Der TL7705 als Spannungswächter konnte entfallen.
Für die Prozessoren für die Selbstbaudecoder liefere ich also seit geraumer Zeit ATTiny2313A für 10 MHz Quarz mit aktiviertem Brown Out Schutz aus. Diese Prozessoren funktionieren auch in bestehenden Schaltungen, die mit einem TL7705 als Spannungswächter/Resetschaltung ausgestattet sind.


Frequently Asked Questions

Frage: Ich habe noch AT90S2313 (oder ATTiny2313) liegen. Können diese noch für den WDecD-90 oder für den WDecM-90 gebraucht werden?

Antwort: Ja, sprechen Sie mich bitte an! Ich programmiere auch Ihre AT90S2313 oder ATTiny2313 mit dem Code für die Decoder.

Frage: Was ist der Unterschied zwischen dem selbstlernenden DCC Decoder WDecD-90 und dem NMRA kompatiblen Decoder WDecN-90, der auch in diesem Blog beschrieben wird? Beide sind doch DCC Decoder.

Antwort: Der einfache Weichendecoder WDecD-90 versteht aus der gesamten Menge von Befehlen, die von der NMRA standardisiert wurde, gerade mal einen Befehl, nämlich den Weichenbefehl (und auch nur das Einschalten der Ausgänge). Der Decoder kennt keine CV und lässt sich nur über einen Taster programmieren. Der NMRA kompatible Decoder dagegen beherrscht alle von der NMRA definierten Befehle und wird vorschriftsmäßig über CV programmiert.

Frage: Ich arbeite an einem ähnlichen Projekt. Kann ich den Quellcode für den Decoder einsehen?

Antwort: Nein, der Quellcode wurde nie veröffentlicht und bleibt weiter unter Verschluss.


Beispiele von Selbstbaudecodern

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

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.

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

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.

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

Fertige Decoder WDecD-TN und WDecM-TN

Von Mitte Mai 2005 bis Ende 2016 wurden die Decoder als Fertigmodell bei der Firma Darisus GmbH gefertigt und vertrieben. Die Decoder basierten hard- und software-technisch auf den oben beschriebenen Decoder aber hatten eine überarbeitete Hardware, die es erlaubte auch die Variante WDecN-TN auf derselben Platine aufzubauen. Anstelle eines 10 MHz Quarzes wurde der interne 8 MHz RC Oszillator des ATTiny2313 verwendet. Der Funktionsumfang der WDecD-TN und WDecM-TN war mit dem der Selbstbauvarianten WDecD-90 bzw. WDecM-90 identisch.
Diese Decoder können Sie heute nur noch selbst bauen und die dazu passenden neuen Atmel ATTiny2313A Prozessoren mit dem veröffentlichten Code programmieren, bzw hier programmiert bestellen. Auf Mobatron.de finden Sie auch aktualisierte Unterlagen, wie Schaltplan, Layout, Bestückung und Stückliste. Als aktuelle Bedienungsanleitung muss vorerst noch die „alte“ Anleitung des WDecD-TN und WDecM-TN auf der Basis des Darisus Layouts herhalten.


Darisus WDecM-TN-V2.3 auf einer universellen Platine für alle WDecX-Varianten

© 2003 – 2020 Gerard Clemens letzter Update 27.03.2020