OpenDCC - Z1, eine Zentrale für DCC
Überblick
-
"Noch eine DCC-Zentrale? Gibt es doch wie Sand am Meer, kann
man doch kaufen oder irgend einen anderen Bauvorschlag
nehmen!"
Ja, es gibt genug käufliche Zentralen, auch eine Reihe Selbstbauprojekte. Nur bei der Erprobung entdeckten wir das eine oder andere Defizit: mal ist die Zahl der zu fahrenden Loks (in weiser Selbstbeschränkung) zu stark beschränkt, mal gibt es sporadische Resets, mal ist die Priorisierung des DCC-Stacks ungeeignet für einen Anlagenbetrieb - wie kann man nur dem Lokpfiff eine höhere Priorität als dem Bremsbefehl geben?
Und manche Zentrale ist überhaupt nicht auf Datendurchsatz oder kurze Latenzzeiten ausgerichtet. Da wird nach einem Kommando erst mal CTS=off zurückgesendet, dann das empfangene Kommando bearbeitet und dann erst geht die Zentrale wieder online. Fällt nicht weiter auf, wenn nur 4 Loks fahren ...
Eine DCC-Message dauert etwa 6-12ms (je nach Adresse und Fahrstufen), daher ist eine intelligente Verwaltung und Priorisierung unabdingbar, sonst kommt es bei mehreren gleichzeitig beschleunigenden oder bremsenden Loks zu unschönem Fahrverhalten bzw. zum "Verbremsen".
Nachdem unsere bisherige Zentrale für den Fahrbetrieb auf unserer Modellbahn nicht wirklich geeignet war, enstand diese Selbstbauzentrale. OpenDCC erreicht maximalen Durchsatz am Gleis und auf der PC-Schnittstelle durch die intelligente Abarbeitung von Befehlen. Zudem ist es natürlich auch eine kompakte und preislich attraktive Lösung, welche speziell im Zusammenspiel mit dem PC andere Zentralen ersetzen kann.
Der maximale Durchsatz an DCC-Befehlen war oberstes Designziel bei der Entwicklung. Es ist ein intelligenter Refreshalgorithmus implementiert, der neue Fahrbefehle priorisiert und dann zyklisch wiederholt, wobei die Wiederholrate bei schon lange nicht mehr benutzten Loks zurückgenommen wird. Bei der Priorisierung wird zusätzlich noch zwischen Funktionen, Beschleunigung und Abbremsen unterschieden: Bremsbefehle und damit die Fahrsicherheit haben höchste Priorität, selbst wenn viele Loks gleichzeitig gefahren werden. Die dynamische Zuteilung des Gleisprotokoll garantiert dabei extrem schnelle Reaktionszeit der angeschlossenen Fahrzeuge und Dekoder und sorgt dafür, dass dies auch bei langer Betriebsdauer so bleibt. Auch ist der PC-Anschluß unabhängig vom Handregleranschluß - Steuerbefehle des PC müssen sich nicht den Steuerbus mit den Handreglern teilen. Die Zentrale ist mit entsprechenden Handreglern auch ohne PC verwendbar.
Die Platine ist universell ausgelegt und kann mit passender Software als Ersatz für gängige Digitalzentralen (z.B. Lenz oder Intellibox®) bzw. Rückmeldebausteine (HSI88-Emulation) verwendet werden. Bei den Bauteilen und beim Layout habe ich darauf geachtet, dass der Selbstbau leicht möglich ist, d.h. überwiegend "normale" Bauelemente und DIL-ICs. Es ist ein kleiner Booster integriert, um z.B. "schnell mal" fahren oder programmieren zu können. Für den Anlagenbetrieb, insbesondere mit Rückmeldern, sollte ein optogekoppelter Booster nachgeschaltet werden.
Es ist bis auf Nothalt keine Tastatur vorgesehen, auch die Anzeige beschränkt sich auf ein paar Status-LEDs. Mit passender Software (z.B. rocrail) kann aber ganz einfach mit einem PC oder Laptop gefahren werden.
Die Eigenschaften im Detail
- Stromversorgung: Die Stromversorgung erfolgt mit einem externen Netzteil, welches geregelte Gleichspannung liefert. Das Netzteil sollte passend zur Spurweite gewählt werden. Für N empfiehlt sich 12-14V, für H0 16-18V.
- PC-Anschluß: Die Verbindung erfolgt entweder über USB (VID: 0x0403, PID:
0xBFD8, Product Description: 'USB-IF OpenDCC V1.2') oder
seriell (9-polige DSUB-Buchse RS232 an der Rückseite), es ist
19200 Baud, 8 Bit, keine Parity, 1 Stopbit einzustellen (bei
Betriebsart Lenz) Die Auswahl der verwendeten Schnittstelle
erfolgt durch Jumper auf der Platine. (Bestückungsalternative
bzw. über Steckbrücken umschaltbar). Bei Verwendung der
USB-Schnittstelle ist auf der PC-Seite ein Treiber
zu installieren, mit diesem Treiber läßt sich dann OpenDCC
über einen virtuellen COM-Port ansprechen.
Das verwendete Protokoll des Interfaces hängt von der geladenen Software ab. Zur Zeit gibt es eine Universalsoftware, die per Compileoption auf Lenz V3.6 bzw. P50X (Intellibox) oder HSI88 eingestellt werden kann. Es ist keinerlei Geschwindigkeitsbeschränkung des PC erforderlich (wie z.B. bei der IB), OpenDCC arbeitet voll duplex bei der maximalen Geschwindigkeit der Schnittstelle, echter Hardwarehandshake wird unterstützt. Zudem müssen bei OpenDCC die Fahrbefehle nicht erst über einen Modellbahn-Bus an die Zentrale übertragen werden (wie es z.B. bei Lenz der Fall ist), sondern werden direkt an das Gleis ausgegeben.
Die Software ist über die normale Schnittstelle updatebar, es ist hierfür kein Programmieradapter erforderlich.
Sicherheitshinweis: Es ist (im Gegensatz zu manch käuflicher Lösung) eine vollwertige RS232 Schnittstelle mit korrekten Pegeln und Hardware-Handshake implementiert, diese ist galvanisch nicht vom PC getrennt. Dadurch ist je nach PC fallweise die Schutztrennung, welche bei Spielzeug gefordert wird, aufgehoben. Zur Erreichung der Schutztrennung ist ein optogekoppelter Booster nachzuschalten. - Schnittstellen zur Modellbahn:
- Es gibt zwei DCC-Ausgänge, Programmiergleis und
Hauptgleis. Der Hauptgleisausgang ist mit einer
intelligenten Datenverwaltung ausgerüstet, welche das
Optimum aus dem DCC-Protokoll herausholt.
Das verwendete Stecksystem ist Wago Mini, Raster 3,5mm; (Der Einlötstecker hat die Art.Nr. 734-164, das Steckerteil die Nummer 734-104;) Alternativ sind auch handelsübliche Schraubklemmen RM5.04 möglich. Beide Ausgänge sind kurzschlußgeschützt (Programmiergleis 0,5A, Hauptgleis 1,5A), wobei der zu entnehmende Dauerstrom 1,0A nicht übersteigen soll. Dies kann zu einer Zwangsabschaltung wegen Übertemperatur führen. - Optokopplereingang und Ausgang für Nothalt oder Weichenrückmeldung. Das Stecksystem ist wieder Wago wie oben. Nothalt und Weichenrückmeldung können nicht gleichzeitig verwendet werden.
- Xpressnet (in der XP_Version (Atmega644P)): Als Stecksystem wird RJ12 (6-poliger Modularstecker) verwendet. Hier können Handregler wie z.B. die Roco Multimaus™ angeschlossen werden.
- Es sind drei S88-Ports vorgesehen, diese dürfen in Summe mit 1,5A auf den 5V belastet werden, wenn der bestückte 5V-Regler das auch kann (siehe hierzu auch die Hinweise zur Schaltung). Die s88-Ports sind wahlweise als übliche Stiftleiste oder als RJ45-Buchse (Anschluß gemäß der Norm S88-N) zu bestücken. Die Verkabelung mit den aus der Computertecknik bekannten Ethernetkabeln CAT-5 wird empfohlen, um die Störeinkopplungen auf den S88-Bus zu minimieren.
- Hinweis zur Verdrahtung: Der Gleisausgang wird
bezogen auf die Netzteilmasse von OpenDCC zwischen etwa
0,3V und 14,7V geschaltet (DCC wechselt ja Polarität)
und darf daher nicht mehr mit Masse verbunden
werden. Insbesondere Rückmelder können hier direkt oder
über den Umweg RS232/USB und PC eine ungewollte
Masseverbindung schaffen. In diesem Fall ist das
Potential zwischen der Endstufe in OpenDCC und dem
Rückmelder durch einen optogekoppelten Booster zu
trennen! (Diese Trennung braucht man aus VDE-Gründen
sowieso ..)
Näheres hierzu auf der Seite Anlagenverdrahtung.
- Es gibt zwei DCC-Ausgänge, Programmiergleis und
Hauptgleis. Der Hauptgleisausgang ist mit einer
intelligenten Datenverwaltung ausgerüstet, welche das
Optimum aus dem DCC-Protokoll herausholt.
- Bedienelemente und Anzeigen:
- LEDs:
Anzeige: •
LED1, orange
PROGin Normalbetrieb: aus: alles okay blinkend: zu viele Befehle, dem Host wird "not ready" gemeldet. in Programmierbetrieb: dauernd leuchtend: Programmierung erfolgreich. flackernd: ACK wird gerade gelesen blinkend: Programmierfehler •
LED2, rot
STOPdauern leuchtend: DCC wurde per Taster abgeschaltet. blinkend: Nothalt über den externen Eingang ausgelöst. Rot und grün gemeinsam: Fahrstufe 0 •
LED3, grün
GOdauern leuchtend: alles okay mit STOP im Wechsel blinkend: Fehler in der Ausgangsstufe, entweder Kurzschluß oder Übertemperatur. •
LED4, grün
RS232Diese LED zeigt den Zustand der Datenverbindung zu PC an:
langsam blinkend: keine Verbindung dauernd leuchtend: Verbindung vorhanden leuchtend, kurze Pausen: Datentransfer schnell blinkend: Datentransfer blockiert (Fifo voll) - Taster:
Taster Funktion STOP: Erster Druck: Das System wird angehalten, die Spannung an Gleis bleibt bestehen, es wird jedoch nur Fahrstufe 0 ausgegeben.
Zweiter Druck: Die Spannung am Gleis wird abgeschaltet (Nothalt)GO: Die Spannung am Gleis wird wieder eingeschaltet. - Über eine kleine Zusatzplatine sind externe Handregler (z.B. Roco multiMaus™) mit Xpressnet™-Anschluß anschließbar. Das PC Interface und das Xpressnet™-Interface laufen parallel und unabhängig voneinander.
- LEDs:
- Programmierschnittstelle:
- JTAG Port: Stecker X4, realisiert als übliche 10pol. Stiftleiste, RM 2.54 (ist nicht bestückt)
- Ponyprog Port: für das bei www.lancos.com ladbare Programmiertool ponyprog ist eine zweite RS232 auf der Platine vorgesehen.
- 6-polige ISP-Schnittstelle (JP3): Hier kann für die Erstinbetriebnahme der übliche Programmieradapter eingesteckt werden.
- Ein späterer Update der Software ist ohne Öffnen des Gerätes und ohne Programmieradapter entweder über RS232 oder USB möglich.
- Technische Basis:
-
OpenDCC ist auf einem Atmel AVR Prozessor programmiert. Es
gibt zwei Varianten, eine für den Atmega32 und eine für den
Atmega644P. Auch wenn kein Xpressnet verwendet werden soll,
so empfehle ich doch den größeren Prozessor, schon aus
Gründen der Zukunftssicherheit. Dieser ist zusammen mit
einem kleinen Booster (H-Brückenschaltung, basierend auf STM
L6206) und kleineren Peripherieschaltungen auf auf einer
Platine 120*100mm integriert. Das Layout ist zweiseitig mit
breiten Leiterbahnen und Durchsteckbauelemente erstellt, so
daß der Nachbau auch mit Hobbymitteln möglich sein sollte.
Die Software ist modular in C geschrieben (mit WinAVR) und als Open Source verfügbar. - Bisherige Erprobung und bekannte Mängel:
-
folgende Tests wurden bisher durchgeführt:
- HSI88-Mode: Betrieb mit Traincontroller 5.8 per RS232 und USB. Kontrolle der richtigen Bitpositionen, Kontrolle der Signale am S88-Bus
- HSI88-Mode: Betrieb mit Railware 5.01 und USB (Alex)
- Lenz-Mode: Baudratenumschaltung, Modeumschaltung
- Lenz-Mode: Betrieb mit Traincontroller und 28 Fahrstufen
- Lenz-Mode: Schaltbefehle
- Lenz-Mode: Betrieb mit P.F.u.Sch. und 28 Fahrstufen, Lichtfunktion
- Lenz-Mode: Decoder auslesen im CV-Betrieb mit P.F.u.Sch.
- Lenz-Mode: Test der S88 unter Railware (Alex)
- Lenz-Mode: Programmieren der Opendecoder (ab V0.14)
- Intellibox-Mode: Betrieb mit TC (mit RS232 und USB inkl. BABI) an einer mittleren Anlage (16 Booster, 320 Meldeabschnitte)
- Intellibox-Mode: Test der S88 unter Railware (Alex)
- Intellibox-Mode: Betrieb mit Railware und 28 Fahrstufen, Fahren, Schalten, Funktionen
- Intellibox-Mode: Schaltbefehle und Zusammenspiel mit OpenDecoder
- Intellibox-Mode: Programmieren mit TrainProgrammer von www.freiwald.com sowie mit railware (Alex)
- Intellibox-Mode: Betrieb mit srcpd und spdrs60 - Schalten, Fahren, Rückmeldung mit S88.
- Intellibox-Mode: Betrieb mit Rocrail (Open Source)
- DMX-Mode: Lichtansteuerung für Raumlicht
-
Einschränkungen und Mängel:
- Der Zustand von Weichen wird in OpenDCC nicht permanent gespeichert, bei der Initialisierung von PC-Programmen wird (z.Z.) immer "Stellung grün (=0)" zurückgeliefert. Während des Betriebes wird die Weichenposition aber gespeichert. Wenn sich ein PC Programm daran stören sollte, gibt es folgenden Workaround: Vor dem Steuern der Anlage mit dem PC einmal ALLE Weichen durchschalten.