Auteur Sujet: Bus CAN avec DCC++  (Lu 3917 fois)

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Bus CAN avec DCC++
« le: mai 23, 2018, 05:01:37 pm »
Bonjour,
je me suis permis d'ouvrir un nouveau sujet car je n'ai rien trouvé sur le forum pour en discuter.

Comme je vous en ai parlé dans le sujet "Réduire câblage", je travaille actuellement avec mes 3 cartes (boucle, aiguille et signalisation) reliées par le merveilleux bus CAN en utilisant les routine de: http://www.locoduino.org/spip.php?article130.

Pour la création du signal DCC j'utilise un UNO avec le logiciel DCC++ de Gregg E. Berman si bien exliqué ici: http://www.locoduino.org/spip.php?article182
Ce logiciel reçoit ses commandes par la voie série alors que ce serait plus logique chez moi d'utiliser là aussi le bus CAN.

Mon but serait de parvenir à la structure de la "Figure 2 : Architecture de l’électronique en mode DCC" de l'article http://www.locoduino.org/spip.php?article132.

J'ai beau me plonger dans les méandres de "PacketRegister.cpp" et de "SerialCommand.cpp", je n'arrive pas à trouver le moyen d'interfacer ces fonctions avec la réception CAN.
Je vous joins le fichier de base que j'utilise pour la communication CAN.

On a tellement parlé du bus CAN sur Locoduino, ai-je loupé le sujet ou quelqu'un a-t-il déjà réalisé cette liaison ?

Merci par avance pour vos réponses.
Antoine

PS: Je vous avais également parlé de mes test de reconnaissance de loco par effet HALL; projet définitivement abandonné car trop de difficultés à positionner les aimants. Du coup je me suis moi aussi rabattu sur le RFID avec le module suivant qui fonctionne bien même avec plusieurs modules sur le circuit:
https://fr.aliexpress.com/item/RFID-Reader-Wireless-Module-UART-3Pin-125KHz-Card-Reading-EM4100-8CM-DC-5V-for-IC-Card/32831988522.html?spm=a2g0s.9042311.0.0.40696c37W3dFzp
« Modifié: mai 23, 2018, 05:07:29 pm par Tony04 »

msport

  • Hero Member
  • *****
  • Messages: 681
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #1 le: mai 23, 2018, 09:22:33 pm »
le module RFID suivant ... fonctionne bien ...
bonsoir,
des questions : à quelle distance et à quelle vitesse le tag est détecté ? Le tag est le rond, genre porte-clé ? Le module est placé sous la voie ?
merci d'avance.
Cordialement

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #2 le: mai 23, 2018, 09:35:43 pm »
Bonsoir msport,
j'utilise les tags suivants: https://fr.aliexpress.com/item/EM4100-125khz-rfid-keyfob-Proximity-ID-Token-Tag-Key-for-access-control-Arduino/32441862393.html?spm=a2g0s.9042311.0.0.56e46c37eyeXl3

mais je les ouvre et découpe autour de la bobine pour réduire l'encombrement puis je les met au plus bas de la loco (à la place du décodeur dans mon cas); le lecteur est quand à lui sous un panneau de MDF de 10mm pour les essais
Le tag est détecté à 40mm sans problème et à vitesse max de la loco.
Bonne soirée
Antoine

CATPLUS

  • Full Member
  • ***
  • Messages: 225
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #3 le: mai 23, 2018, 10:05:32 pm »
Bonsoir,

J'ai monté ce type de détection RFID
J'ai testé avec des tags en verre (puces pour les animaux "problème d'approvisionnement via Aliexpress") et  détecteurs comme mentionné par Tony, cela fonctionne mais il faut affiner

J'ai fait un petit programme sous Excel qui reconnais le numéro de wagons.

Je me suis inspiré de ce post:



Cordialement
Marcel
« Modifié: mai 24, 2018, 06:35:03 am par CATPLUS »
Best Regards

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #4 le: mai 24, 2018, 12:15:57 am »
Hello,
j'avance petit à petit avec ma commande de la carte UNO qui produit le DCC et qui doit être commandée par le bus CAN.

