DCC++ Base Station

Die Base Station von DCC++ von Gregg Berman ist im Wesentlichen ein Arduino Uno oder Mega plus ein Motor Shield für Gleichstrommotoren und ein oder zwei Jumper-Kabel - genial einfach!

Für meine Anlage habe ich mich entschieden, als Hirn der Base Station einen Arduino Mega2560 zu verwenden, nicht zuletzt, weil ich klassische Handsets zur Steuerung der Loks verwenden will und ich dazu einen zweiten seriellen Port an der Base Station benötige um die Informationen der Handsets über ein Interface in die Base Station einzukoppeln.

Doch zurück zur Base Station...

Beim Kauf des MotorShield sollte man darauf achten, dass der L298 Brückentreiber-IC die beiden Sense-Widerstände bereits eingebaut hat. Ist das nicht der Fall, kann die Base Station keine Rückmeldungen von den Decodern empfangen. An meinem MotorShield musste ich die beiden Widerstände nachrüsten.

Das von mir eingesetzte FunduMoto WCMCU_L298P Shield kam etwas krude zusammengeschustert hier an, aber z.B. die verdreht eingelöteten Drahtklemmen ließen sich unter Einwirkung von Wärme (Lötkolben) einfach richten. Von den auf dem Board sonst noch so montierten Gimmiks darf man sich nicht irritieren lassen, weder der Beeper noch die Anschlüsse für Bluetooth und sonstige Stecker und Buchsen werden benötigt und stören auch nicht.

FunduMoto WCMCU_L298P

Augenmerk muss aber auf den grünen Jumper oben in der Mitte neben dem 100µF Kondensator gerichtet werden. Dieser Jumper, wenn gesteckt, führt die Betriebsspannung für die Brückenendstufe zum Arduino, der daraus dann seine 5 V Betriebsspannung ableitet. Der gemeine Arduino Mega2560 hat allerdings einen Spannungsregler eingebaut, dem bei 12 V schon die Puste ausgeht.

Betreibt man sein Layout also beispielsweise mit 14 V, wie das bei TT, Maßstab 1:120, üblich ist, segnet der Regler recht schnell und unspektakulär das Zeitliche und gibt fürderhin die volle Spannung an den Rest des Arduino weiter. Müßig zu erwähnen, dass weder die CPU noch die anderen ICs damit umgehen können und solidarisch ebenfalls den Betrieb einstellen. Die CPU gibt immerhin einen Hinweis auf das Malheur, indem sie die Gehäusetemperatur um ein paar zig Grad anhebt -> Erkenntnisgewinn durch Brandblase bei Berührung.

Lesson learned: Der grüne Jumper muss entfernt werden!

Nachtrag:

Das von mir mit Sense-Widerständen nachgerüstete FunduMoto Shield hat mit den zuerst eingebauten 150 Milliohm Widerständen, wie sie bei anderen MotorShields eingesetzt werden, nicht funktioniert, es kamen keine Rückmeldungen vom Lokdekoder bei der Base Station an. Erst als ich den Widerstand auf 300 Milliohm verdoppelt habe, klappte das Auslesen von CVs aus dem Lokdekoder, einem schon älteren Uhlenbrock 73405 mit Firmwarestand V2.

Ich rüstete dann eine weitere Lok mit einem aktuellen Döhler & Haass Dekoder DH10C-3 aus, musste aber feststellen, dass von diesem Dekoder wiederum keine Rückmeldungen bei der Base Station ankommen.

Zwischenzeitlich hatte ich mir noch ein weiteres MotorShield besorgt, das die Sense-Widerstände bereits eingebaut hatte und habe das probehalber mal auf meinen Arduino Mega2560 aufgesteckt.

Deek-Robot MotorShield

Im Bild schön zu erkennen die beiden Sense-Widerstände ober- und unterhalb des linken Endes des L298P Brückentreibers. Auch bei diesem Board wird im Auslieferzustand die Layout-Spannung an den Arduino weitergeleitet, was es zu verhindern gilt. Dazu bitte auf der Unterseite der Platine die mit “VIN CONNECT” bezeichnete Trennstelle mit einem Skalpell auftrennen.

Dieses MotorShield benötigt aufgrund anderer Pinzuordnung ein zweites Patchkabel von Pin 10 zu Pin 3.

Erstaunlicher Weise sind die Rückmeldeimpulse mit diesem Shield deutlich höher, obwohl der Sense-Widerstand tatsächlich nur 150 Milliohm aufweist.

       ACK-Impulse mit Fundumoto Shield    ACK-Impulse mit Deek-Robot Shield
          (Click auf die Bilder für volle Auflösung)

Das linke Bild zeigt die Impulse beim FunduMoto Shield, sie erreichen 275 mVss, die Impulse im rechten Bild vom Deek-Robot Shield erreichen 1,2 Vss. Beide Messungen natürlich am gleichen Decoder  unter identischen Bedingungen.

Diese eklatanten Unterschiede sind für mich bisher ungeklärt, aber ich bleibe dran...

    Nachtrag
    Ok, Rätsel gelöst: Das Deek-Robot Shield verstärkt die beiden Sense-Signale über einen LM358, bevor sie an die Pins A0 und A1 weitergeleitet werden.

    Das schreit natürlich nach Korrektur des FunduMoto Shield...


Allerdings werden auch mit diesem Shield keine Rückmeldungen von den D&H Dekodern empfangen, so dass ich momentan davon ausgehen muss, dass die Dekoder (ich habe bisher zwei davon getestet) einfach keine Rückmeldungen ausgeben bzw. erzeugen...

    Ich habe dazu eine Anfrage bei D&H gestellt und zeitnah die Antwort erhalten, dass bereits mehrere Anwender von DCC++ die gleichen Probleme mit D&H Decodern hatten und dass die Lösung im DCC++ Forum zu finden ist.

    Sollte ich nicht fündig werden, bot man mir die Kontaktvermittlung zu einem Anwender an, der die im Forum vorgestellte Lösung erfolgreich angewandt habe.

    Nach kurzer Suche war klar, dass das erwähnte DCC++ Forum das Trainboard ist und dass die Ursache für mein Problem eine von Gregg Berman etwas frei ausgelegte Implementierung der NMRA Spezifikation im Service-Mode ist.
    ThomasP (Nickname im Trainboard) hat die Lösung erarbeitet wie hier beschrieben.
    Achtung, um den Link zu nutzen muss man beim Trainboard angemeldet sein.

Kurz zusammengefasst müssen in der Datei “PacketRegister.cpp” und im zugehörigen Header ein paar Aufrufe an resetPacket gegen writePacket-Aufrufe getauscht werden, genaue Beschreibung siehe Forum. Dort werden auch die bereits passend geänderten Dateien zum Download angeboten.

Vielen Dank an dieser Stelle an das Team von Döhler&Haass für den entscheidenden Tipp!

 


Besucher seit
25.11.2000

>