FeedbackDecoder: eine Software für OpenDecoder (V.2)

Überblick

    Wenn man OpenDecoder V.2 mit der OpenDecoder-Software lädt, so ist zusätzlich zum Schalten der Weichen auch die Überwachung der tatsächlichen Lage sowie eine Rückmeldung der Lage bzw. ein Auslösen eines Nothalts möglich.

    Diese Software arbeitet als vollständiger Accessory Decoder, die Programmierung des Decoders kann entweder mittels CV (=Configuration Variable) oder per Programmiertaste und Erlernen der nächsten empfangenen Adresse erfolgen.

Theorie: Prinzip der Lageüberwachung

    Wie funktioniert nun die Lageüberwachung? Hier müssen mehrere Prozesse ineinander greifen:
  • Erkennen der Lage
    Wenn eine Weiche geschaltet wird, so führt sie die gewünschte Bewegung aus, und schaltet dann per eingebauter Endabschaltung ab bzw. wird die Spule vom Decoder wieder deaktiviert.
    1. Weichen mit Endabschaltung:
      Nach dem Deaktivieren der aktuell geschalteten Spule ist die andere Spule für die Gegenrichtung durch den Endabschaltkontakt mit der Versorgungsspannung verbunden. Dies kann im Decoder durch eine Pegelmessung des abgeschalteten Spulenkontakts festgestellt werden: die gerade aktivierte Spule ist low (eigentlich offen), die Gegenspule führt high.
      Es ist also keine zusätzliche Lichtschranke, Momenttaster o.ä. erforderlich, um die echte Lage der Weiche zu erkennen. Der Endschalter liefert diese Information ohne zusätzliche Bauteile oder Leitungen. Der Endschalter ist i.d.R. mechanisch mit der Stellschwelle gekoppelt.
         Infos zu dem Seitenantrieben 40295 und 40296 von Roco Line 
        Spannung DC mit 12 bis 14 Volt
        Spule Induktivität mit Metallkern: ca 5 mH
        Widerstand: ca 17 Ohm
        Strom 500 - 800mA
        Schaltzeit 10 Millisekunden
        Schaltladung 2,5 Millicoulomb
    2. Weichen ohne Endabschaltung:
      Hier funktioniert der obige Trick nicht und die Software ist auf eine externe Auswerteschaltung angewiesen - dies kann eine Lichtschranke, ein Reedkontakt an der Stellschwelle oder der Ausgang eines Schwingkreises sein, welcher durch den Eisenkern verstimmt wird, der in den Spulenden hin- und her bewegt wird. Aber es ist auch für diese Weichen eine Rückmeldung möglich.
  • Melden der Lage
    Der Decoder kennt nun also die Lage des Antriebes, jetzt muß diese Information an die Zentrale übertragen werden. Wenn der Decoder von der Zentrale den Befehl zum Abschalten der Spule bekommt, so wird 100µs nach dem Abschalten der Spule die Lage überprüft. Stimmt diese mit dem letzten erhaltenen Stellbefehl überein, so wird auf der ACK Leitung ein 3ms langer Puls erzeugt. (=Schaltbestätigung, positive Quittung)
    Dieser ACK Puls könnte entweder wie eine Lasterhöhung auf der DCC Leitung erkannt werden oder (und das ist die Empfehlung) es wird eine separate Ring-Leitung gezogen, welche allen Decoder und die Zentrale verbindet. Hierbei sind die Lötbrücken SJ1 und SJ2 auf dem Dekoder aufzutrennen. Schaltung Immer bei der Ausgabe des Abschaltbefehls überprüft die Zentrale diese Rückmeldung.
    Alternativ kann dieser ACK auch nur aktiviert werden, wenn die Lage nicht stimmt. In diesem Mode bleibt der ACK dauerhaft aktiv, bis diese Weiche wieder geschaltet wird (negative Quittung). Hier könnten alle ACK-Ausgänge zu einer "Nothalt"-Meldung zusammengeschaltet werden.
    In beiden Betriebsarten wird der Fehlerzustand durch schnelles Blinken der Programmier-LED angezeigt, wobei die Zahl der rasch aufeinander folgenden Blinkpulse den defekten Antrieb kennzeichnet.
  • Reaktion der Zentrale bzw. Steuersoftware
    Wenn die Zentrale einen ausbleibenden ACK-Puls erkennt, so liefert sie an den Steuerrechner entweder:
    1. ein Turnout-Ereignis, welches das "manuelle" Verstellen der Weiche anzeigt. Leider wird die Beachtung eines solchen Turnout-Ereignisses von Traincontroller nicht unterstützt.
    2. ein S88-Event, dessen Adresse sinnvollerweise gleich der Weichenadresse ist. Hier kann dann durch entsprechende Programmierung die Ausfahrt aus den auf diese Weiche zulaufenden Blöcken gesperrt werden.
  • Verwendungen mit anderen Zentralen
    Selbstverständlich kann diese Technik auch mit anderen Zentralen genutzt werden. Sowohl die direkte Anzeige am Decoder sowie die Möglichkeit, bei nicht schaltenden Weichen einen Nothalt auszulösen ist mit jeder anderen Zentrale möglich.

    Unabhängig von der Zentrale wird eine nicht funktionierende Weiche am Decoder selbst angezeigt: es blinkt bei erkanntem Fehler die LED in rascher Folge - wobei die Zahl der schnell hintereinander folgenden Lichtpulse die Weiche mit dem Fehler anzeigt. Damit kann die Ursache einer Störung rasch lokalisiert werden.
      Beispiel: Weiche 2 hat nicht korrekt geschaltet.
      Der Decoder blinkt: __X_X__________X_X_________X_X___
    Eine Besonderheit gibt es bei der Intellibox: diese liefert leider keinen Abschaltbefehl. Als Würg-around gibt es aber in der Software von OpenDecoder2 einen Wahlschalter (Compile-Switch), mit dem einfach die nachfolgende Adressgruppe als Abschaltbefehl zu dieser Adressgruppe interpretiert wird.

