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
- 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. 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 effektiv, aber einfach zu detektieren und man muß auch die Zeit berücksichtigen, zu der das entstanden ist.
Die Nutzlast kodiert das übertragene Kommando, Datenlängen von 2 bis 13 Byte sind möglich. Das erste Byte legt die Kommandoklasse fest:
1. Byte | Bedeutung |
---|---|
0 | Reset oder Lok-Broadcast |
1..111 | Lokbefehle (kurze Adresse) |
112..127 | Service Mode (Programmierung) |
128..191 | Zubehördekoder |
192..231 | Lokbefehle (lange Adresse) |
232..254 | Reserviert |
255 | Idle |
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).
Lokbefehle
-
Adressebestimmung:
- 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:
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 10.240 Adressen möglich, wobei die Adresse 0 als Broadcast an alle Loks reserviert ist.
Hierbei gibt es jedoch Einschränkungen im praktischen Betrieb:
Operation | Bedeutung |
---|---|
0 | Decoder and Consist Control |
1 | Extrabefehl (=Advanced Operation Instruction),
die restlichen 5 Bit geben den Befehlstyp an. (z.B. 0x1F -> 126 Fahrstufen, die Geschwindigkeit folgt im nächsten Byte |
2 | Geschwindigkeitsbefehl, 28 Fahrstufen, rückwärts |
3 | Geschwindigkeitsbefehl, 28 Fahrstufen, vorwärts |
4 | Lokfunktionen F4 bis F0 |
5 | Lokfunktionen F8-F5 sowie F12-F9 |
6 | Erweiterte Lokfunktionen und Binary State Control |
7 | CV-Zugriff (PoM) |
Analog Output Kommando
- Dieses Kommando gehört zu den sog. Advanced Operation Instruction (001).
Format | 001CCCCC 0 FFFFFFFF 0 DDDDDDDD 0 [XOR] |
---|---|
CCCCC = 11101 | Analog Function - Instruction: "11101" bedeutet Kontrolle der Analogfunktion gemäß Tabelle. |
FFFFFFFF | Enum der Funktion |
DDDDDDDD | Wert der Funktion |
Enum (FFFFFFFF) | Analogfunktion |
---|---|
00000001 | Volume Control |
xxxxxxxx | reserviert |
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. (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.
Operation | Bedeutung | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1111cccc | PoM-Command, short form: cccc bezeichnet das Zielregister:
| ||||||||||||
1110ccAA | PoM-Command, long form: cc bezeichnet die Operationsart,
aa sind die MSBs der CV-Adresse:
|
Kommandos für BiDi *)
-
Zum Veranlassen von speziellen BiDi Aktionen (wie z.B. Anmelden)
wird das IDLE Kommando erweitert.
- 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
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
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
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
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.
Format | 11111111 0 EEEEEEEE 0 {[Parameters] 0}[XOR] |
---|
Enum (EEEEEEEE) | Bedeutung |
---|---|
0x00 | Standard Idle Kommando (wie bisher) |
0x01 | Zentralenkennung (UniqueID) |
0x02 | Dekoder Suche |
0x03 | Direktzugriff |
0x04 | Sitzungsadresse zuweisen |
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.
Zur Übertragung der Modellbahnuhrzeit wurde diese Erweiterung der RP9.2.1 vorgeschlagen:
Format | 00000000 0 11000001 0 TCODE0 0 TCODE1 0 TCODE2 0 TCODE3 [XOR] |
---|---|
00000000 | Broadcast |
11000001 | Feature Expansion Nummer 00001 |
TCODE | 1, 2, 3 oder 4 Byte mit Zeitinformationen |
00mmmmmm | mmmmmm = Angabe der Minute, Wertebereich 0...59. |
100HHHHH | HHHHH = Angabe der Stunde, Wertebereich 0...23. |
01000www | www = Wochentag, 0=Montag, 1=Dienstag, ... 6=Sonntag. |
110fffff | fffff = Uhrbeschleunigungsfaktor, fffff=0 heißt Uhr angehalten. |
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.
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
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.