User Tools

Site Tools


arduino:rcan-de

Differences

This shows you the differences between two versions of the page.


arduino:rcan-de [2025/01/10 01:40] (current) – created - external edit 127.0.0.1
Line 1: Line 1:
 +====== RCAN: GC2a ======
 +{{:arduino:gc2a-module.jpg?0x240}}{{:cbus:can-extframe.jpeg?0x240}}\\
 + \\
 +=====Einführung=====
 +{{ :arduino:rcan.jpg?0x200}}
 +Die aktuelle __**[[:cbus:overview-de|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 __**[[https://store.arduino.cc/products/arduino-nano-every|Nano Every]]**__.\\
 +
 + \\
 +
 +=====Abhängigkeiten=====
 +{{:arduino:rcan:mcp_can.jpg?400}}\\
 +Die **mcp_can**-Bibliothek hinzufügen um die Kommunikation mit dem MCP2515-IC zu ermöglichen.\\
 +
 +====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.\\
 +<code cpp>
 +// if print debug information
 +#ifndef DEBUG_MODE
 +//#define DEBUG_MODE 1
 +#endif
 +</code>
 +__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.) \\
 +{{ :arduino:pin_arduino_nano.jpg?200}}{{ :arduino:nano-every-pinout.jpg?240}}
 +Das GPIO ist mit dem __**[[:can-gca2-de|CAN-GC2]]**__ kompatibel. (Mit Ausnahme des Adressierungsschemas.)\\
 +| Nanos mit dem ATmega328**P** __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 __**[[https://store.arduino.cc/products/arduino-nano-every|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 __**[[:can-gca2-de#einstellungen|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 ^
 +| ? | Versions-Information |
 +| 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 {{:cbus:cbus-developer-6b-draft3.pdf|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-====
 +<code>
 +MBus 0x3017
 +pinlayout=0
 +CAN bps=250, MCP2515 8MHz
 +hash 0x0F27
 +:X00310F27N000030170300460C;
 +:X00230F27N0017000800010000;
 +:X00230F27N0017000900010000;
 +</code>
 +
 + \\
 +
 +=====Einstellung=====
 +{{:arduino:gc2a.png?800}}\\
 +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|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 {{:cbus:cbus-developer-6b-draft3.pdf|MERG "Developer’s Guide for CBUS"}}.)\\
 +{{:arduino:gc2a-usb-en.png}}\\
 +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 [[https://de.wikipedia.org/wiki/Controller_Area_Network#ACK-Slot|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.\\
 +
 + \\
 +=====Quell-Code=====
 +  * https://gitlab.com/rocrail/Arduino/tree/master/RCAN
 +
 +=====HEX-Dateien=====
 +  * https://gitlab.com/rocrail/Arduino/-/tree/master/RCAN/build
 +
 +====Dokumentation====
 +===Schaltung und Platine===
 +  * https://gitlab.com/rocrail/Arduino/tree/master/RCAN/doc 
 +
 +