User Tools

Site Tools


Action disabled: index
arduino:rcan-de

RCAN: GC2a

gc2a-module.jpgcan-extframe.jpeg

Einführung

rcan.jpg 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

mcp_can.jpg
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.\\
// 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.)
pin_arduino_nano.jpgnano-every-pinout.jpg 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.


Quell-Code

Dokumentation

Schaltung und Platine

arduino/rcan-de.txt · Last modified: 2024/03/14 00:30 by rainerk