Arduino DCC++

InhaltZentralenDCC++



Eine komplette Open-Source-DCC-Zentrale
und Schnittstelle zum Betrieb von Modellbahnen
Controller

USB Cable

Base Station

Modell Railroad

Main Ops

Programming

15-20V DC Power Supply
Rocrail

USB-Kabel

Hardware-Zentrale

Modellbahn

Hauptgleis

Programmiergleis

15-20V-DC-Netzteil


Einführung

DCC++ ist eine auf dem Arduino UNO/MEGA und einem L298-Motor-Shield basierende Zentrale.

  • Die “DCC refresh stack”-Größe1) ist 12, auf einem MEGA bis zu 50, mit 127 Fahrstufen und 28 Funktionen.
  • PT, Programmier-Gleis
  • POM, Programmieren auf dem Hauptgleis. (Nur schreibend)
  • 32 mit GCA-Schnittstellen kompatible Ein-/Ausgänge.
  • DCC-Zubehördekoder-Unterstützung.
  • 2A-Booster-Gleisstrom.


DCC++ Konfiguration

uno.jpg motorshield.jpg


  1. Firmware installieren.
  2. Verdrahten des Motor-Shield: dccpp-motorshieldpinmappings.pdf


Eigenschaften

Durch die Rocrail-Implementation zusätzliche Eigenschaften:

  • Slot-Verwaltung mit passiver Slot-Freigabe nach 30 Sekunden Leerlauf und Geschwindigkeit Null. (Kann in den Einstellungen geändert werden.)
  • Abfrage aller Rückmelder zu Betriebsbeginn direkt nach dem Herstellen einer seriellen Verbindung.


Allgemeine Einstellung

Die DCC++-Bibliothek in Rocrail ist dccpp.

Sub-Bibliothek

Seriell-USB

Die Baudrate ist fest auf 115200.
Das Einzige, was eingestellt werden muss, ist der richtige serielle Port.

TCP/IP

Eine TCP/IP-Verbindung kann verwendet werden, wenn der Arduino über ein Ethernet-Shield verfügt.
Der TCP/IP-Port ist fest auf 2560 einzustellen.

Die Config.h-Quelle muss modifiziert und neu kompiliert werden, um das Ethernet-Shield zu verwenden:

/////////////////////////////////////////////////////////////////////////////////////
//
// DEFINE COMMUNICATIONS INTERFACE TYPE
//
//  0 = Built-in Serial Port
//  1 = Arduino Ethernet/SD Card Shield
 
#define COMM_TYPE   0

Beispiel für eine Verbindungsreaktion mit Ethernet:

20160315.083459.796 r9999I dccpprea ODCCPP   0772 evaluate message: <iDCC++ BASE STATION FOR ARDUINO MEGA / ARDUINO MOTOR SHIELD: BUILD Mar 15 2016 08:31:58>
20160315.083459.806 r9999I dccpprea ODCCPP   0772 evaluate message: <N1: 192.168.100.153>

Optionen

Zeitüberschreitung

Serielle Lese-Zeitüberschreitung in ms.

Slots

Die Anzahl der Slots2) ist standardmäßig 12. Wenn ein MEGA verwendet wird, kann sie in den DCC++-Quellen erhöht werden.
Die Anzahl der Slots muss kleiner oder gleich der eingestellten Anzahl der Register in den DCC++-Quellen sein.