Konfiguration mit CV-Variablen

    Das gewünschte Verhalten des Decoders kann einfach durch CV (=Konfigurationsvariablen) eingestellt werden. Darüber hinaus kann konventionell die Adresse auch mit Programmiertaster definiert werden - dabei werden die wichtigsten CV's sinnvoll vorbelegt, gewünschte Abweichungen müssten dann bei Übersetzen auf die richtige Voreinstellung konfiguriert werden. Die CV's sind bei OpenDecoder gemäß der Normung der NMRA vergeben, wobei OpenDecoder auch vom sogenannten CV-Remapping Gebrauch macht: Die CVs sind sowohl an ihrer richtigen Adresse erreichbar, als auch "gespiegelt" an der Adresse minus 512. Die Spiegeladresse ist im folgenden kursiv in Klammern angegeben. Es werden alle Directmode-Befehle (auch Bitbefehle) unterstützt. Damit kann auch mit einfacheren Zentralen programmiert werden.
  • CV 513 (1): Decoder Adress Low (*=1)
  • CV 515 (3): ON TIME Function 1 (*=300ms)
    Einschaltzeit des Ausgangspaares 1. Diese wird in Einheiten von 20ms angegeben. Somit sind Zeiten bis zu 5s möglich. Z.B. entspricht ein Wert von 5 einer Zeit von 100ms, was für die meisten Spulenantriebe sicher ausreicht. Bei Programmierung mit 0 bleibt der Ausgang permanent eingeschaltet. Wird von der Zentrale ein Abschaltbefehl vor Erreichen der programmierten Pulslänge empfangen, so erfolgt das Abschalten sofort.
    Zusätzlich schalten sich die Ausgänge immer paarweise gegenseitig ab, so daß nie zwei Spulen oder zwei Signalzustände gleichzeitig aktiv sind.
    Warnung: Bei Weichen ohne Endabschaltung bzw. mit defekter Endabschaltung kann eine lange Pulszeit bzw. ein permanentes Schalten zu unlässiger Erwärmung des Weichenantriebes führen - im einfachen Fall mit innovativer Verformung, im schlimmen Fall mit Brandgefahr.
  • CV 516 (4): ON TIME Function 2
    Einschaltzeit des Ausgangspaares 2. Ansonten wie CV515.
  • CV 517 (5): ON TIME Function 3
    Einschaltzeit des Ausgangspaares 3. Ansonten wie CV515.
  • CV 518 (6): ON TIME Function 4
    Einschaltzeit des Ausgangspaares 4. Ansonten wie CV515.
  • CV 519 (7): Version
    Dieses Register enhält die Softwareversion: 0x20; nur Lesezugriff möglich
  • CV 520 (8): Herstellerkennung (VID Vendor ID)
    In diesem Register ist eine Kennzahl für den Hersteller hinterlegt. Es gibt eine Übersicht dieser Kennzahlen bei der NMRA - wir benutzen: 0x0D = 13 = Selbstbau Decoder bzw. ev. mal 0x12 = 18 = JMRI.
    Dieses Register ist fest eingestellt und kann nur gelesen werden.
    Bei OpenDecoder3 kann mit einem Schreibzugriff auf dieses Register der default-Zustand aller CV's wieder hergestellt werden.
    Wichtig: Die Ausführung (Überschreiben aller CVs) dauert länger, als die NORM für einen Schreibzugriff vorsieht. Es wird daher zuerst eine Quittung zurückgesendet, anschließend erfolgt die Restaurierung des default-Zustandes. Während dieser Operation blinkt der Decoder.
  • CV 521 (9): Decoder Adress High (*=0)
    Hinweis: wenn die Adresse noch nicht programmiert wurde, dann blinkt der Decoder 5 mal schnell, Pause, 5 mal schnell, Pause, usw.; Der Decoder funktioniert jedoch normal.
  • CV 541 (29): Decoder Configuration
    Hier wird die Konfiguration des Decoders eingestellt:
      CV 541: DECODER CONFIGURATION
      7 Decoderart:
      0 = Multifunction Decoder - die Bits 6..0 sind wie bei CV29 definiert.
      1 = Accessory Decoder.
      6 Adressierung Mode:
      0 = Decoderbezogene Adressierung
      1 = Ausgangsbezogene Adressierung
      5 Decodertyp:
      0 = Basic Accessory Decoder
      1 = Extended Accessory Decoder
      0..4 reserviert
    Dieses Register ist fest auf 1000 0000 eingestellt und kann nur gelesen werden.
  • CV 545 (33): DECODER MODE
    Diese CV legt die Betriebsart des Decoders fest. Je nach nach Betriebsart kann sich die Bedeutung der folgenden CV's komplett ändern!
    Wichtiger Hinweis: unbedingt darauf achten, dass auch die richtige Software geladen ist, welche den gewählten Mode auch unterstützt. Alle anderen Einstellungen sind reserviert; im folgenden sind nur die CV's für den MODE 0 beschrieben!
  • CV 546 (34): FEEDBACK METHOD
    Diese CV legt das prinzipielle Feedbackverhalten des Decoders fest:
      CV 546: DECODER FEEDBACK METHOD
      0 Kein Feedback
      1 (*) Positive Rückmeldung: Wenn der Decoder den Abschaltbefehl für ein Spule empfängt und die zugehörige Weiche in richtiger Lage liegt, so wird ein kurzer ACK-Puls von 3ms Dauer ausgegeben.
      Dieser ist lange genug, um sicher die nächste Präambel abzudecken, jedoch kurz genug, um nicht mit dem ACK des nächsten Befehls zu kollidieren.
      2 Alarmmeldung: Wenn der Decoder den Abschaltbefehl für ein Spule empfängt und die zugehörige Weiche in falscher Lage liegt, so wird ein dauernder ACK-Puls ausgegeben. Dieser Puls bleibt so lange erhalten, bis wieder ein Befehl für diese Weiche empfangen wird.
    Unabhängig vom eingestellten Feedbackverhalten blinkt bei erkanntem Fehler die LED in rascher Folge - wobei die Zahl der schnell hintereinander folgenden Lichtpulse die Weiche mit dem Fehler anzeigt. Damit kann die Ursache einer Störung rasch lokalisiert werden.
    Beispiel: Weiche 3 hat nicht korrekt geschaltet.
    Der Decoder blinkt: _X_X_X__________X_X_X_________X_X_X___
  • CV 547 (35): FEEDBACK MODE Funktion 1
    Diese CV legt die Art und Weise fest, wie die Rückmeldung für Funktion 1 (=Weiche 1) erfolgt.
      CV 547: FUNCTION FEEDBACK MODE
      0 Feedback des letzten Schaltbefehls. Wenn vor der Abfrage ein Schaltbefehl für die andere Seite erfolgte, so wird ein Fehler generiert. Da die Befehl an einen Weichendecoder immer in der Folge "Spule an - Spule aus" erfolgen, kann das vorherige erfolgreiche Empfangen des Stell-Befehls kontrolliert werden.
      1 (*) Überwachung der Weichenlage mittels der Endlagenschalter des Magnetantriebs. Es wird sowohl der vorherige Empfang des Stellbefehls als auch das korrekte Umschalten des Antriebes überwacht. Diese Einstellung paßt z.B. für die Roco Line Antriebe.
      2 Überwachung der Weichenlage durch einen externen Schalter oder eine Lichtschranke, die am entsprechenden "Rot"-Eingang angeschlossen ist und im Falle der Stellung auf "ROT" gegen Masse durchschaltet. Dies kann z.B. bei den Fulgurex-Motorantrieben angewandt werden.
      3 Überwachung der Weichenlage durch einen externen Schalter oder eine Lichtschranke, die am entsprechenden "Rot"-Eingang angeschlossen ist und im Falle der Stellung auf "GRÜN" gegen Masse durchschaltet. Dies kann z.B. bei den Fulgurex-Motorantrieben angewandt werden.
    (*) kennzeichnet die Voreinstellung.
    Hinweis: Für die Einstellungen 2 und 3 sind die entsprechenden Eingänge direkt auf der Platine zu kontaktieren, siehe hierzu die Erläuterungen zum Schaltplan.
  • CV 548 (36): FEEDBACK MODE Funktion 2
    Diese CV legt die Art und Weise fest, wie die Rückmeldung für Funktion 2 erfolgt.
  • CV 549 (37): FEEDBACK MODE Funktion 3
    Diese CV legt die Art und Weise fest, wie die Rückmeldung für Funktion 3 erfolgt.
  • CV 550 (38): FEEDBACK MODE Funktion 4
    Diese CV legt die Art und Weise fest, wie die Rückmeldung für Funktion 4 erfolgt.