Exemple: Dans la version ci-jointe, j'ai récupéré les 7 octets de la commande "<t 1 3 30 1>" (je ne compte pas les espaces) dans Rbuf aux lignes 285 à 308.

Mes connaissances s'arrêtent là, je n'ai aucune idée comment je peux transmettre ces données à l'une des fonctions "SerialCommand::process()" ou  "SerialCommand::parse(char *com)" ou directement à l'une des 4 fonctions suivantes: "setThrottle()",  "setFunction()", "writeCVByte()", "readCV()" ce qui me semblerait plus judicieux. Je n'utilise rien d'autre.
La seule commande que j'ai pu passer c'est <0> ou <1> (c'était facile  :P).

Pour les quelques "CRACS" qui animent ce forum ce doit être un jeu d'enfant.

Un grand merci à qui me donne la solution.

Bonne soirée à tous
Antoine




bobyAndCo

  • Global Moderator
  • Sr. Member
  • *****
  • Messages: 362
  • HO avec DCC++
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #5 le: mai 24, 2018, 08:12:53 am »
Faute de temps, je n'ai pas pu regarder tes différents codes, mais si tu as réussi à envoyer <0> ou <1> à DCCpp le plus dur est fait. Dans la version originale de DCCpp ligne 205 du fichier DCCpp_uno.ino, tu as l'appel de la fonction :   SerialCommand::process();  au tout début du loop.

C'est cette fonction (dans le fichier SerialCommand) qui va faire le travail :

void SerialCommand::process(){
  char c;
   
  #if COMM_TYPE == 0

    while(INTERFACE.available()>0){    // while there is data on the serial line
     c=INTERFACE.read();
     if(c=='<')                    // start of new command
       sprintf(commandString,"");
     else if(c=='>')               // end of new command
       parse(commandString);                   
     else if(strlen(commandString)<MAX_COMMAND_LENGTH)    // if comandString still has space, append character just read from serial line
       sprintf(commandString,"%s%c",commandString,c);     // otherwise, character is ignored (but continue to look for '<' or '>')
    } // while
 
  #elif COMM_TYPE == 1

    EthernetClient client=INTERFACE.available();

    if(client){
      while(client.connected() && client.available()){        // while there is data on the network
      c=client.read();
      if(c=='<')                    // start of new command
        sprintf(commandString,"");
      else if(c=='>')               // end of new command
        parse(commandString);                   
      else if(strlen(commandString)<MAX_COMMAND_LENGTH)    // if comandString still has space, append character just read from network
        sprintf(commandString,"%s%c",commandString,c);     // otherwise, character is ignored (but continue to look for '<' or '>')
      } // while
    }

  #endif

} // SerialCommand:process

Ici, tu as les cas pour le port serie et pour une liaison en ethernet TCP. Il faut ajouter le cas de la réception en CAN et la fonction parse(commandString); va faire tout le reste du travail.

Comme tu fais la réception des messages CAN dans ton loop, tu peux essayer d'envoyer l'ensemble du message reçu comme paramètre à SerialCommand::process(tonMessageCan) du loop. Et modifier en consèquence SeriaCommand.cpp et SerialCommand.h

Bien sûr, dans le loop, tu n'auras plus à appeler SerialCommand::process() à chaque tour mais simplement quand tu as un nouveau message CAN
« Modifié: mai 24, 2018, 08:28:14 am par bobyAndCo »

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #6 le: mai 24, 2018, 01:10:05 pm »
Merci boby pour tes précisions qui malheureusement n'ont pas répondu immédiatement à mon problème.

J'avais bien compris comment et où étaient traités les commandes séries, mais je n'arrivais pas à passer mon message récupéré par CAN dans le loop vers les fonctions qui vont utiliser ces valeurs.

Mais il semblerait que ta réponse m'a boosté car je viens de trouver la solution.
En suivant tes conseils j'ai essayé toutes les possibilités imaginables et suis arrivé à l'instruction suivante "SerialCommand::parse(cmdChar);" ligne 327 dans le loop du pgm joint, où cmdChar est la chaine de char (remaniée à ma sauce, voir le String(char(Rbuf[1]))) qui contient les caractères reconnus par SerialCommand::parse. C'était tout bête au fond mais je maîtrise très mal "le monde des objets" pourtant si bien expliqué par Thierry dans http://www.locoduino.org/spip.php?article85.

En tous cas ça y est, toutes mes cartes sont reliées par le bus CAN et se parlent comme une belle petite famille  :D

Merci au forum et à ses acteurs pour les coups de pouce qu'ils nous donnent.

Très bonne journée à tous avec un peu de soleil de Sisteron  8)
Antoine

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #7 le: mai 24, 2018, 04:43:43 pm »
Aie, aie, aie,

