Table of Contents
RCAN: GC2a
Einführung
Die aktuelle CAN-GC*_Hardware-Serie basiert auf MC-PICs.
RCAN ist Firmware für CAN-basierte Lösungen auf der Arduino-Plattform.
Das Firmware-Ziel sind der Arduino Nano und Nano Every.
Abhängigkeiten
Modifikationen
Eine Modifikation im Bibliotheks-Quellcode ist DEBUG zu deaktivieren , um Speicher in der
''Documents/Arduino/libraries/mcp_canr/mcp_can_dfs.h'': (Zeile 41) zu sparen.\\
// if print debug information #ifndef DEBUG_MODE //#define DEBUG_MODE 1 #endif
Es ist sehr wichtig DEBUG_MODE zu deaktivieren, da anderenfalls nicht genügend Speicher verfügbar ist.
Die Arduino-IDE würde sich darüber beschweren und RCAN würde kontinuierlich neustarten.
GPIO-Baugruppe
Der Unterschied zwischen den Standard-PIC-basierten und Arduino-Baugruppen ist das FLAT-Adressierungsschema und dass nur lange Ereignisse unterstützt werden. (Lange/Kurze Ereignisse werden in Rocrail automatisch erkannt.)
Das GPIO ist mit dem CAN-GC2 kompatibel. (Mit Ausnahme des Adressierungsschemas.)
Nanos mit dem ATmega328P können Port A6 und A7 nicht als digitale I/O verwenden und sind nur als analoge Eingänge verfügbar (analoagRead). |
Nur-Eingangs-Stifte des Nano ATmega328P
Nano Stift | GC2a |
---|---|
A6 | 10 |
A7 | 9 |
Hinweis 1: Einen Nano Every verwenden, um GC2a-Port 9 und 10 auch als Ausgang nutzen zu können.
Hinweis 2: Für die beste Leistung sollte ein 16-MHz-Quarz verwendet werden.
Variable
Variablen-Nr. | Beschreibung |
---|---|
0 | SYNCID |
1 | Knoten-Konfigurations-Byte |
2…17 | Port-Konfigurations-Bytes |
18…19 | Port-Status-Bytes (Nur lesend) |
20 | CANID |
Knoten-Konfigurations-Byte
Bit | Wert | Funktion | Bemerkung |
---|---|---|---|
0 | 1 | Status speichern | Speichert Ausgangs-Status bei Ausschalten der Stromversorgung im EEPROM. |
1 | 1 | Kurze Ereignisse | Nicht verwendet. |
2,3 | 0,0 | 250ms Puls-Zeit | |
2,3 | 1,0 | 500ms Puls-Zeit | |
2,3 | 0,1 | 1000ms Puls-Zeit | |
2,3 | 1,1 | 2000ms Puls-Zeit | |
4 | 1 | Bei Betriebsbeginn (SoD) alle melden | Meldet auch Low-Eingangswerte anstelle nur High. |
Port-Konfigurations-Byte
Bit | Wert | Funktion | Bemerkung |
---|---|---|---|
0 | 1 | Eingang | Initialisiert den Port als Eingang mit internem Pullup-Widerstand. Die GC2a-Baugruppe bietet 10kΩ-Widerstands-Netzwerke, weil der interne Pullup-Wert zu hoch ist. |
0 | 0 | Ausgang | Initialisiert den Port als Ausgang. |
1 | 1 | Eingang-Aus-Verzögerung | Eingang mit 2 Sekunden Aus-Verzögerung für Belegt-Melder. |
1 | 1 | Ausgangs-Puls | Puls-Länge entsprechend der globalen Knoten-Konfiguration. |
2 | 1 | Invertieren | Invertiert den digitalen Port-Wert. |
4 | 1 | Sync | Synchronisiert den Ausgang auch mit der SYNCID |
CBUS
Das CBUS-Protokoll ist von Mike Bolton & Gil Fuchs urheberrechtlich geschützt.
CBUS→RCAN | Rocrail | Bereich | Bemerkung |
---|---|---|---|
Ereignis-Knoten-Nummer → CANID | Node-ID | 0…127 (standard 127) | CBUS verwendet die 4 MSBits für Priorität. (Die Standard-CAN-Rahmen-ID ist 11 Bit.) |
Ereignis-Adresse → Port | Addresse | 1…16 (fest) | Dies ist die Port-Nummer. |
Modul-Knoten-Nummer und Modul-CANID sind identisch und nur ein Wert in der Firmware.
Der CBUS-Lern-Modus wird nicht unterstützt und nicht benötigt.
Das gleiche FLAT-Adressierungsschema kann mit PIC-basierten Baugruppen verwendet werden, wenn die Ereignis-Knoten-Nummer auf die Modul-Knoten-Nummer und die Ereignis-Adresse auf die korrespondierende Port-Nummer eingestellt wird. Die Kurz-Ereignis-Option muss dann deaktiviert sein.
Falls geplant ist, die RCAN-basierten Module in einem existierenden CBUS-Netzwerk zu verwenden, wird empfohlen, die existierenden Module in das FLAT-Adressierungsschema zu konvertieren, um es transparent zu machen.
MBus
In Arbeit |
Unterstützung für Märklin-CAN-Protokoll.
- Eingänge werden als S88-Ereignisse gemeldet. (0x11)
- Ausgänge reagieren auf 0x0B mit MM 0x3nnn. DLC 8 wird als Bus/Adresse verwendet.
- Lese/Schreib-Konfiguration mit 0x07 und 0x08.
- Ping wird auch als Abfrage im CBus-Knoten-Dialog unterstützt.
Serieller Monitor
500000 BPS
Befehl | Beschreibung |
---|---|
usbon/usboff | Activate/deactivate the USB interface for GridConnect. (default deactivated) |
dump | Zeigt die ersten 64 EEPROM-Bytes |
sod | Betriebsbeginn (Start of Day) |
init | Neuinitialisierung aller I/O |
stat | Zeigt den I/O-Status |
pub | Veröffentlicht die Baugruppen-Identifikation und den Typ |
loop | Setzt Loopback-Modus (Schleife/Echo) für diese Sitzung. |
norm | Setzt den Normals-Modus. (standard) |
cbus | Schaltet ins CBUS-Protokoll. (125k) (standard) |
mbus | Schaltet ins Märklin-CS2-Protokoll. (250k) |
zbus | Schaltet ins Zimo-CAN-Protokoll. (125k) |
8m | Setzt MCP2515-Taktrate auf 8MHz. (standard) |
16m | Setzt MCP2515-Taktrate auf 16MHz. |
gpio | 16 Ports I/O |
servo | 4 Ports Servo und 12 Ports I/O |
=<id> | Setzt die CANID. <id> durch eine Zahl zwischen 1 und 255 ersetzen. |
$pppppppppppppppp | Mehrfach-Ports konfigurieren: Das <p> kann sein: 0 für Ausgang, 1 für Eingang, 2 für Eingang mit AUS-Verzögerung, 3 für Impuls-Ausgang. Beispiel: "$1111" konfiguriert Port 1 bis 4 als Eingang. |
#<port><config> | Konfiguriert einen Port. <port> durch ein Zeichen zwischen 0…9 und a…f ersetzen. <config> kann sein: 0 für Ausgang, 1 für Eingang, 2 für Eingang mit Aus-Verzögerung, 3 für Puls-Ausgang. Beispiel: "#a1" konfiguriert Port 10 als Eingang. |
:SxxxxNxx…xx; :XxxxxxxxxNxx…xx; | ASCII-Rahmen, der auf dem CAN-Bus gesendet und von der Baugruppe ausgewertet wird. ("GridConnect"-Schema wie von MERG CBUS verwendet.) Siehe Kapitel 10 des MERG "Developer’s Guide for CBUS". |
Im Seriellen Monitor sind auch der gesamte CAN-Verkehr und die unterstützten OPCs zu verfolgen.
Loopback Mode
(Schleife/Echo)
Der Original-Text findet sich im Microchip MCP2515-Handbuch in Abschnitt 10.4. |
Loopback mode will allow internal transmission of messages from the transmit buffers to the receive buffers without actually transmitting messages on the CAN bus.
This mode can be used in system development and testing.
In this mode, the ACK bit is ignored and the device will allow incoming messages from itself, just as if they were coming from another node.
The Loopback mode is a silent mode, meaning no messages will be trans- mitted while in this state (including error flags or Acknowledge signals). The TXCAN pin will be in a recessive state.
Übersetzung:
Der Loopback-Modus ermöglicht die interne Übertragung von Nachrichten von den Sendepuffern zu den Empfangspuffern, ohne dass tatsächlich Nachrichten auf dem CAN-Bus übertragen werden.
Dieser Modus kann bei der Systementwicklung und beim Testen verwendet werden.
In diesem Modus wird das ACK-Bit ignoriert und das Gerät lässt eingehende Nachrichten von sich selbst zu, so als ob sie von einem anderen Knoten kommen würden.
Der Loopback-Modus ist ein stiller Modus, d.h. in diesem Zustand werden keine Nachrichten übertragen (einschließlich Fehler-Kennzeichen oder Bestätigungssignale). Der TXCAN-Stift befindet sich in einem inaktiven Zustand.
Beispiel einer Monitor-Ausgabe-
MBus 0x3017 pinlayout=0 CAN bps=250, MCP2515 8MHz hash 0x0F27 :X00310F27N000030170300460C; :X00230F27N0017000800010000; :X00230F27N0017000900010000;
Einstellung
Der CBUS-IO meldet sich selbst als GC2a, Modul-Typ 12.
Die Firmware-Version wird nur mit der SocketCAN- und GC2a-Schnittstelle sichtbar.
Inkompatibilitäten
- SLiM wird nicht unterstützt
- FLiM wird nicht unterstützt
- Lern-Modus wird nicht unterstützt
- Das ‘Device Addressed’-Modell; Dies ist fest: NN → CANID, DN → Port 1…16
- Die Drucktaste fordert keine Knoten-Nummer durch OPC_RQNN an, wird aber selbst durch durch OPC_PNN veröffentlicht.
Nachteile
Mit der FLAT-Adressierung ist es nicht möglich, Ausgänge mit einem Befehl, NN+DN, auf mehreren Baugruppen (Knoten) zu aktivieren.
Diese Option ist nicht oder nur schwer verwendbar und macht die Einstellung von Baugruppen unnötig sehr komplex.
Tipp: Mit der SYNCID können die Ausgänge mit anderen IDs synchronisiert werden.
Drucktaste
Die Drucktatse auf dem Arduino behält ihre ursprüngliche Funktion bei: Neustart.
Nach jedem Neustart wird ein OPC_PNN gesendet, um das CBusNode-Dialogfeld in Rocview mit dem ausgewählten Knoten aufzurufen.
Diese Funktion kann verwendet werden, um einen Knoten zu identifizieren.
GC2a als USB-Schnittstelle
Der GC2a kann parallel als CBus-/MBus-Schnittstelle verwendet werden.
Sie verwendet den ASCII-Rahmen wie die CANGC1(e)-Schnittstelle. (Siehe Kapitel 10 des MERG "Developer’s Guide for CBUS".)
Erforderliche Schnittstellen-Einstellungen:
- USB
- 500000 BPS (Im Fall von Sub-Bibliothek = "USB" ist dies automatisch eingestellt.)
- Kein Hardware-Handshake (RTS/CTS)
- Linefeed
Mit dieser Option kann der GC2a auch alleinstehend betrieben werden (Standalone); das ist die minimale CBUS-Konfiguration.
Hinweis 1: Weil das ACK-Slot-Bit nicht durch andere CAN-Module gesetzt werden kann, wird ein Sende-Fehler gemeldet, der aber im Standalone-Modus ignoriert werden kann.
Hinweis 2: Für die beste Leistung sollte ein 16-MHz-Quarz verwendet werden.
SyncID
Die SyncID-Option wurde hinzugefügt, um Eingangs-Ereignisse von Baugruppe X mit Ausgangs-Status von Baugruppe Y zu synchronisieren.
Die Port-Zuordnung ist 1:1.
Es kann auch verwendet werden, um mehrere Ausgänge mit einem Rocrail-Befehl zu schalten.
Beispiel
Auf Baugruppe mit ID 33 wird ein Eingangs-Port auf EIN geschaltet.
Eine andere Baugruppe (z.B. ID 22) deren SyncID auf 33 eingestellt ist, prüft dann, ob der korrespondierende Port ein Ausgang ist und synchronisiert diesen mit dem Eingangs-Port von Baugruppe 33.
Diese Situation wird oft für Schalt-Tafeln verwendet.