Adressvergabe:

    Es gibt zwei verschiedene Adressierungsmodi für Accessory Decoder:
    decoderbezogene Adressierung und ausgangsbezogene Adressierung. Diese wird anhand von Bit 6 im CV541 unterschieden:
  • Decoderbezogene Adressierung:
    Das ist die "klassische" Adressvergabe, welche von der Mehrheit der Decoder am Markt und auch von den Steuerungsprogrammen unterstützt wird. Die Adresse des Decoders errechnet sich gemäß:
      Address = (CV513 & 0b00111111) + (CV521 & 0b00000111) << 6;
    Das sind 9 Bit, d.h. 512 mögliche Decoder; je Decoder gibt es 4 Ausgangspaare, welche mit 2 Bits im Befehl addressiert werden. Der jeweile Ausgang eines Paares (also *rot* oder *grün*) wird mit einem dritten Befehlsbit festgelegt.
    Im Adressraum von 512 Decodern gibt es zwei reservierte Adressen: 0 wird nicht verwendet, und Adresse 511 ist die Broadcast-Adresse: Befehle an diese Adresse gehen an alle Decoder. Hinweis: das kann bei mehreren installieren Weichendecodern schon mal die Stromversorgung in die Knie zwingen.
    Typischerweise werden damit 4 Betriebstellen mit je zwei Zuständen angesprochen. Das sind in der Regel Weichen oder zweibegriffige Signale.
      Beispiele:
    • Decoder 1: CV513 = 1, CV521 = 0 (Weichen 1...4)
    • Decoder 63: CV513 = 63, CV521 = 0 (Weichen 249...252)
    • Decoder 64: CV513 = 0, CV521 = 1 (Weichen 253...256)
  • Ausgangsbezogene Adressierung:
    Das ist die Erweiterte Adressvergabe, bei der ein Decoder nur eine Betriebstelle anspricht. Die Zustände dieser Betriebsstelle werden dann im Befehlswort, dem sog. Aspect übertragen. Mit der Adresse wird also z.B. ein Signal festgelegt, mit dem Befehlwort wird dieses Signal dann z.B. auf Hp0, Hp00, Hp1, Hp2 .. usw. geschaltet. Die Adresse des Decoders errechnet sich hier gemäß:
      Accessory-Output = (CV513+(CV521*256)) - 1;
    Die Adresse 0 ist wird nicht verwendet, die höchste Adresse 2047 wird wieder als Broadcast verwendet, so daß 2046 mögliche Adressen übrig bleiben.