en ce qui concerne les essais de détection RFID, je commence à me ranger du coté de Marcel et suis désolé de ma réponse trop rapide à msport.
En effet une fois sur le circuit ce n'est plus les mêmes résultats que sur mon rail d'essai, il a fallu que je déplace le tag qui était sous le moteur, que je rapproche le lecteur et en fin de compte je vais certainement placer les tags sur les cotés des locos au plus loin du moteur et mon lecteur dans un abri ou tunnel ou autre.
Comme a dit Marcel, "il faut affiner"...

à suivre donc

msport

  • Hero Member
  • *****
  • Messages: 681
  • HO avec DCC++ en DIY Réseaux très éphémères
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #8 le: mai 24, 2018, 10:14:19 pm »
Merci pour ces réponses somme toute encourageantes.
Peut-être qu'une antenne indépendante serait plus efficace ?
https://www.ebay.fr/itm/125K-EM4100-RFID-Card-Reader-Module-RDM6300-ID-RF-Module-UART-Output-For-Arduino/263106416572
Cordialement

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #9 le: mai 25, 2018, 12:10:26 am »
Il se trouve que j'ai aussi testé ce modèle qui est nettement moins sensible, achat inutile.
Je continue mes recherches et essais.

On se tient au courant
Antoine


Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1727
  • 100% Arduino et N
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #10 le: mai 25, 2018, 09:12:42 am »
Bien que le sujet soit sur le CAN, je signale que j'ai acheté ces 2 produits RFID :

https://www.ebay.fr/itm/5148-MFRC-522-RC522-RFID-Kits-S50-13-56-Mhz-6cm-for-arduino/142493271686

et

https://www.ebay.fr/itm/10-Clear-Midas-Tiny-NFC-Tags-Stickers-12mmx19mm-wafer-thin-NXP-NTAG213/271421280851

Et des test ont été faits dans mon club sur les réseaux N et HO : la carte électronique se glisse facilement sous les rails, même en N et les tags sont des étiquettes autocollantes assez petites pour se loger sous une loco N ou un wagon. Des essais en vitesse des trains ont montré que les détections sont fiables. Mais ça reste à confirmer quand même.

Il faut seulement éviter de coller l'étiquette sur une partie métallique.

Je publierai des résultats de tests un de ces jours ...

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #11 le: mai 25, 2018, 03:03:17 pm »
Bonjour Dominique (et tous les autres bien sûr  ;)),

j'avais déjà utilisé ce lecteur pour une autre application mais ne connaissais pas les stickers (que je viens de commander), je vous tiendrai au courant de mes expériences.

Mais revenons au bus CAN qui était le sujet premier de ce fil.

Ma question était: Est-ce que quelqu'un a déjà réalisé la structure de la "Figure 2 : Architecture de l’électronique en mode DCC" de l'article http://www.locoduino.org/spip.php?article132 ?

