DCC

    Hier folgt eine kurze Beschreibung des DCC Standards, insbesondere auch von Neuerungen. Zum genauem Studium sei auf die NMRA-Normen verwiesen. Tiefergehende Infos finden sich auch bei den Erläuterungen zur Software der Zentrale.
    Im Februar 2011 wurden neue Erweiterungen angekündigt: ein neuer DCC-Befehl, der neben der Geschwindigkeit auch alle Funktionstasten gemeinsam überträgt, statt einzeln. Weiterhin wurden neue Befehle zum blockweisen Lesen und Schreiben von CV-Daten definiert.

Übersicht

    DCC Kurvenform
    Bei DCC wird eine 1 als zwei schnelle Flankenwechsel (nach je 58µs), eine 0 als zwei langsame Flankenwechsel (nach je 116µs) übertragen, es is also quasi eine FM, jedoch mit variabler Symboldauer. je Bit werden zwei Flankenwechsel verwendet, die Polarität des Signals ist dabei egal. Das bedeutet, die Polariät beeinflußt nicht die Fahrtrichtung, diese wird immer relativ zum Fahrzeug angegeben. Stellt man eine Lok anders herum aufs Gleis und fährt 'vorwärts', so bewegt sie sich immer in Richtung des Führerstandes 1 bzw. Schornsteins.
    Innerhalb des seriellen Datenstromes erfolgt das Framing mittels einer Preambel bestehend aus mind. 10 Einsbit, gefolgt von 8-bit organisierter Nutzlast, die durch je eine Null getrennt werden. Am Ende einer Nachricht folgt ein Paritybyte, gefolgt von einer 1 (anstelle der 0) zum Markieren des Endes.
    Die Kodierung ist nicht sonderlich effizient, aber einfach zu detektieren und man muß auch die Zeit berücksichtigen, zu der das entstanden ist. Und sie hat sich über die Jahre hinweg bewährt!

    Die Nutzlast kodiert das übertragene Kommando, Datenlängen von 2 bis 13 Byte sind möglich. Das erste Byte legt die Kommandoklasse fest:
    1. ByteBedeutung
    0Reset oder Lok-Broadcast
    1..111Lokbefehle (kurze Adresse)
    112..127Service Mode (Programmierung)
    128..191Zubehördekoder
    192..231Lokbefehle (lange Adresse)
    232..254Reserviert
    255Idle
    Die Präambel, welche zum Synchronisieren von Nachrichten dient muß mind. 10 Einsbits lang sein, die Zentrale muß gemäß NMRA 14 Einsbits senden. Bei der Einführung der bidirektionalen Kommunikation hat man (im Prinzip) die ersten 4 Bits der Präambel durch eine Austastlücke ersetzt. Leider gibt es am Markt eine Reihe von Dekodern, welche die Präambel erst ab 11 Einsbits erkennen und zudem nach einer Austastlücke noch 'etwas' Zeit brauchen. Daher ist ab 2011 für den Einsatz von railcom® die Verwendung von 12+4=16 Einsbits auf Seiten der Zentrale vorgeschrieben.

