Hallo,
Eure hilfreichen Kommentare und Infos haben mich angespornt, das Thema mal etwas näher zu untersuchen und das Ergebnis will ich hier kurz darstellen. Dazu habe ich natürlich noch ein paar Fragen, siehe weiter unten.
Hier die Kurz-Zusammenfassung, was ich gemacht habe:
- einen ATmega32 genommen, hatte ihn gerade noch auf einem alten selbst entworfenen Board rumliegen
- diesen dann via SPI I/F an ein CAN Modul von Joy-It mit einem MCP2515 angeschlossen. Dieses Board gibt's bei Reichelt: DEBO CAN Modul.
- die CAN-H und CAN-L Leitungen an die MS2 Gleisbox 601116 angeschlossen
- die S/W von Fabian Greif (MCP2515) und Joerg Pleumann (Railuino) auseinander gerissen
- konvertiert von C++ nach C, und das ganze Arduino Geraffel raus geworfen und auf Standard C konvertiert
- das Märklin CS2 CAN Protokoll, Version 2, unters Kopfkissen gelegt
-> und siehe da: es funktionierte sofort alles, d.h. ich kann alle gängigen Kommandos an die Gleisbox senden, die dann auch noch das Richtige tun, u.a.:
- Strom auf Gleis anlegen oder abschalten
- Gleisprotokoll ändern
- Lok Geschwindigkeit einstellen
- Vorwärts- Rückwärts-fahrt
- Funktionen ein/ausschalten
- CVs auslesen oder ändern
- Software Version und Gerätekennung der Gleisbox auslesen
Das ganze läuft unter dem Gleisprotokoll DCC einwandfrei.
Die Funktionen für Magnetartikel und Sonstiges habe ich nicht implementiert, da ich diese anderweitig schalten will.
Weiter unten habe ich das Listing angehängt, das mir die S/W ausgibt, d.h. welche CAN Message wurde an die Gleisbox gesendet und welche Message habe ich zurück bekommen.
Nun meine 3 Fragen an die Experten:
==============================
1) Wenn ich eine CAN Message mit Hash = 0x4B76 sende, bekomme ich als Antwort eine Message mit dem Hash = 0x2364 zurück. Ist das so richtig oder habe ich da was verbockt ?
2) Wenn ich z.B. die Message mit dem Kommando "Lok-Licht ausschalten" sende (siehe unten), sendet mir die Gleisbox als Antwort das Kommando 0x18 zurück, d.h. "Softwarestand Anfrage / Teilnehmer Ping". Was habe ich hier falsch gemacht ?
3) Die Software funktionert einwandfrei, aber nur dann, wenn ich neben meinem CAN Board auch die MS2 Bedienkonsole an die Gleisbox angeschlossen habe. Wenn ich diese nicht anschließe, gibt mir die Gleisbox keine Antwort zu einer gesendeten CAN Message zurück. Warum ist das so ? Liegt das etwa daran, dass ich bei der Initiierung nicht als erstes das Kommando 0x00 und Sub-Command 0x09 = "System MFX Neuanmeldezähler setzen" sende ?
Es wäre schön, wenn Ihr mir hier weiter helfen könnt !
Grüße Manni
P.S.: Bei Interesse stelle ich die hinreichend dokumentierte S/W im Source Code gerne zur Verfügung, da sie auf jedem Atmel AVR Controller laufen kann, ohne irgend welche dubiosen libraries.
Listing der gesendeten und empfangenen CAN Messages:
===============================================
ATmega32: Driving Mobile Station 2 Gleisbox, Jun 28 2022 15:32:52
The MCP2515 device runs in the Normal Mode !
All messages will be sent to the CAN bus.
CAN successfully initiated !
Starting demo program.
Using Locomotive DCC address = 3
----------------------------------------------
Put power onto the track.
Message placed to TX buffer 0
Sent Message:
- Command = 0x00
- Hash = 0x4B76
- Response = 0x00
- Length = 5
- Data = 0x00 0x00 0x00 0x00 0x01
Message received in RX buffer 0
Received Message:
- Command = 0x00
- Hash = 0x2364
- Response = 0x01
- Length = 5
- Data = 0x00 0x00 0x00 0x00 0x01
----------------------------------------------
Set Loco speed to 1000.
Message placed to TX buffer 0
Sent Message:
- Command = 0x04
- Hash = 0x4B76
- Response = 0x00
- Length = 6
- Data = 0x00 0x00 0xC0 0x03 0x03 0xE8
Message received in RX buffer 0
Received Message:
- Command = 0x04
- Hash = 0x2364
- Response = 0x01
- Length = 6
- Data = 0x00 0x00 0xC0 0x03 0x03 0xE8
----------------------------------------------
Get actual Loco speed:
Message placed to TX buffer 0
Sent Message:
- Command = 0x04
- Hash = 0x4B76
- Response = 0x00
- Length = 4
- Data = 0x00 0x00 0xC0 0x03
Message received in RX buffer 0
Received Message:
- Command = 0x04
- Hash = 0x2364
- Response = 0x01
- Length = 6
- Data = 0x00 0x00 0xC0 0x03 0x03 0xE8
- Actual speed of Loco is 1000
----------------------------------------------
Set Headlights ON.
Message placed to TX buffer 0
Sent Message:
- Command = 0x06
- Hash = 0x4B76
- Response = 0x00
- Length = 6
- Data = 0x00 0x00 0xC0 0x03 0x00 0x01
Message received in RX buffer 0
Received Message:
- Command = 0x06
- Hash = 0x2364
- Response = 0x01
- Length = 6
- Data = 0x00 0x00 0xC0 0x03 0x00 0x01
----------------------------------------------
Set Headlights OFF.
Message placed to TX buffer 0
Sent Message:
- Command = 0x06
- Hash = 0x4B76
- Response = 0x00
- Length = 6
- Data = 0x00 0x00 0xC0 0x03 0x00 0x00
Message received in RX buffer 0
Received Message:
- Command = 0x18
- Hash = 0x4B76
- Response = 0x00
- Length = 0
- Data =
----------------------------------------------
Cut power from the track.
Message placed to TX buffer 0
Sent Message:
- Command = 0x00
- Hash = 0x4B76
- Response = 0x00
- Length = 5
- Data = 0x00 0x00 0x00 0x00 0x00
Message received in RX buffer 0
Received Message:
- Command = 0x18
- Hash = 0x4B76
- Response = 0x00
- Length = 0
- Data =
----------------------------------------------
Successful end of demo program !