Programmierung ohne CV's

    Dieser Decoder kann wie die anderen OpenDecoder auch einfach per Programmiertaster und Erlernen des Befehls programmiert werden.
      ModeFunktion
      0 Weichendecoder für Magnetantriebe, Pulsdauer 0,2s
      1 Weichendecoder für Magnetantriebe, Pulsdauer 0,5s
      2 Weichendecoder für Magnetantriebe, Pulsdauer 1s
      3 Weichendecoder für Magnetantriebe, Pulsdauer 2s
      4 Dauerdecoder für Lichtsignale, 4 Signale zweibegriffig
      5 ???
      6 ???
      7 ???
    Wenn während diesen Vorganges die Steckbrücke Jumper 1 gesteckt ist, dann werden auch die wichtigsten CV's mit sinnvollen Voreinstellungen programmiert:
    • Bei Programmierung als Pulsdecoder (für Weichen) ist der Rückmeldemode für Magnetantriebe (CV547..CV550=1) gewählt.
    • Bei Programmierung als Dauerdecoder ist die Rückmeldung der einzelnen Ausgänge auf 0 gestellt, d.h. nur das letzte Kommando wird überwacht (CV547..CV550=0).

Anschluß

Erläuterungen zur Software

    Die Software für OpenDecoder2 ist in C (mit AVR-Studio und winavr) geschrieben und in folgende Module aufgeteilt:
    • dcc_receiver.c, .h:
      Mit diesem Modul wird interruptgesteuert das DCC Telegramm empfangen und die empfangenen Bits als "message" hinterlegt. Mittels einer Semaphor-Operation ("Received") wird mitgeteilt, dass eine neue Nachricht vorliegt.
    • dcc_decode.c, .h:
      Mit diesem Modul wird eine empfangene Nachricht dekodiert; CV-Zugriffe werden direkt innerhalb dieses Moduls erledigt, für andere Zugriffe auf diesen Dekoder wird der entsprechende Auswerte-Code zurückgeliefert.
    • port_engine.c, .h:
      Hier werden die Ausgänge gesteuert, dies gliedert sich in zwei Teile: Ein Interruptprozeß, welcher zeitlich veränderliche Abläufe durchführt und ein "Aktions"-Programm, dass die richtigen Reaktionen auf ein erkanntes DCC-Kommando durchführt. Sollte durch die Aktion eine permanent abzuspeichernde Zustandänderung hervorgerufen werden, so wird das Semaphor DoSave gesetzt. Die Port-Engine arbeitet mit einem Zeitraster von 20ms.
    • main.c, .h:
      Nach dem Initialisieren werden die Semaphor-Flags der anderen Module abgefragt. Sollte eine DCC-Nachricht empfangen worden sein, so wird diese Nachricht dekodiert: Aufrufe an die eigene Adresse werden als auszuführende Aktion an die port_engine oder an den Servo-Prozess weitergeleitet. CV-Operationen, Speicherbefehle und Progammierbefehle werden innerhalb des dcc-decode-Moduls abgewickelt.