Schnittstellenbeschreibung

Hier wird die Version 2 der Schnittstelle zwischen Steuerungsprogramm auf dem PC und den Arduino-Prozessoren beschrieben. Die Lok-Kommandos sind neu gestaltet worden. Es findet eine byte-weise bidirektionale Datenübertragung auf simulierten COM-Ports statt. Alle Kommandos werden vom Steuerungsprogramm gesendet. Einige Kommandos haben eine Antwort des Prozessors zu Folge.
Initial wird an jeden Prozessor SC_ID (Liste der Kommandos siehe unten) gesendet, um zu ermitteln, welcher Prozessor an welchem COM-Port angeschlossen ist.
Anschließend wird an Loks und Magnetartikel SC_GO gesendet. Damit wird die Anlage in Betrieb genommen und mit Strom versorgt. Zur Beendigung des Betriebs wird SC_STOP gesendet.

Loks

DCC- und MM2-Loksteuerung:

Kommando Adresse n Stufen Stufe Funktion Flags
SC_M2 1..255 14/27 0..14/27 F0/F1/F2/F3/F4 SF_FCHG|SF_DCHG|SF_FWD
SC_DCC 1..127 14/28 0..14/28 F0/F1/F2/F3/F4 SF_FCHG|SF_DCHG|SF_FWD

DCC-Programmierung:

Die CV-Nr. wird in 2 Bytes aufgespalten.
         union {
           short cv;
           char c[2];
         } u;
         u.cv = "Nummer der CV - 1";   // 0..1023
         u.c[1] &= 0x03;
Kommando CV High CV Low Data
SC_PRG_DCC u.c[1] u.c[0] 0..255
Abschließend SC_GO senden, 700 ms warten und dann SC_STOP senden.

MM2-Programmierung:

Kommando Register Value
SC_PRG_M2 1..8 0..255
Abschließend 7 s warten und dann SC_STOP senden.
SC_GO ist hier bereits im Programmier-Kommando enthalten.

Auslesen der Handregler

Es gibt die Ein-Byte-Kommandos SC_LOC_THROT und SC_LOC_THROT2. So sieht die Antwort aus:
o.k. Richtung Funktion Fahrstufe
0 RSPD_DIR_FWD/RSPD_DIR_BKWD 0/1 0..255
Das erste Byte ist immer 0.

Magnetartikel

Für Motorola-Dekoder sind die Adressen 1..256 gültig.
Für DCC-Dekoder sind die Adressen 1..510 gültig.
Die Adresse wird in 2 Bytes aufgespalten.
         union {
           short addr;
           char a[2];
         } u;
         u.addr = "Adresse";
Pos bezeichnet z.B. die Lage einer Weichenzunge: gerade oder rund.
Set=1 heißt Strom einschalten.
Kommando Adresse High Adresse Low Pos Set
SC_SOL_MM u.a[1] u.a[0] 0..1 0..1
SC_SOL_DCC u.a[1] u.a[0] 0..1 0..1

Rückmelder

Alle 110 ms darf eine Auslesung erfolgen. Der Host sendet das Ein-Byte-Kommando SC_CAPT. Es werden immer alle 3 Stränge mit je 20 Rückmeldemodulen ausgelesen, egal ob dort etwas angeschlossen ist oder nicht. 120 Bytes werden zurückgemeldet.
Die Reihenfolge ist:
Strang 1 Byte 1 - Strang 2 Byte 1 - Strang 3 Byte 1 - Strang 1 Byte 2 - Strang 2 Byte 2 usw.

Kommandos, Funktionen und Rückmeldungen

// ID's der Arduino-Boards ----------------------------------------
#define ID_LOCO              0x10    // Lokomotiven Ausgabe
#define ID_SOL               0x20    // Magnetartikel Ausgabe
#define ID_CAPT              0x40    // Rückmelder

// Kommando -------------------------------------------------------
#define SC_ID                0xc0    // Abfragekommando ID. Antwort: ID_LOCO|ID_SOL|ID_CAPT
#define SC_M2                0x01    // Motorola Fahrkommando
#define SC_DCC               0x02    // DCC Fahrkommando
#define SC_PRG_M2            0x04    // Motorola Programmierkommando
#define SC_PRG_DCC           0x08    // DCC Programmierkommando
#define SC_GO                0xa0    // Spannung einschalten
#define SC_STOP              0xe0    // Spannung abschalten
#define SC_LOC_THROT         0x8b    // Abfragekommando Handregler 1.
  // Antwort: 1) 0 2) RSPD_DIR_FWD|RSPD_DIR_BKWD|RSPD_DIR_NO 3) Function 4) Fahrstufe 0..255
#define SC_LOC_THROT2        0x8c    // Abfragekommando Handregler 2.
  // Antwort: 1) 0 2) RSPD_DIR_FWD|RSPD_DIR_BKWD|RSPD_DIR_NO 3) Function 4) Fahrstufe 0..255
#define SC_CAPT              0x80    // Abfragekommando Rückmelder. Antwort: 120 Bytes
#define SC_SOL_MM            0xf0    // Magnetartikelkommando Motorola
#define SC_SOL_DCC           0xd0    // Magnetartikelkommando DCC
#define SC_SOL_FDB           0xb0    // Magnetartikelkommando Feedback

// Fahrkommando Flags ---------------------------------------------
#define SF_FCHG              0x01    // Funktion geändert
#define SF_DCHG              0x02    // Richtung geändert
#define SF_FWD               0x04    // vorwärts

// Fahrkommando Funktionen ----------------------------------------
#define F0                   0x10
#define F1                   0x01
#define F2                   0x02
#define F3                   0x04
#define F4                   0x08

// Handregler Rückmeldung Fahrtrichtung ---------------------------
#define RSPD_DIR_FWD         0x20
#define RSPD_DIR_BKWD        0x10
#define RSPD_DIR_NO          0x00

Zurück Seitenanfang
Kontakt Impressum Nutzungsbedingungen Datenschutz