OpenDCC AniMat Software

Kurzanleitung

    Ziel bei der Entwicklung von AniMat war eine universelle Plattform, um all die kleinen Dinge und Szenen rund um den Fahrbetrieb optimal anzusteuern. Hierzu kann der AniMat in verschiedenen Modi betrieben werden. Dadurch wird festgelegt, wie er auf Eingangssignale oder Befehle von der Zentrale reagiert. Diese Modi werden mittels Konfigurationsvariablen ausgewählt und eingestellt. Deshalb muß vor der Anwendung dieser Mode zuerst gewählt werden:
      MODEBedeutung
      0 AniMat arbeitet als Weichendekoder.
      Das ist ein klassischer Weichendekoder für 4 Spulenpaare oder Dauerausgänge (jedoch ohne Feedback und ohne Auswertung Abschaltbefehl).
      1 AniMat arbeitet als Servodecoder.
      Es werden zwei Servos mit frei vorgebbaren Bewegungsabläufen angesteuert.
      2 AniMat arbeitet als Multipostion Servodecoder
      Es werden zwei Servos mit je acht unterschiedlichen Zielpunkten angesteuert.
      40 AniMat arbeitet als Sound Dekoder, gesteuert als Zubehördekoder.
      Es werden acht individuell konfigurierbare Sounddateien (mp3, Stereo-Sound) abgespielt.
      41 Kirchenläutewerk: AniMat wertet die Modellbahn-Uhrzeit aus und spielt die empfangenen Viertel- und Stundenschläge ab. (Glockenschlagdekoder)
      42 Sequenzer-Mode: AniMat bietet hier die Kombination von beliebigen Folgen aus Schaltausgang, Motoransteuerung, Servobewegung und Sound in sog. Schaltwerken.
      43 MotorDecoder  (in test)
    Jeder Mode wird durch einen Satz an Konfigurationsvariablen in seinem Verhalten näher bestimmt. Zudem gibt es Konfigurationsvariablen, die für den ganzen Dekoder gelten. Dadurch enthält der Dekoder in Summe sehr viele CVs und ist daher im Einsatz nicht ganz so leicht wie ein einfacher Schaltdekoder. Aber es gibt einige Hilfsmittel, welche die Konfiguration erleichtern, zudem sind die CV bereits sinnvoll vorbelegt.

    Aus Gründen der Übersichtlichkeit und Wartbarkeit sind die CVs ind Blöcke gegliedert und in separaten Kapiteln beschrieben. Die Funktionsblöcke sind wie folgt auf den Speicher abgebildet:
      CV-Bereiche
      1-39 Allgemeine Decodereinstellungen wie z.B. Adresse und Mode
      40-295 Einstellungen für Servos: Endanschläge, Umlaufkurven, Geschwindigkeit, ..
      296-315 Einstellungen für Motoren: Wiederholfrequenz, Regelparameter, Vmin, Vmax, ..
      316-415 Einstellungen für Sound: Lautstärke, Dateinamen, ...
      416-426 Einstellungen für Glockenschlag: Typ, Nachtruhe, ...
      426-833 Einstellungen für Schaltwerke: Laufgeschwindigkeit, Nockenaktionen und Positionen ...

    Jeder Mode beherrscht das vereinfachte Adressen-Lernen über Taster (anzuschließen zwischen PROG und Masse).

CVs für das allgemeinen Verhalten

    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.
    Die CV's sind bei OpenDecoder gemäß der Normung der NMRA vergeben, wobei OpenDecoder4 wegen der Anzahl an CVs nicht vom sogenannten CV-Remapping Gebrauch macht: Die CVs beginnen bei CV1 und reichen bis CV1024.
  • CV 1: Decoder Adress Low (*=1)
  • CV 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 wird dieser ingoriert.
    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 4: ON TIME Function 2
    Einschaltzeit des Ausgangspaares 2. Ansonten wie CV3.
  • CV 5: ON TIME Function 3
    Einschaltzeit des Ausgangspaares 3. Ansonten wie CV3.
  • CV 6: ON TIME Function 4
    Einschaltzeit des Ausgangspaares 4. Ansonten wie CV3.
  • CV 7: Version
    Dieses Register enhält die Softwareversion: 0x40; nur Lesezugriff möglich
  • CV 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 OpenDecoder benutzt: 0x0D = 13 = Selbstbau Decoder.
    Dieses Register ist fest eingestellt und kann nur gelesen werden.
    Durch einen Schreibzugriff auf dieses Register kann 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 (und darf dabei nicht abgeschaltet werden!).
  • CV 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 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 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! Achtung - es muß auch das passende File geladen sein, welche die gewählte Betriebsart auch unterstützt. Eine bestimmte Software unterstützt nicht alle Modi (siehe Download). Sollte ein Mode eingestellt werden, den die geladene Software nicht unterstützt, so blinkt der Decoder 6*schnell-Pause.
    Im folgenden sind nur die CV's für die Grundeinstellungen beschrieben, die CV für jeweiligen Funktionsblöcke sind auf weiteren Seiten beschrieben!
  • CV 34: MANUAL CONTROL
    Hier wird die Art und Weise einer eventuellen Handbedienung eingestellt. Handbedienung erfolgt über den 8-bit breiten Eingangsport.
      CV 34: MANUAL CONTROL
      0 Handbedienung abgeschaltet
      1 (*) Direkte Zuordnung, jeder Eingang entspricht einem DCC-Befehl. Dieser Mode entspricht quasi einer mehrkanaligen Klingel.
      2 Lautstärkeregelung über Taster (reserviert, z.Z. noch nicht implementiert)
  • CV 35: MANUAL CONTROL MASK
    Wenn Handbedienung freigeschaltet ist, dann wird mit dieser Maske eingestellt, welche Eingänge als Bedieneingänge funktionieren. Eine 1 markiert den jeweiligen Eingang als aktiv. Wenn dieser Eingang dann gegen Masse geschlossen wird, dann wird intern ein zugehöriges Event ausgelöst (wie wenn ein DCC Befehl mit diesem Adress-Offset eingetroffen wäre).
    Unabhängig von dieser Einstellung können Eingänge im Sequenzer-Mode auf 0 oder 1 abgefragt werden.
      CV 35: MANUAL CONTROL MASK
      0 Handbedienung abgeschaltet
      255 (*) Direkte Zuordnung der Bits, jeweils eine 1 kennzeichnet den Eingang als für Handbedienung freigegeben.
  • CV 36: Errorcode (reserviert)
    Bestimmte interne Fehler werden hier abgelegt.
  • CV 37: VS1011 Status (reserviert)
    Hier wird (bei Abspielproblemen) der Status des mp3-Chips abgelegt.

