This is an old revision of the document!
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 ist der Arduino Nano ATmega328P(B).
Abhängigkeiten
Die einzige verwendete Nicht-Standard-Arduino-Bibliothek ist
die die Kommunikation mit dem MCP2515-IC ermöglicht.
Modifikationen
Zwei Modifikationen im Bibliotheks-Quellcode sind DEBUG zu deaktivieren und erhöhen des Timeout-Wertes in der mcp_can_dfs.h: (Zeilen 40 und 45)
// if print debug information //#define DEBUG_MODE 1 /* * Begin mt */ #define TIMEOUTVALUE 100
Der Original-Wert TIMEOUTVALUE von 50 ist zu gering und bringt Fehler beim Senden von Rahmen in einem CAN-Bus. (Abhängig davon, wieviel Verkehr auf dem CAN-Bus ist.)
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 ATmega328P
Nano Stift | GC2a | ArduCAN-IO |
---|---|---|
A6 | 10 | 2 |
A7 | 9 | 1 |
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. |
3 | 1 | IR-Port | Nicht verwendet. |
4 | 1 | Sync | Synchronisiert den Ausgang auch mit der SYNCID |
CBus
CBUS→RCAN | Rocrail | Bereich | Bemerkung |
---|---|---|---|
Ereignis-Knoten-Nummer → CANID | Bus | 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.
ZBus
In Arbeit |
Unterstützung für Zimo-CAN-Protokoll. (Z21)
Rahmen
Ext. CAN-Rahmen | |||||||||
ID | F | DLC | 8 Data | ||||||
---|---|---|---|---|---|---|---|---|---|
F | GRP | CMD | MODE | SID | CF | DLC | RID | DATA | ZCAN-Verwendung |
1 | 4 | 6 | 2 | 16 | 4 | 4 | 16 | 48 | Anzahl der Bits |
- F = ZCAN Flag (Kennzeichen)
- GRP = Group (Gruppe)
- CMD = Command (Befehl)
- MODE = request, command, event or ack (Abfrage, Befehl, Ereignis oder Bestätigung)
- SID = Sender ID (Sender-Kennung; Muss eindeutig sein, um Kollisionen lösen zu können)
- CF = CAN Flags (Kennzeichen)
- DLC = Data-Length-Code (Anzahl der Daten-Bytes)
- RID = Recipient ID (Empfänger-Kennung)
- DATA = Optionale Daten
Serieller Monitor
500000 BPS
Befehl | Beschreibung |
---|---|
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). |
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. |
l0 | Setzt das Stift-Schema passend zum CANGC2a. (standard) → Reset-Taste drücken, um Änderungen zu aktivieren. |
l1 | Setzt das Stift-Schema passend zum ArduCAN-I/O. → Reset-Taste drücken, um Änderungen zu aktivieren. |
=<id> | Setzt die CANID. <id> durch eine Zahl zwischen 1 und 127 ersetzen. |
#<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; | 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 ist auch der gesamte CAN-Verkehr und unterstützte 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-
GPIO board MBus 0x3017 __AVR_ATmega328P__ pinlayout=0 port 00(02) set INPUT_PULLUP port 01(03) set INPUT_PULLUP port 02(04) set INPUT_PULLUP port 03(05) set INPUT_PULLUP port 04(06) set OUTPUT port 05(07) set OUTPUT port 06(08) set OUTPUT port 07(09) set OUTPUT port 08(15) set INPUT_PULLUP port 09(14) set INPUT_PULLUP port 10(13) set INPUT_PULLUP port 11(12) set INPUT_PULLUP port 12(11) set INPUT_PULLUP port 13(10) set INPUT_PULLUP port 14(0F) set INPUT_PULLUP port 15(0E) set INPUT_PULLUP CAN bps=250, MCP2515 8MHz :X00310327N000030170300460C; change of port 12 0->1 conf=1 timer=0 :X00230327N0017000C00010000
Einstellung
Der CBUS-IO meldet sich selbst als GC2a, Modul-Typ 12.
Die Firmware-Version wird nur mit der SocketCAN- und GC2a-Schnittstelle sichtbar.
CBUS-Protokoll
Das CBUS-Protokoll schreibt die Anzahl der Datenbytes für alle OPC-Bereiche vor.
Dies ist für CAN nicht sinnvoll, da das DLC-Feld für die Anzahl der Datenbytes verantwortlich ist, die in einer Nachricht verwendet werden.
Das CBUS-Protokoll scheint das LocoNet-Schema widerzuspiegeln …
Die OPC_PNN, eine Antwort auf eine Anfrage Module OPC_QNN, wird die DLC nicht auf 6, sondern auf 8 setzen. Die letzten zwei Bytes enthalten die Firmware-Version.
Offiziell liegt der OPC_PNN im Bereich von 6 Datenbytes.
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: 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.
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.
Quell-Code
- https://github.com/coryjfowler/MCP_CAN_lib (Original mit zu kleinem Timeout-Wert und aktiviertem DEBUG.)