Comme je n'ai pas de réponse  :'(, je repose la question  (mais qu'une seule fois  ;D).

Bon début de WE à tous
Antoine

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1727
  • 100% Arduino et N
    • Voir le profil
Re : Re : Bus CAN avec DCC++
« Réponse #12 le: mai 25, 2018, 10:18:08 pm »
Est-ce que quelqu'un a déjà réalisé la structure de la "Figure 2 : Architecture de l’électronique en mode DCC" de l'article http://www.locoduino.org/spip.php?article132 ?

Comme je n'ai pas de réponse  :'(, je repose la question  (mais qu'une seule fois  ;D).

Bon début de WE à tous
Antoine

Bonsoir Antoine,

Ayant discuté récemment avec Denis (DD), je peux te dire qu’il n’ à pas encore réalisé lui-même cette architecture qui est inspirée par les différentes discussions entre nous : c’est son « best of » de cette époque  :D


Personnellement l’architecture de mon réseau perso est un peu différente (http://forum.locoduino.org/index.php?topic=290.msg3101#msg3101) autour du bus Can mais elle existe et fonctionne à merveille.


Là aussi c’était mon « best of » du moment et ça correspondait à la taille de mon réseau et au nombre d’équipements qui permettait de regrouper par fonctions et les réaliser par etape, plutôt que de distribuer comme sur le schéma de Denis.

J’ai préféré voir mes trains rouler rapidement et ajouter l’intelligence progressivement sans refaire ce qui était fait. L’architecture à Denis demande beaucoup plus d’efforts avant de voir rouler un train.

 Aujourd’hui je verrai l’architecture un peu différemment et je ferai plutôt un mix des deux architectures en distribuant des petites cartes capables de gérer plusieurs équipements de voie proches les uns des autres (aiguilles, capteurs de présence, signaux notamment) le long d’un bus Can sur lequel se trouve aussi la centrale, le gestionnaire, le TCO, etc..

Comme je l’ai déjà un peu dévoilé dans ce forum, il se trouve qu’avec mes amis de Locoduino nous développons une telle carte que nous décrirons quand elle sera au point et que nous montrerons à Orléans les 10 et 11 Novembre.

Ce n’est pas moi qui en a eu l’idée et qui l’a conçue, mais je participe à sa mise au point et je la trouve géniale.
 
Encore un peu de patience car je n’avance pas très vite  :P
Amicalement
Dominique
« Modifié: mai 25, 2018, 10:35:19 pm par Dominique »

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Bus CAN avec DCC++
« Réponse #13 le: mai 25, 2018, 10:59:44 pm »
Bonsoir Dominique,

si j'ai bien compris ta nouvelle vision de la structure est absolument identique ou du moins très très proche de celle qui m'a faite ouvrir le fil http://forum.locoduino.org/index.php?topic=501.msg5184#msg5184 et que j'ai réalisé avec mes 3 cartes présentées dans le fil. Comme tu peux le voir, chaque carte a plusieurs fonctions afin d'optimiser les sorties et de réduire le câblage.

Si oui, cela va me donner le courage de démarrer de façon plus concrète mon projet car pour l'instant je travaille avec quelques voies au sol mais surtout sur l'ordi pour le hardware et les logiciels qui vont avec.

Demain après-midi je prends contact avec le Rail Model Club de Manosque dans les Alpes de Haute Provence (à 35 km de chez moi) pour trouver peut-être des personnes qui ont comme moi cette envie de DIY.

Merci en tous cas pour ces sympathiques échanges.

Cordialement
Antoine
« Modifié: mai 25, 2018, 11:02:54 pm par Tony04 »

Tony04

  • Full Member
  • ***
  • Messages: 213
    • Voir le profil
Re : Re : Re : Bus CAN avec DCC++
« Réponse #14 le: mai 26, 2018, 06:49:35 am »

Comme je l’ai déjà un peu dévoilé dans ce forum, il se trouve qu’avec mes amis de Locoduino nous développons une telle carte que nous décrirons quand elle sera au point et que nous montrerons à Orléans les 10 et 11 Novembre.

Ce n’est pas moi qui en a eu l’idée et qui l’a conçue, mais je participe à sa mise au point et je la trouve géniale.
 
Encore un peu de patience car je n’avance pas très vite  :P
Amicalement
Dominique

Bonjour Dominique,

après avoir consulté le forum presque toute la journée hier pour tout lire (hé oui, je suis nouveau), j'ai passé une nuit quelque peut agitée et pleins de choses ce sont bousculées dans ma tête

j'ai passé 20 ans de ma vie professionnelle à développer des moutons à 5 pattes en électronique avec bien sûr aussi la conception du circuit imprimé qui va avec.
Ne pourrais-je pas vous faire profiter de mon expérience pour le développement de la carte citée ?

Voici la technologie que j'ai appliqué pour les miennes:
 - 1 led CMS de contrôle pour chaque entrée toujours opto-isolée et la led directement à l'entrée côté diode de l’optocoupleur (très utile en cas de défaillance d'un switch ou effet Hall, ainsi que dans la phase de développement).
 - 1 led CMS sur chaque sortie ainsi que sur les bobines des relais.
 - 1 entrée alimentation 5V pour le µP (sur bornier si possible débrochable).
 - 1 entrée alimentation 5V ou autre pour les optos coté diode ou les relais (sur le même bornier).
 - tous les circuits intégrés non CMS sur support.
 - bien sûr le µP (NANO ou MICRO) sur support.
 - 1 carte CAN sur support (2 sorties CAN sur bornier, mais à voir)
 - toutes les entrées/sorties sur connecteurs du style https://fr.rs-online.com/web/p/embases-de-circuit-imprime/2305060/ avec outil de sertissage fabriqué maison.
 - utilisation d'un plan de masse généralisé (non réalisé sur les protos du fil http://forum.locoduino.org/index.php?topic=501.15).

Tous ces choix dans 1 seul but la maintenance et la mise au point facile

Autre sujet pour ton TCO, as-tu pensé au MAX7219 en mode "sans décodage" qui permet d'adresser 64 leds en matrice donc très facile à câbler et qui remplace 8 de tes 74HC595.
Si non, regarde ici: http://tronixstuff.com/2013/10/11/tutorial-arduino-max7219-led-display-driver-ic/
ou ici: https://www.idreammicro.com/post/Controleurs-d-affichage-Maxim-MAX7219-MAX7221
C'est un composant hyper fiable que j'ai utilisé dans l'industrie du lavage auto pendant des années.

Je vais d'ailleurs le mettre dans le sujet "COMPOSANTS", tout le monde ne connait pas forcément ce circuit.
Je vais aussi chercher dans mes archives tous les composants qui pourraient être utiles dans LOCODUINO.

Dernière chose qui m'a turlupiné, la réalisation et le prix des circuits imprimés. J'ai fait réaliser les miens ici: https://jlcpcb.com/ pour un prix défiant toute concurrence, j'ai pourtant essayé les liens indiqués dans ce forum mais la différence est énorme.
La qualité est irréprochable, il suffit de voir la présentation de la société.
Mais attention! Ne pas opter pour une livraison par DHL à cause des frais facturés par ces derniers (on en a déjà parlé ailleurs sur ce forum), il faut choisir "Air mail".
Un exemple à tester pour trouver moins cher si quelqu'un veut essayer: le circuit double face (2 fichiers gerber ci-joint qu'il faut à nouveau réunir, ils était trop volumineux) qui fait quand même 195 x 277mm, prix pour 5 pièces..... 39,09€ les 5 (28$ le circuit et 16.29$ de port).
La aussi je vais le mettre dans le sujet "Bonnes affaires".

Voila ce qui me travaille la nuit en ce moment; d'ailleurs il ne faudra pas que cela dure trop longtemps si je ne veux pas me faire rappeler à l'ordre par ma charmante épouse  ::)

J'ai démarré ce message vers 5h30 ce matin, il est 6h40  :P, alors très bon WE à tous
Antoine

« Modifié: mai 26, 2018, 07:05:08 am par Tony04 »