Fehlercodes

  • Der Decoder blinkt .. was bedeutet das?
    Mit Hilfe der LED wird ein interner Zustand des Decoders angezeigt. Dabei wechseln sich eine Reihe schneller Pulse mit einer Pause ab. Es gibt folgende Blinkcodes:
     1  ----x----x---- reserved
     2  ----x-x----x-x---- reserved
     3  ----x-x-x----x-x-x--- reserved
     4  ----x-x-x-x----x-x-x-x--- Der VS1011 arbeitet nicht.
     5  ----x-x-x-x-x---- Es wurde noch keine Adresse programmiert. Das ist der normale Zustand nach dem Laden der Firmware bzw. nach einem Decoder-Reset.
     6  ----x-x-x-x-x-x---- Falscher Mode, der gewählte Mode wird von der geladenen Firmware nicht unterstützt. (also z.B. wenn beim ServoDecoder DMX gewählt wird).
     X  --|--|--|--|-- schnelles Blinken: Programmiermode aktiv.
     X  -|-|-|-|- sehr schnelles Blinken: es werden intern gerade Werte umkopiert, z.B. nach einem Preset oder Reset-Befehl. Dabei darf der Decoder nie stromlos geschaltet werden.
  • Der Decoder piept .. was bedeutet das?
    Die per DCC-Kommando aufgerufene mp3-Datei wurde nicht gefunden.

Software Internas

    Beim AniMat habe ich ein Echtzeit-Betriebssystem eingesetzt. Verwendet wird ein kleiner kooperativer Kern (cortos), also kein echtes RTOS mit Time Slicing, sondern ein Kern, der auf kooperatives Verhalten der Tasks angewiesen ist - eine Task darf also nicht auf Ereignis aktiv warten, sondern muß bei einer Wartebedingung die Kontrolle abgeben.
    Die Kontrolle über die CPU kann sie dabei entweder automatisch nach einer gewissen Zeit wieder erlangen oder besser durch eine Benachrichtigung von der Ereignisquelle. Harte Echtzeitanforderungen werden durch Interrupts abgedeckt. Die Latenz und Performance einer solchen Struktur ist besser als bei vollständigen Taskwechseln, jedoch müssen sich alle Teile kooperativ verhalten, was manchmal zu schlechter lesbaren Code und zu verkünstelten switch-Anweisungen führen kann.
    Die Vorteile dieser Implementierung: Der simultane Betrieb von DCC, Steuerung per USB und Steuerung über die externen Eingänge wird möglich. Zudem können leicht weitere (lokale) Steuerungsebenen eingezogen werden wie z.B. das Zwischenschalten eines Nockenschaltwerkes zwischen (DCC-)Eingang und entsprechender Ausgangsaktion.

    Timing:
    Der Echtzeitkern läuft mit einer Interruptrate von 1,6ms, also ca. 600 Int. je Sekunde. Einer der möglichen kritischen Fälle könnte hierbei das Streamen der mp3-Daten auf den VS1011 Chip sein. Der VS1011 verfügt über einen Eingangs-Fifo von 16384 Bits und fordert bei 16128 Bits ein Nachladen an. Vom Zeitpunkt der Anforderung bis zum Leerlaufen des VS1011e sind also 16kBit. Dies bedeutet bei 128 kbit/s eine Vorhaltezeit von 125ms. Zusätzlich verfügt der VS1011e noch über einen 512 Sample tiefen Ausgangsfifo, was bei 44100 Hz einer Zeit von 11.6 ms entspricht. (->Weitere Details)