OK Christophe,
Je vois cela demain.
Bonne soirée.
Alain
Bon, j’ai essayé de tout lire : ça y est, je saigne du nez
Vous êtes des fous furieux. J’adore.
Bonsoir Christophe,
Merci pour la réponse rapide et précise.
En fait ce type de potentiomètre à un point milieu mécanique qui correspond à la moitié de sa valeur ohmique, donc d’après ce que je comprend de ta réponse, ce sera réalisable en logiciel. Pas la peine de rajouter de l’électronique en plus.
Merci beaucoup, je te tiens au courant de la suite de mes investigations.
Bonne soirée, Rémy.
Bonjour Christophe,
Pour ce qui est du Shield, on oublie pour le moment.
Voici un cliché de deux systèmes fonctionnels basés sur le module CAN de chez JOY-IT, car j’en avait acheté deux :
Au bout d’une dizaine de minutes :
Donc on pourrait peut-être les raccorder avec deux fils CAN-L et CAN-H, et mettre un code Emetteur d’un côté et un code Récepteur de l’autre ?
Bonne journée.
Très cordialement.
Alain
Bonjour Alain,
Bon je vois qu’avec méthode tu arrives à des choses intéressantes.
Oui l’étape suivant est de mettre en relation les deux Arduino au travers de leurs deux drivers CAN.
Il faut effectivement relier les bornes CAN-L entre elles ainsi que les bornes CAN-H entre elles. Je sais que tu connais ce principe mais je le dis pour les autres, il n’y a pas de croisement de câbles en CAN comme en communication série par exemple ou le TX de l’un est relié au RX de l’autre. En CAN, le L dans le L le H dans H.
Si l’on relie plusieurs drivers CAN, on le fait sous forme de bus, jamais en étoile comme avec de l’Ethernet par exemple.
Enfin, on s’assure que l’on ai bien une terminaison de 120Ω sur le premeir et le dernier appareil du bus, même s’il n’y en a que deux.
Sur les shields, en général il y a un commutateur pour activer le 120Ω. Sur les petits modèles comme le NiRen, on ajoute un cavalier.
Pour donc vérifier la communication de tes deux cartes entre elles, il te suffit de commenter la ligne
//settings.mRequestedMode = ACAN2515Settings::LoopBackMode ; // Select loopback mode
Dernière recommandation, toujours s’assurer que les drivers sont programmés à la même vitesse, par exemple ici à 250 Kbps, vitesse du CAN de Marklin.
ACAN2515Settings settings(QUARTZ_FREQUENCY, 250UL * 1000UL); // CAN bit rate 250 kb/s
Christophe
Oui, pour l’adaptation d’impédance, j’ai juste à déplacer le cavaler P1 sur les deux modules.
C’est la ligne 67 qui est à commenter.
Je fais cela tout à l’heure.
Alain
Pour le branchement entre les modules CAN, la norme prévoit quand-même que tous les modules soient à la même masse.
Donc quand c’est deux Arduino branchés sur le même ordi c’est bon, mais sinon il serait bien de raccorder les masse ensemble.
Avec des alimentations vraiment flottantes (piles, transfo classique), les résistances de polarisation du bus font le travail, mais suivant le type d’alimentation (pour les convertisseurs) cela peut perturber la communication (perte de paquets). Les alim 60061, 60041 et 60101 rentrent, à mon estimation, dans cette catégorie.
Sylvain
Bonjour Sylvain,
Pour le moment j’utilise deux ports USB du même ordi. pour alimenter et monitorer les deux arduino.
Merci du renseignement.
Alain
Merci Sylvain d’apporter cette précision.
Ce qui va sans dire va mieux en le disant. Ceci doit être la règle sur un réseau de trains miniature où tous les équipements doivent partager les mêmes masses.
Précision qui me permet de voir que je n’ai pas respecté ce principe quand le module CAN est relié à la Gleisbox. Il faut donc ajouter une liaison de masse à partir de la pin 2 de la Gleisbox avec le module CAN ou l’Arduino.
Christophe
Bon Alors,
Les résultats sont les suivants; avec le montage ci-dessous :
J’ai dévalidé la résistance de 120 Ohms, car à priori cela marche mieux.
On obtient la capture suivante :
J’ai “Francisé” un peu un des deux programmes pour les distinguer.
Et au bout d’un certain temps :
Donc cela me semble correct.
Bonne après-midi.
Alain
Oui c’est tout bon.
Maintenant, tu peux relier l’un des driver CAN + Arduino avec le même programme à la Gleisbox CAN-H dans pin 8, CAN-L dans pin 4 et GND (Arduino) dans pin 2.
Tu vas constater que l’Aruino envoie mais aussi que la Gleisbox répond.
Je n’ai malheureusement pas beaucoup de temps pour t’écrire des programmes de test mais tu peux essayer d’afficher les réponses de la Gleisbox avec des Serial.print()
Exemple
Serial.println(frame.id) qui doit afficher les 29 bits de l’identifiant du message retournés par la Gleisbox (en décimal)
Pour un affichage binaire Serial.println(frame.id, BIN)
Pour un affichage HEX
Serial.print(“0x”);
Serial.println(frame.id, HEX)
Ensuite avec un peu de manipulation de bits, tu peux décomposer ce qu’il y a dans l’identifiant
Serial.println(frame.id & 0xFFFF); le hash de la Gleisbox (son ID)
Serial.println((frame.id & 1FE0000) >> 17); la commande contenue dans l’identifiant.
De la même manière, Serial.println(frame.data[0]); Serial.println(frame.data[1]); Serial.println(frame.data[2]); …Serial.println(frame.data[8]); te permettent de lire le contenu des datas envoyées.
Si tu croises avec le document
cs2can-protokoll-2_0 fr.pdf (982,0 Ko)
tu vas pouvoir comprendre les informations échangées. Tu verras, c’est vraiment passionnant.
Christophe
Merci Christophe pour tes encouragements.
Je vais étudier cela.
On pourrait presque écrire un “Wireshark” spécialisé.
Alain
Je suis en train de préparer quelque chose sur le forum
Super Christophe et Alain.
J’avoue que je voulais réaliser ce montage qui me paraissait assez simple, mais la, mes neurones commencent à décrocher.
Mais je ne lâche rien…
Phil,
Ne t’inquiètes pas trop. une fois que nous aurons précisé les branchements et les réglages cela sera plus simple.
Dans la démarche du DIY, il y a toujours un peu de souffrance mais c’est aussi plaisant quand on a fini par vaincre le problème et que la réussite nous appartient, non ?
Christophe
Tout a fait d’accord avec toi Christophe. Peut importe la complexité de ce que l’on réalise. Y arriver est une grande satisfaction pour soi. Et quand, comme là, on la réalise à deux, on rajoute une satisfaction mutualisée avec un passionné.
Bravo à tous les 2, malheureusement, je ne connais pas suffisamment le schmilblick pour participer avec vous au développement. Snifff
Phil,
Bonjour Philippe,
C’est vrai qu’ au début de chaque chose on est surtout observateur, puis vient le moment où on franchi un premier pas …
… qui s’opère sans trop de mal si on est accompagné.
Alain
P.S. J’ai reçu mes potentiomètres rectilignes hier; donc cela suit son cours …
Bonjour Christophe,
Est-ce que cette ligne de code correspond aux interrupteurs/inverseurs ? et si “OUI”, comment sont-ils câblés?
byte t_dirPin[NB_LOCO] = { 3, 4, 5, 6, 7, 8 };
Je n’ai pas beaucoup avancé cette semaine, mais je suis en train d’étudier ton Code d’origine pour la table.
Bonne journée.
Alain
Oui tout à fait
Ils sont câbles 1er inter pin 3, 2 inter pin 4 etc…
OK, mais il y a trois fils par inter; le fil du milieu sur l’Arduino; mais les deux autres ?