DCC++-Kommentar:
You can increase the number of registers to greater than 12, especially if running on he Mega, (not sure what the max would be,but I'm guessing about 50)
Man kann die Anzahl der Register größer als 12 einstellen, speziell wenn es auf dem Mega läuft (bin nicht sicher, was das Maximum ist, aber ich vermute etwa 50)

Die Anzahl der Slots / Register, kann in der Config.h Zeile 24 geändert werden :

// DEFINE NUMBER OF MAIN TRACK REGISTER
 
#define MAX_MAIN_REGISTERS 12

Slot-Freigabe-Zeit

Die minimale Leerlaufzeit in Sekunden, bevor ein Slot freigemacht wird.

Rückmelder AUS-Verzögerung

Nur für Stift 22..53 auf dem MEGA.
Zeit in ms, die gewartet wird, bevor ein Eingang als Aus gemeldet wird. (Der Wert muss ein Mehrfaches von 10 sein.)
Der Verzögerungs-Zeitgeber wird zurück gesetzt, wenn ein Eingang innerhalb dieser Zeit aktiv wird.

System-Info

Fragt den Hauptgleis-Strom zur Anzeige in der Rocview-Status-Leiste ab.

Befehle zurücksenden

Sendet Weichenbefehle zurück.

Ausgänge tauschen

Tauscht die Gerade- und Abzweigend-Befehle.

Reduzierte Kennungen

Reduziert die erzeugten Weichen- und Ausgangs-Kennungen auf 16. (0…15) Standard ist 256.
Diese Option erlaubt die Verwendung eines Arduino Uno mit mehr als 45 auf DCC adressierten Geräten.

Schnittstellen-Prüfung beim Start

Einige Windows-Konfigurationen stürzen beim Start des Rocrail-Servers ab, wenn die folgende Option nicht aktiviert ist:


Ein-/Ausgang-Einstellungen


Hinzufügen

Fügt einen neuen Ein-/Ausgang hinzu, wie er mit Typ/Stift/Optionen definiert ist.
Er wird temporär in der DCC++-Zentrale angelegt.

Ändern

Ändert einen ausgewählten Ein-/Ausgang mit den Typ/Stift/Optionen-Einstellungen.
Er wird temporär in der DCC++-Zentrale geändert.

Löschen

Löscht den ausgewählten Ein-/Ausgang.
Er wird temporär aus der DCC++-Zentrale entfernt.

Abfrage

Abfrage aller Ein-/Ausgänge in der DCC++-Zentrale.

Speichern

Speichern aller Ein-/Ausgänge im EEPROM.

Löschen

Löscht alle Ein-/Ausgänge aus dem EEPROM.
Eine neue Abfrage erfolgt automatisch.

Optionen

Ausgang

Option Bit Wert
Umkehren 0 0 = Direkter Betrieb (ACTIVE=HIGH / INACTIVE=LOW)
1 = Umgekehrter Betrieb (ACTIVE=LOW / INACTIVE=HIGH)
Wiederherstellen 1 0 = Status des Stifts bei Spannung EIN entweder ACTIVE oder INACTIVE abhängig vom Status bei Spannung AUS; Status des Stifts bei erstem Einrichten
1 = Status des Stifts EIN, bei Spannung EIN oder wenn erstmalig eingerichtet, auf ACTIVE oder INACTIVE abhängig von Bit 2
Anfang 2 0 = Status des Stifts bei Spannung EIN oder bei erstem Einrichten auf INACTIVE
1 = Status des Stifts bei Spannung EIN oder bei erstem Einrichten auf ACTIVE

Rückmelder

Option Bit Wert
Pull-up 0 1 = Internen pull-up-Widerstand für den Stift verwenden
0 = Internen pull-up-Widerstand für den Stift nicht verwenden


Adressierung

Rückmelder und Ausgänge teilen den selben Adress-Raum; Überlappungen vermeiden, um unerwartetes Verhalten zu verhindern.

Weichen

Zubehör

Weichen werden nach dem MADA-Schema mit Dekoder-Adresse und Port adressiert.

Kein Zubehör

Befehl Ausgang
gerade Adresse + 0
abbiegen Adresse + 1

Kein Zubehör, Einzelausgang

Befehl Ausgang Stift-Status
gerade Adresse AUS
abbiegen Adresse EIN


Rückmelder

Freie Arduino-Stifte können als Rückmelder-Ports verwendet werden.

Ausgänge

Zubehör

Ausgänge sind nach dem NMRA-Schema mit Dekoder-Adresse und -Port adressiert.

Nicht Zubehör

Freie Arduino-Stifte können als Ausgangs-Ports verwendet werden.
Um die Ausgänge für DCC zuzuordnen, muss die Ausgangs-Option Weiche aktiviert sein.

Signale

Die Signal-Option Zubehör wird für Ausgangs-Befehle verwendet.

Begriffs-Nummer

Begriffs-Nummer und Begriffs-Wert können verwendet werden.
Der Begriffs-Wert stellt eine Bit-Maske dar, die für die vier Signal-Adressen verwendet wird.

G-ASH02

Ein-/Ausgangs-Schnittstelle für Arduino MEGA.
dccpp-hw.jpg

Typ

Typ-Code Funktion
N Nicht in Betrieb
O Output > Ausgang
I Input > Eingang

Optionen

Siehe: I/O-Optionen

I/O n

Die GCA-I/O-Anschluss-Auswahl.
Die Schaltflächen-Anordnung ist dem Platinen-Layout angenähert.


Stift-Zuordnung

MEGA-Stifte GCA-Anschluss GCA-Stifte
22..36 (gerade ) I/O 1 1..8
23..37 (ungerade) I/O 2 9..16
38..52 (gerade ) I/O 3 17..24
39..53 (ungerade) I/O 4 25..32


Die Ein-/Ausgangs-Anschlüsse passen für alle GCA-Baugruppen, wie GCA76, GCA77, GCA93, GC94, GCA173 usw.


Steckbrücke Funktion Bemerkung
JP1 Verwendet 5V vom Arduino, wenn gesteckt. Nur Stecken, wenn der Arduino spannungslos ist, anderenfalls setzt er sich selbst zurück.

Dateien

Programmier-Gleis

Die Gleisspannung muss eingeschaltet werden, bevor das Programmier-Gleis (PT) verwendet wird.
Nicht vergessen, die erforderliche Drahtbrücke auf dem Motor-Shield hinzuzufügen.


Installation der Firmware

  1. Installieren der Arduino-Software (IDE)
  2. Herunterladen der letzten DCC++ Base Station-Ausgabe und Entpacken der Quellen:
  3. Mit der Arduino-IDE die folgende Datei öffnen, die sich im Ordner DCCpp_Uno findet:
    • DCCpp_Uno.ino
  4. In der Arduino-IDE das verwendete Arduino-Ziel auswählen:
    • Werkzeuge → Board → “Arduino/Genuino Uno” oder “Arduino/Genuino Mega”
  5. Den USB-Port auswählen:
    • Werkzeuge → Port → COMx oder /dev/tty* oder /dev/cu*
  6. Die DCC++-Firmware in den Arduino schreiben:
    • Sketch → Hochladen

HEX-Datei

Fehler-Beseitigung

Lok stoppt bei max. Geschwindigkeit

Die Anzahl der Dekoder-Fahrstufen auf der Schnittstellen-Registerkarte der Lok-Eigenschaften anstelle von 128 auf 126 einstellen.

Ethernet-Compiler-Fehler

Wenn der folgende Compiler-Fehler auftritt:

In file included from /Users/rob/Projects/Arduino/BaseStation-1.2.1/DCCpp_Uno/DCCpp_Uno.ino:179:0:
sketch/Comm.h:11:28: fatal error: Ethernet.h: No such file or directory
   #include ETHERNET_LIBRARY
                            ^
compilation terminated.
exit status 1
Error compiling.

Zeile 11 in Comm.h ändern:
von

  #include ETHERNET_LIBRARY

in

  #include <Ethernet.h>


Windows-Absturz nach Rocrailstart

Einige Windows-Konfigurationen stürzen während des Rocrail-Server-Starts ab, wenn der Arduino über USB angeschlossen ist und die folgende Option nicht aktiviert ist:


Max. Strom

In Zeile 16 der Datei CurrentMonitor.h kann der max. Strom geändert werden:

#define  CURRENT_SAMPLE_MAX         300
lt.
Trainboard.com
math.
korrekt
Wert Max. Strom Wert
300 800 mA 270
600 1600 mA 540
750 2000 mA 675

Diese Werte gelten für den Arduino Motor Shield R3 mit 1,65 V / A Stromerfassung.
Die Stromerfassung anderer Motor-Shield-Typen kann davon abweichen, insbesondere, wenn deren max. Strom > 2 A ist.
Mehr Informationen finden sich in diesem engl. Forum: Trainboard.com www.trainboard.com_highball_data_attachments_171_171670-95fce61ebb745f799c8472bf81c9e6ad.jpg

:!: Wichtiger Hinweis: Es gibt Motor-Shields mit Treiber-IC LM298, die nicht in wärmeschlüssigem Kontakt zur Platine montiert sind.
Das Bild rechts zeigt, dass bei dieser Montage ggf. ein Papierstreifen unter dem IC durchgeschoben werden kann.
Die bei voller Belastung ( 2 A ) entstehende Wärme kann bei diesem Mangel nicht abgeführt werden und das IC wird unweigerlich zu heiß und zerstört.
Siehe: Trainboard.com


Links

1) , 2) Slots = Anzahl der Zeitschlitze

Personal Tools