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 ====== | ||
+ | {{: | ||
+ | \\ | ||
+ | =====Einführung===== | ||
+ | {{ : | ||
+ | Die aktuelle __**[[: | ||
+ | RCAN ist Firmware für CAN-basierte Lösungen auf der Arduino-Plattform.\\ | ||
+ | Das Firmware-Ziel sind der Arduino Nano und __**[[https:// | ||
+ | |||
+ | \\ | ||
+ | |||
+ | =====Abhängigkeiten===== | ||
+ | {{: | ||
+ | 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 | ||
+ | '' | ||
+ | <code cpp> | ||
+ | // if print debug information | ||
+ | #ifndef DEBUG_MODE | ||
+ | //#define DEBUG_MODE 1 | ||
+ | #endif | ||
+ | </ | ||
+ | __Es ist sehr wichtig DEBUG_MODE zu deaktivieren, | ||
+ | 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/ | ||
+ | {{ : | ||
+ | Das GPIO ist mit dem __**[[: | ||
+ | | 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:// | ||
+ | **Hinweis 2:** //Für die beste Leistung sollte ein **16-MHz-Quarz** verwendet werden.//\\ | ||
+ | |||
+ | |||
+ | ====Variable==== | ||
+ | |< >| | ||
+ | ^ Variablen-Nr. | ||
+ | | 0 | SYNCID | | ||
+ | | 1 | Knoten-Konfigurations-Byte | | ||
+ | | 2...17 | ||
+ | | 18...19 | ||
+ | | 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, | ||
+ | | 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-> | ||
+ | | 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 __**[[: | ||
+ | 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, | ||
+ | |||
+ | \\ | ||
+ | ====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/ | ||
+ | * Ping wird auch als Abfrage im CBus-Knoten-Dialog unterstützt. | ||
+ | |||
+ | \\ | ||
+ | |||
+ | =====Serieller Monitor===== | ||
+ | 500000 BPS\\ | ||
+ | |< >| | ||
+ | ^ Befehl | ||
+ | | ? | Versions-Information | | ||
+ | | usbon/ | ||
+ | | 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/ | ||
+ | | 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: | ||
+ | | #< | ||
+ | | : | ||
+ | |||
+ | Im Seriellen Monitor sind auch der gesamte CAN-Verkehr und die unterstützten OPCs zu verfolgen.\\ | ||
+ | |||
+ | ====Loopback Mode==== | ||
+ | (Schleife/ | ||
+ | | //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.\\ | ||
+ | |||
+ | > // | ||
+ | > //Der Loopback-Modus ermöglicht die interne Übertragung von Nachrichten von den Sendepuffern zu den Empfangspuffern, | ||
+ | > //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 | ||
+ | : | ||
+ | : | ||
+ | : | ||
+ | </ | ||
+ | |||
+ | \\ | ||
+ | |||
+ | =====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; | ||
+ | * 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 **[[# | ||
+ | |||
+ | \\ | ||
+ | |||
+ | =====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-/ | ||
+ | Sie verwendet den ASCII-Rahmen wie die CANGC1(e)-Schnittstelle. (Siehe Kapitel 10 des {{: | ||
+ | {{: | ||
+ | Erforderliche Schnittstellen-Einstellungen: | ||
+ | * USB | ||
+ | * 500000 BPS (Im Fall von Sub-Bibliothek = " | ||
+ | * __Kein__ Hardware-Handshake (RTS/CTS) | ||
+ | * Linefeed | ||
+ | Mit dieser Option kann der GC2a auch alleinstehend betrieben werden (Standalone); | ||
+ | > Hinweis 1: Weil das [[https:// | ||
+ | > Hinweis 2: Für die beste Leistung sollte ein 16-MHz-Quarz verwendet werden. | ||
+ | |||
+ | =====SyncID===== | ||
+ | Die SyncID-Option wurde hinzugefügt, | ||
+ | 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:// | ||
+ | |||
+ | =====HEX-Dateien===== | ||
+ | * https:// | ||
+ | |||
+ | ====Dokumentation==== | ||
+ | ===Schaltung und Platine=== | ||
+ | * https:// | ||
+ | |||
+ | |||