Physikalische Parameter

  • Gleissignal:
    Rechtecksignal, mind. 7V Hub, max. 22V Hub. Nominalspannung bei H0 soll 13,5V sein (damit sich nach den Gleichrichterdioden 12V für den Motor ergeben).
    Die Flanken müssen den Bereich von -4V bis +4V monoton und mit mind. 2,5V/µs Slewrate durchqueren. Das Rechtecksignal soll gleichspannungsfrei sein (Ausnahme Zerostretching, also verlängerte Null-Phase zum Erzeugen eines gezielten Gleichanteils; Zerostretching verträgt sich aber nicht mit railcom®
  • Dekoderanforderungen:
    Spannungsfestigkeit: +/- 27V (24V bei Spur N).

DCC und Polarität

    In der Kodierung wird die Fahrtrichtung der Lok bezogen auf die Lok selbst festgelegt: vorwärts = Lok fährt Richtung Führerstand 1 bzw. Richtung Kamin, rückwärts = Lok fährt Richtung Führerstand 2 bzw. Richtung Tender. Die Polarität des Gleissignales spielt dabei keine Rolle. D.h. egal wie rum die Lok auf dem Gleis steht: vorwärts ist immer Richtung Führerstand 1!
    Hier unterscheidet sich also Digitalbetrieb wesentlich vom Analogbetrieb.

    Bei Weichen und Kehrschleifen muß aber trotzdem auf die Polarisierung geachtet werden: an diesen Stellen geht es um den kurzschlußfreien Betrieb bei Überfahrt, d.h. man muß dafür Sorge tragen, dass unter dem Zug immer das gleiche Signal bei allen linken bzw. rechten Radschleifern anliegt. Deshalb muß man Herzstücke je nach Stellung der Weiche mal auf die linke, mal auf die rechte Seite schalten. "Polarisieren" ist der gängige Begriff dafür, und erfordert entsprechende Ansteuerung (z.B. durch passenden Bausteine).
    Bei Kehrschleifen entsteht das gleiche Problem, aber das ist ebenso elektronisch lösbar und man kann ohne Kurzschluß und Ruckeln durch eine Kehrschleife durchfahren.

    Trotzdem hat DCC auch eine Polarität, diese kann man z.B. daran erkennen, wie nach der Präambel die erste Null kodiert ist: entweder 000111 oder 111000. Und diese Polarität kann auch auswerten - z.B. mit dem DCCpola, der sich beim Anlagenbau als wertvolle Hilfe erweist.

    Die Fahrtrichtung von Loks wird ja durch die Befehle vorgegeben. Bei der Verwendung von Railcom® kann dann zusammen mit der DCC-Polarität auch eine Aufgleisrichtung (also wie rum die Lok auf dem Gleis steht) ermittelt werden. Das ist insbesondere für computergestützten Begriff sinnvoll: der Computer kann damit dann 'sehen', wo Führerstand 1 ist. Geisterfahrten in die falsche Richtung werden vermieden.

Railcom®

    Railcom ist der Markenname der Fa. Lenz für ein Halbduplexverfahren. Hierzu wird die Übertragung auf dem Gleis für kurze Zeit unterbrochen, und seitens der Zentrale / des Booster werden die beiden Schienen verbunden, um einen Stromfluß vom Dekoder zurück zur Zentrale zu ermöglichen. Diese Austastlücke wird cutout genannt. In der cutout können Dekoder Daten zurück zur Zentrale senden.

    Hier aufgezeichnet: die beiden Ausgangssignale DCC und NDCC der Zentrale Z1. Gut kann man die Austastlücke sowie die Übertragung von 0- bzw. 1-Bits erkennen.

DCC und 'Masse'?

    Es herrscht oft Unklarkeit, ob und wie DCC zusammen mit 3L-Gleis funktioniert, dort habe man ja eine 'Masse', die es bei DCC nicht gäbe.
  • Aus Sicht des Protokolls ist ein DCC oder MM-Signal nichts anderes als eine Folge von zwei Zuständen, nennen wir diese beiden Zustände mal A und B. Es gibt Regeln, wie diese Folgen zu interpretieren sind, also welche Sequenzen A/B z.B. Lokadresse bedeuten sollen. Die Regeln für DCC-Interpretation haben zudem den Vorteil, dass die beiden Zustände A und B beliebig austauschbar sind, d.h. die Polarität des Gleissignals ist egal.
  • Aus Sicht des Gleises ist DCC oder MM auch eine Folge von zwei Zuständen, A bedeutet: V(links) - V(rechts) = 15V, B bedeutet: V(rechts) - V(links) = 15V. Wohlgemerkt, hier geht es um nur die [b]Differenzen[/b], es spielt keine Rolle, welchen Zustand V(links) bezogen auf Erde oder ein sonstiges Potential hat.
    • Man könnte also z.B. fest vereinbaren, dass V(links) immer 0V ist. Das würde bedeuten, dass V(rechts) +/-15V durchlaufen muß.
    • Oder man könnte vereinbaren, dass bei A die Spannung V(links)=15V und bei B V(links)=0 ist. V(rechts) wurde dann entsprechend bei A gleich 0V und bei B gleich 15V sein.
    Beide Vereinbarungen sind willkürlich und haben keinen Einfluß auf das Differenzsignal! Die erste Vereinbarung entspricht den Gepflogenheiten bei MM: dort wird traditionell V(links) mit den beiden Außenschienen verbunden und als 'Masse' bezeichnet. Die zweite Vereinbarung entspricht den DCC-Gepflogenheiten, das Gleissignal wechselt die Polarität.

    Anmerkung zur 'Masse' bei 3L-Systemen:
    Beim 3L-Gleis werden i.d.R. die beiden Schienen für eine Zuführung zur Lok verwendet, der Mittelleiter ist die zweite Zuführung. Unterteilt man so eine Anlage in Abschnitte, wird häufig nur der Mittelleiter getrennt und die Außenschiene durchgehend gelassen. Der Bequemlichkeit halber bezeichnet man diese durchgehende Außenschienen als 'Masse'. Der Strom, welcher zu einer Lok fließt, wird nun irgendwie quer durch die ganze Anlage über die 'Masse' zurück zur Zentrale fließen. Der Weg ist nicht vorhersehbar und ist bedingt durch schlechte Leiteigenschaften von Neusilber und von den Schienenlaschen nicht immer sehr niederohmig. Die unkontrollierte Rückleitung verursacht Einkopplungen und Störungen, insbesondere wenn da ein Pfad über die Belegtmelder möglich ist. Auch das induzierte Magnetfeld eines Stromes ist von eingeschlossen Fläche abhängig, diese kann dabei recht groß werden.
    Als Abhilfe wird oft empfohlen, parallel zum Gleis weitere Rückverbindungen zu legen, um diesen Rückweg ein wenig leichter und direkter zu machen, damit die Einkopplungen kleiner werden (Stichwort Ringleitung).
    Die eigentliche Ursache (der unkontrollierte Rückweg) wird dabei aber nicht adressiert, hierzu müßte man die Schienen auch außen trennen und jeden Abschnitt bzw. jeden Verbraucher mit zwei Leitungen anfahren, dann hat man die Kontrolle über die Rückströme. Diese laufen dann da zurück, wo sie herkamen, die Stromkreis sind für sich, eingeschlossene Flächen sind klein, es gibt keine quer durch die Anlage verlaufenden Einkopplungen.

Lokbefehle

    Adressebestimmung:
    Bei kurzer Lokadresse ergibt sich die Adresse aus dem 1. Byte. danach folgt ab dem 2. Byte die Befehlsart. Bei langer Lokadresse werden im 2. Byte weitere Bits der Lokadresse übertragen, die Adresse ergibt sich zu: (Byte1 & 0x3F) << 8 ) | Byte2. Es sind also 10240 Adressen möglich, wobei die Adresse 0 als Broadcast an alle Loks reserviert ist.

    Hierbei gibt es jedoch Einschränkungen im praktischen Betrieb:
  • Im Bereich 1..111 überlappen sich lange und kurze Adresse - es muß also seitens der Zentrale entschieden werden, ob man diese Lok lang oder kurz anspricht. Oft wird diese Grenze bei 99 gelegt: bis Adresse 99 kurze Adresse, danach lange Adresse.
  • Viele Zentralen und Bediengeräte haben nur max. 4 Stellen zur Eingabe. Die Adressen 10000 bis 10239 sind dann nicht ansprechbar.
  • Nach der Adresse folgt die Operation Instruction, also der Befehl, was diese Lok machen sollen. Die drei MSBs dieses Bytes legen den Typ fest:
    OperationBedeutung
    0Decoder and Consist Control
    1Extrabefehl (=Advanced Operation Instruction), die restlichen 5 Bit geben den Befehlstyp an.
    (z.B. 0x1F -> 126 Fahrstufen, die Geschwindigkeit folgt im nächsten Byte
    2Geschwindigkeitsbefehl, 28 Fahrstufen, rückwärts
    3Geschwindigkeitsbefehl, 28 Fahrstufen, vorwärts
    4Lokfunktionen F4 bis F0
    5Lokfunktionen F8-F5 sowie F12-F9
    6Erweiterte Lokfunktionen und Binary State Control
    7CV-Zugriff (PoM)
    Ab der railcom-Spezifikation 1.2 wurde die Lokadresse 253 als Programmieradresse reserviert, es gibt noch keine genaueren Definitionen, wie ein Zugriff auf diese Adresse auszuwerten ist.

Zubehörbefehle

    Zubehör wird mit zwei verschiedenen Befehlen angesprochen: das 'einfache' (=basic) und das 'erweiterte' (=extended) Format.

Einfaches Format

    Das einfache Format benutzt zwei Bytes zur Kodierung:
    Format10AAAAAA 0 1AAADAAC 0 [XOR]
    AAAAAAAAbezeichnet die Adresse, hier haben sich aufgrund der historischen Entwicklung bestimmte Besonderheiten ergeben (s.u.)
    Dkennzeichnet den 'Aktivierungszustand', also ob der Ausgang ein- oder ausgeschaltet wird.
    Ckennzeichnet die Spule. (Coil)
    Der Befehl lehnt sich eng an die ersten 4-fach Weichenantriebe mit paarweisen Spulen an. Deshalb ist die Auswahl des Spulenpaares in den Bits 2 und 1 des zweiten Bytes. Welche Spule aktiviert wird, legt das Bit C fest, somit bilden die letzten drei Bits (AAC) die eigentliche Ausgangsadresse. C=0 soll dabei Weiche auf Abzweig bzw. Signal auf Halt kennzeichnen. D=1 bedeutet Spule (oder Ausgang) einschalten, D=0 bedeutet ausschalten.

    Die Adressbits sind über den Befehl verteilt, in der CV-Übersicht gibt es eine Graphik, welche den Zusammenhang erläutert, man beachte die Invertierung der mittleren Bits. Die Dekoderadresse 0 soll nicht benutzt werden, die erste zu benutzende Adresse ist also die Adresse 4: 10000001 0 1111D00C 0 [XOR]. Diese soll von Bediengeräten als '1' dargestellt werden.

    Notaus: Ein Zubehörbefehl mit allen Adressbit = 1 (Spulenadresse jedoch 0, Spule deaktiviert) (also Adresse 2047, Codierung 10111111 0 10000110 0 [XOR]) bedeutet Notaus.

    Innerhalb OpenDCC und BiDiB wird im Protokoll das wie folgt abgebildet:
    Die übergebene Adresse wird ab 0 gezählt. In der Ausgabeeinheit wird das auf die obigen Bits abgebildet, also Dekoderadresse, Ausgangspaar und zu aktivierende Spule bestimmt.

Erweitertes Format

    Die enge Orientierung des einfaches Formats an vierfache, zweibegriffige Dekoder verursacht gewisse Kopfstände bei mehreren Begriffen. Hier gibt es diverse Ansätze sowohl auf Dekoderseite als auch auf Bedienerseite, mehrbegriffige Objekt auf diesen einfachen Befehl abzubilden. Meist wird für jeden Begriff eine eigene 'Spule' verwendet, es gibt jedoch auch 'binär' dekodierende Dekoder, welche Kombinationen von 'Spulen' als Begriff verwenden. Besonders extrem in dieser Hinsicht sind Drehscheibensteuerungen, welche dann auch gerne mal 30 Weichenadressen am Stück belegen.

    Die Normung hat für solche mehrbegriffigen Signale oder Weichen das erweiterte Format vorgesehen, hier werden 3 Byte zur Kodierung verwendet:
    Format10AAAAAA 0 0AAA0AA1 0 DDDDDDDD 0 [XOR]
    AAAAAAAAAbezeichnet die Adresse, diese wird analog zu einfachen Format gebildet, die Coiladresse wird dabei aber ausgeklammert.
    DDDDDDDDkennzeichnet den einzustellenden Begriff, 0 ist Hp0.

Analog Output Kommando

    Dieses Kommando gehört zu den sog. Advanced Operation Instruction (001).
    Format001CCCCC 0 FFFFFFFF 0 DDDDDDDD 0 [XOR]
    CCCCC = 11101Analog Function - Instruction: "11101" bedeutet Kontrolle der Analogfunktion gemäß Tabelle.
    FFFFFFFFEnum der Funktion
    DDDDDDDDWert der Funktion
    Damit werden folgende Analogfunktionen angesteuert:
    Enum (FFFFFFFF)Analogfunktion
    00000001Volume Control
    xxxxxxxxreserviert

Erweiterte Programmierbefehle

    Gemäß RP9.2.1 gibt es für die Programmierung der CVs auch noch eine 'Kurzform' ("shortwrite, CV programming short form"):
    0 (adresse) 0 1111CCCC 0 xxxxxxxx (0 yyyyyyyy) 1

    CCCC legt hierbei fest, welche CV(s) beschrieben werden sollen, in diese CVs werden xxxxxxxx und yyyyyyyy eingeschrieben. Dieser Befehl ist wichtig, da er 16-Bit lange Objekte (wie z.B. die lange Adresse) atomic macht und damit das Umprogrammieren z.B. der Adresse per POM erlaubt. In der 9.2.1 ist das nur für eine CV definiert, die railcom-Spec hat das für CV-Paare erweitert:
    CCCC Ziel-CVs
    0000 reserviert (von NMRA)
    0001  
    0010 Beschleunigungswert (CV23)
    0011 Bremswert (CV24)
    0100 Schreiben der langen Adresse ( CV17 (xxxxxxxx) und CV18 (yyyyyyyy) ) gleichzeitig, und setzen des Bit 5 in CV29.
    0101 Schreiben des Indexregisters ( CV31 (xxxxxxxx) = Index high und CV32 (yyyyyyyy) = index low ).
    0110  
    0111  
    1000  
    1001 Programmiersperre (Dekoder Lock), RP-923, Appendix B, siehe unten
    1010  
    1011  
    1100  
    1101  
    1110  
    1111  
    Rückgemeldet wird jeweils als railcom-ID 00 (CV-Antwort), wobei im Falle der Doppelregister zwei Antworten ID 00 hintereinander kommen (zuerst xxxxxxxx, dann yyyyyyyy).

    Anmerkung zum Schreiben der lange Adresse: Laut Spezifikation ist nur das Schreiben der langen Adresse mit Kennung 0100 vorgesehen. Das halte ich für nicht komplett durchdacht: man kann zwar übre diesen Befehl auf eine lange Adresse 'atomic' umprogrammieren, zum Rückprogrammieren auf kurze Adresse muß man aber wieder den Weg über Einzelprogrammierung von CV1 und CV29.5 gehen. Geschickter wäre es, bei Adressen kleiner 128 automatisch im Dekoder auf kurze Adresse umzuschalten und CV1 sowie CV29 entsprechend zu setzen.

Programmiersperre (Decoder Lock)

    0 00000000 0 11111001 0 0aaaaaaa 0 EEEEEEEE 1

    (Das ist ein Broadcast (Lok 0) mit 0xF9 (also ein PoM-Kommando));
    Nur der mit aaaaaaa adressierte Lokdekoder führt fortan Servicebefehle aus, alle anderen Dekoder ignorieren fortan Programmierbefehle; dieses Ignorieren muß auch über einen Aus-Ein-Zyklus hinweg beibehalten werden. (Anmerkung: das sollte eigentlich auch für programmierbare Zubehördekoder entsprechend definiert sein - aber sowas gibt es ja bei der Firma, welche das vorgeschlagen hat, nicht :-( ).
    Der 'Decoder Lock' wird wieder aufgehoben, wenn wieder normale DCC-Befehle empfangen werden.

    Sinn und Zweck dieses Befehls ist es, in einer einfachen Umgebung ohne Programmiergleis die Lokadresse ändern zu können und dabei andere Loks am Gleis belassen zu können. Dieser Befehl ist aber nicht verpflichtend - und greift auch nur auf kurze Adressen. (Quelle: RP-923, Appendix B).

PoM CV-Lesen

    Für das Lesen am Hauptgleis gibt es einem Befehl (NMRA RP 9.2.1), hier wird die CV (bzw. ein Bereich von CVs) adressiert und die gewünschte Aktion gewählt.
    OperationBedeutung
    1111ccccPoM-Command, short form: cccc bezeichnet das Zielregister:
    0000Not available for use
    0010Acceleration Value (CV#23)
    0011Deceleration Value (CV#24)
    0100Programmieren und Einstellen der langen Adresse. Es wird CV17 and CV18 gleichzeitig gesetzt, auch das Bit 5 in CV29.
    0101Einstellen des Indexregisters CV31 (high) und CV32 (low) gleichzeitig.
    1001See RP-9.2.3, Appendix B
    1110ccAAPoM-Command, long form: cc bezeichnet die Operationsart, aa sind die MSBs der CV-Adresse:
    ccBedeutung
    00Blockread, es werden 4 Bytes in Folge gelesen.
    01a) Verify, es folgen aaaaaaaa dddddddd. AA und aaaaaaaa geben die CV-Adresse an, gezählt wird ab 0. dddddddd ist das zu vergleichende Datum. Wenn per BiDi gelesen wird, ist dddddddd = 0.
    b) Block-Read (z.B. nach einer Direktadresse):
    Es folgen 3 Bytes: 2 Indexregisterwerte (H, L) und ein Offset innerhalb der per Index adressierten Page. AA bezeichnet hier dann eine Sequenzkennung, welche bei der Antwort wieder zurückzugeben ist.
    Die Indexregister H und L korrespondieren mit CV31 und CV32.
    10Bitoperation, es folgen aaaaaaaa 111cdbbb, c=opcode: 0=rd, 1=wr; d=data, bbb=bit position
    11Write, es folgen aaaaaaaa dddddddd

Kommandos für BiDi *)

    Zum Veranlassen von speziellen BiDi Aktionen (wie z.B. Anmelden) wird das IDLE Kommando erweitert.
    Format11111111 0 EEEEEEEE 0 {[Parameters] 0}[XOR]
    EEEEEEEE bezeichnet eine Befehlnachricht, diese wird wie folgt kodiert:
    Enum (EEEEEEEE)Bedeutung
    0x00Standard Idle Kommando (wie bisher)
    0x01Zentralenkennung (UniqueID)
    0x02Dekoder Suche
    0x03Direktzugriff
    0x04Sitzungsadresse zuweisen
  • 0x01: Zentralenkennung (UniqueID)
    Mit diesem ENUM soll eine Zentrale periodisch ihre UniqueID aufs Gleis senden. Diese Unique dient zum einen für Decoder zum Erkennen der Zentrale sowie als Anmeldeaufforderung.
    0xFF 0 0x01 0 MAN 0 ZID3 0 ZID2 0 ZID1 0 ZID0 0 SNUM 0 [XOR] 1
    MAN: bezeichnet die Herstellerkennung laut NMRA.
    ZID3-0: ist eine 32-Bit breite Zentralenkennung (UniqueID)
    SNUM: eine fortlaufende Sessionnummer (Neuanmeldezähler)
  • 0x02: Dekoder Suche (ID Search)
    Mit diesem ENUM versucht eine Zentrale die Vereinzelung von Dekodern, welche sich parallel angemeldet haben, um die entstehende Kollision im Rückmeldekanal aufzulösen.
    0xFF 0 0x02 0 DVID 0 DID3 0 DID2 0 DID1 0 DID0 0 [XOR] 1
    DVID: bezeichnet die Herstellerkennung des Dekoders laut NMRA.
    DID3-0: ist eine 32-Bit breite Dekoderkennung (UniqueID)
    Nur dienigen Dekoder, deren ID größer oder gleich schicken eine Antwort.
  • 0x03: Direktzugriff
    Mit diesem Befehl lassen sich Dekoder über die UniqueID des Dekoders ansprechen. Hierzu wird dem normalen DCC-Befehl eine 'Escape'-Sequenz vorangestellt, welche die normale Adressierung ersetzt.
    0xFF 0 0x03 0 DVID 0 DID3 0 DID2 0 DID1 0 DID0 0 {DCC-opcode} 0 [XOR] 1
    DVID: bezeichnet die Herstellerkennung des Dekoders laut NMRA.
    DID3-0: ist eine 32-Bit breite Dekoderkennung (UniqueID)
    DCC-opcode: ist der DCC-Befehl ohne den normalen Adressteil (hier wird ja über die Dekoder-UniqueID adressiert).
  • 0x04: Sitzungsadresse zuweisen
    Mit diesem Befehl wird einem Dekoder (welcher über die UniqueID des Dekoders addressiert wird) eine Adresse für diese Sitzung zugewiesen.
    0xFF 0 0x04 0 DVID 0 DID3 0 DID2 0 DID1 0 DID0 0 ADDRH 0 ADDRL 0 [XOR] 1
    DVID: bezeichnet die Herstellerkennung des Dekoders laut NMRA.
    DID3-0: ist eine 32-Bit breite Dekoderkennung (UniqueID)
    ADDRL, ADDRH: ist die Sitzungsadresse, welche diesem Decoder zugeweisen wird. ADDRH enthält in den beide MSB die Unterscheidung, ob Weichendekoder oder Funktions- bzw. Lokdekoder zugeweisen wird. Für Lokdekoder ist das so kodiert wie CV17/CV18, beim Highbyte wird 192 addiert. (mit 0xC0 verodert).
    Dieser Befehl wird vom Dekoder mit einer BiDi-Nachricht mit der UniqueID beantwortet.

Uhrzeit **)

    DCC hat im Gegensatz zu anderen Digitalsystemen bisher noch keine Übertragung einer beschleunigten Uhr für die Modellbahnzeit.
    Sinnvoll ist diese Erweiterung z.B. für komplexe Funktionsdekoder (Raumlicht, Beleuchtung), welche ihr Verhalten je nach Uhrzeit ändern können. Auch (teil-) autonome Steuerungen (wie z.B. lokale Kirmeskontrolle) können so leichter an die Anlagensteuerung gekoppelt werden. Beispiele sind bewegte Objekte, welche nur zu bestimmten Tageszeiten agieren.

    Auch die Helligkeit von Lichtobjekten kann sich nach der Uhr richten - diese kann man in der Nacht abdimmen. Glockenschlag, Bahnhofsuhr sind weitere Ideen, welche eine Uhr benötigen.
    Zudem erlaubt ein Zeitcode innerhalb DCC auch die bessere Synchronisation mehrerer Anlagenteile. Über die optionale Wochentagsfunktion lassen sich z.B. am Wochenende andere Aktionen durchführen, z.B. Kirchenläuten.

    (alter Stand, bis 12-2018): Zur Übertragung der Modellbahnuhrzeit wurde diese Erweiterung der RP9.2.1 vorgeschlagen:
    Format00000000 0 11000001 0 TCODE0 0 TCODE1 0 TCODE2 0 TCODE3 [XOR]
    00000000Broadcast
    11000001Feature Expansion Nummer 00001
    TCODE1, 2, 3 oder 4 Byte mit Zeitinformationen
    00mmmmmmmmmmmm = Angabe der Minute, Wertebereich 0...59.
    100HHHHHHHHHH = Angabe der Stunde, Wertebereich 0...23.
    01000wwwwww = Wochentag, 0=Montag, 1=Dienstag, ... 6=Sonntag.
    110ffffffffff = Uhrbeschleunigungsfaktor, fffff=0 heißt Uhr angehalten.
    Die Daten bestehen jeweils aus einem 2 Bit Feld (Typ) und 6 Bit Wert. Die Zentrale sendet das Zeitpaket jede Modellbahn-Minute, sie kann aber Zeitpakete bei Bandbreitenknappheit auslassen. Auch müssen in einem Paket nicht alle TCODEs enthalten sein.
    Zu jeder vollen (Modellbahn-)Minute wird von der Zentrale die Uhrzeit gesendet, der Befehl wird nicht wiederholt. Wenn die Anlage angehalten wird, soll der Uhrbeschleunigungsfaktor 0 gesendet werden.
    Anmerkungen:
      -  Die OpenDCC Zentrale hat diesen Befehl bereits implementiert.
      -  die Kodierung der Datenbytes (die beiden MSBs) entspricht der Selektrix-Konvention.
      -  entsprechende Busbefehle (sowohl bei Xpressnet als auch bei der IB) wurden auch definiert.



    (RCN 212, ab 12-2018):
    Format00000000 0 11000001 0 ccmmmmmm 0 wwwhhhhh 0 U0ffffff [XOR]
    00000000Broadcast
    11000001Feature Expansion Nummer 00001
    cccc=Code-Art: 00=Zeitbefehl.
    mmmmmmmmmmmm = Angabe der Minute, Wertebereich 0...59.
    hhhhhh = Angabe der Stunde, Wertebereich 0...23.
    01000wwwwww = Wochentag, 0=Montag, 1=Dienstag, ... 6=Sonntag.
    UU Update, d.h. die Zeit hat sich sprunghaft geändert.
    ffffffffffff = Uhrbeschleunigungsfaktor, fffff=0 heißt Uhr angehalten.
    Format00000000 0 11000001 0 cc0ddddd 0 mmmmyyyy 0 yyyyyyyy [XOR]
    00000000Broadcast
    11000001Feature Expansion Nummer 00001
    cccc=Code-Art: 01=Datumsbefehl.
    dddddddddd = Angabe des Tages, Wertebereich 1...31.
    mmmm = Angabe des Monats, Wertebereich 1..12.
    yyyyyyyyyyyyJahr, Wertebereich 0...4095.

Dekoder Rücksetzen

    Es kann manchmal erforderlich sein, einen Dekoder wieder auf seine Werkeinstellung zurückzustellen. Hierzu ist folgendes Verfahren definiert worden:
      long-preamble 0 01111111 0 00001000 0 01110111 1
    Das ist eigentlich ein Write im Registermode auf die CV8. Leider dauert das Beschreiben der Datenspeicher im Dekoder i.d.R. länger als für eine Programmierzugriff vorgesehen, deshalb soll der Dekoder sich erst mal nur ein Flag setzen und bei folgenden Power-Up Vorgängen das Beschreiben des Urzustandes wieder herstellen. Es kann also sein, das nach einem Factory Reset für eine kurze Zeit nichts mehr geht. Während dieser Zeit soll CV8 auf 255 geblockt sein.
    Manche Dekoder fordern nicht nur einen Write, sondern auch einen bestimmten Wert.
    Fußnoten:
      *) bezeichnet DCC-Erweiterungsvorschläge, die nicht von der NMRA standardisiert sind.
      **) diese Erweiterung wurde vom VHDM im Mai 2011 als Standarderweiterung verabschiedet. Mit Erscheinen der RCN212 wurde das Format des Befehls abgeändert.