Bonsoir @Julaye et @Sylv1,
Tout d’abord, oui les petits modules CAN NiRen dont je parle dans le post cité feront parfaitement l’affaire pour ce qui est du hard. Tous les branchements sont présentés dans ce post.
Je rappelle bien ce point une nouvelle fois, le CAN fonctionne sur un bus. Donc oui, tous les récepteurs CAN sont en série, on entre dans l’un puis on ressort pour aller dans l’autre. Si donc il y a une sortie CAN disponible sur le CAN Stellput, c’est sur celle-ci que l’on va se brancher. On pensera à activer la résistance de fin de bus de 120Ω car l’Arduino sera de ce fait le dernier à l’une des extrémités du bus.
Ce qui est dommage, c’est que les fonction CAN de commande d’aiguilles ne sont pas documentées dans le « Kommunikationsprotokoll » (protocole CAN publié par Marklin pour la CS2 souvent cité).
Je vais chercher sur les forums, il y a peut-être quelqu’un qui s’est amusé à décrypter les commandes. Sinon, ce n’est pas compliqué mais c’est sans doute un jeu de patience.
Il faut absolument avoir bien compris la structure d’une trame CAN Marklin pour réaliser cela sans difficulté. J’en parle dans ce post : Comprendre et utiliser le protocole CAN de Marklin - #15 par bobyAndCo
La prio, les 4 bits de poids fort dans l’identifiant ne sont pas importants ici.
Par contre, ce qui va nous permettre de savoir si l’on a affaire à une commande d’aiguille sera dans les 8 bits de poids fort suivants.
Le bit suivant (réponse) est aussi intéressant car le Stellput adressera ses commandes avec ce bit à 0 (c’est une commande) et la MS2 répondra avec le même identifiant de commande mais avec ce bit à 1 (c’est une réponse). Elle confirme la bonne réception de l’ordre.
Dans les 16 bits suivants sont contenus les identifiants des appareils qui envoient le message. En fonction du bit de réponse à 0 ou à 1 on déduira vite quel est l’ID de la MS2 et l’ID de CAN Stellput.
Enfin, les 4 derniers bits sont également importants car ils nous indiquent le nombre d’octets de datas qui sont envoyés avec le message. J’ai bien dit octets, c’est-à-dire des séries de 8 bits.
L’adresse de l’aiguille est probablement contenue dans les 4 premiers octets. Je pense que l’état de commutation demandé doit se trouver dans le 5° octets, 0 ou 1 pour dévié ou droit.
Mais ceci apparaitra progressivement en sniffant les trames CAN échangées entre le CAN Stellput et la MS2 et inversement.
Il suffira de commuter progressivement chaque aiguille sur le CAN Stellput. Pour les aiguilles qui se commandent par la MS2, ce sera le même principe, elles seront publiées sur le bus même si elles sont exécutées directement.
Il faudra utiliser les filtres de message CAN car, même si le système est au repos, il adresse néanmoins divers messages qui viennent poluer la recherche que l’on fait. On va donc demander à l’Arduino de les ignorer sur la base de leurs 8 bits de commande.
Quand on aura le message qui correspond à la commande de chaque aiguille avec l’octet de données qui signifie sa position, il sera facile de demander à l’Arduino d’allumer telle ou telle led.
Si cela vous convient, je vous proposerais un petit programme pour sniffer les trames et les afficher sur le moniteur série de l’Arduino. Ca avait beaucoup amusé @Jerome qui voyait cela comme un peu magique.
A+
Christophe