Auteur Sujet: Je me présente besoin Bus Can  (Lu 18816 fois)

claudius310

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Je me présente besoin Bus Can
« le: mars 11, 2020, 06:28:59 pm »
Bonjour,
J'utilise régulièrement pour diverses applications domotiques, instrumentations d'ULM sur de l'Arduino DUE.
Actuellement j'ai besoin de faire communiquer des Arduinos entre eux et les DUE possèdent des ports natifs ou il suffit de rajouter une carte WaveShare SN65HVD230 CAN Board que j'ai.
Je viens vers vous car je trouve vos articles pédagogiques (mise en œuvre bus CAN 1 et 2 mais malgré tout et une lecture attentive, très difficile pour moi d'intégrer la programmation pour de l'échange de données bidirectionnelles avec la bibliothèque DUE_CAN (comment seulement connaitre ses fonctions?).
Avez-vous des pistes pour me sortir de l'ornière car impossible de faire un simple test de dialogue avec 2 arduinos DUE?
Faut-il abandonner ce type de liaisons soit disant facile au profit d'une liaison série? peut-être plus facile à déployer?

Merci à tous
Cordialement
« Modifié: mars 11, 2020, 06:59:22 pm par claudius310 »

Tony04

  • Hero Member
  • *****
  • Messages: 569
    • Voir le profil
Re : Je me présente besoin Bus Can
« Réponse #1 le: mars 11, 2020, 08:19:27 pm »
Bonsoir Claudius,

as-tu lu le fil : http://forum.locoduino.org/index.php?topic=895.msg9633#msg9633

Il y a 2 exemples qui pourraient peut-être t'aider à te convaincre d'utiliser ce bus.

Cordialement
Antoine

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Je me présente besoin Bus Can
« Réponse #2 le: mars 11, 2020, 09:08:44 pm »
Bonsoir Claudius,

J'ai, comme toi un (plusieurs) Due équipé de cette carte driver de ligne Can qui constitue le cerveau de mon réseau? J'ai plusieurs autres cartes avec interface Can.
Lorsque la bibliothèque Due_can (pour le Due), de même que CAN_BUS_Shield (pour les autres Arduinos, excepté l'ESP32) est installée dans l'IDE, elle propose plus de 10 exemples que je t'encourage à tester pour te familiariser avec les fonctions CAN. Tu trouveras certainement de quoi faire les tests que tu souhaites, comme je l'ai fait au départ.

Si ça ne suffit pas je peux te proposer quelques uns de mes programmes.

Bon courage

Dominique

Cordialement,
Dominique

claudius310

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Je me présente besoin Bus Can
« Réponse #3 le: mars 16, 2020, 10:13:00 pm »
Bonsoir,

j'ai lu vos différents liens et réalisé de nombreux tests et voici mes conclusions
En ce qui concerne les cartes utilisées j'ai utilisé cette carte : https://copperhilltech.com/can-bus-mini-breakout-board/
et j'ai utilisé le programme qu'ils préconisaient : http://copperhilltech.com/blog/app-note-arduino-due-2channel-can-bus-driver-software/ mais aussi ceux qui sont dans la librairie "due_can-master" mais aucun résultat l'initialisation des CAN 0 et 1 sont OK mais pas de transmission on voit apparaître sur le moniteur les messages d'échec de transmission.

Je me suis donc orienté sur la partie électronique
Les transmissions se font du CAN 0 vers 1 et vice versa sur la même platine DUE du fait de la présence de deux CAN.
J'ai enlevé les deux résistances d'extrémité sur les platines CAN afin de les faire légèrement varier du fait que nous avons un bus CAN qui est sur du 3.3V, résultat négatif.
Le canal L et le canal H sont tous deux à 1.7V par rapport au GND.
Voir le schéma filaire du montage en PJ
Voir le schéma de la carte utilisée en PJ
J'ai placé chaque voie d'un oscilloscope sur le canal L et H et rien ne se passe sur le bus la tension reste en continue sur 1.7V
Avez-vous des idées?
Quelles cartes utilisez-vous pour les raccorder sur les CAN natif de cette carte?

Merci de votre aide et à bientôt



 

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Re : Je me présente besoin Bus Can
« Réponse #4 le: mars 17, 2020, 10:37:32 am »
Bonjour,

Bonsoir,

j'ai lu vos différents liens et réalisé de nombreux tests et voici mes conclusions
En ce qui concerne les cartes utilisées j'ai utilisé cette carte : https://copperhilltech.com/can-bus-mini-breakout-board/
et j'ai utilisé le programme qu'ils préconisaient : http://copperhilltech.com/blog/app-note-arduino-due-2channel-can-bus-driver-software/ mais aussi ceux qui sont dans la librairie "due_can-master" mais aucun résultat l'initialisation des CAN 0 et 1 sont OK mais pas de transmission on voit apparaître sur le moniteur les messages d'échec de transmission.
J'utilise la petite carte en photo ci-dessous équipée d'un sn65hvd230 (comme sur la votre), dont vous pouvez voir les branchements sur le Due.
(le Due est couplé à une carte graphique qui le cache sur cette photo).
C'est normal que l'initialisation du Can (0 ou 1) soit toujours OK (même si rien n'est branché) car le controleur est intégré au Due, seul le driver est extérieur et ne contribue pas au "OK".
Donc je pense que votre carte "copperhilltech" est mal branchée ou HS.

J'espère que vous allez faire marcher ce Can très bientôt
« Modifié: mars 17, 2020, 10:40:09 am par Dominique »
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3039
  • 100% Arduino et N
    • Voir le profil
Re : Je me présente besoin Bus Can
« Réponse #5 le: mars 17, 2020, 10:50:55 am »
Voici les lignes de code qui utilise le Can dans mon Due :


#include <due_can.h>
... puis dans le setup ...

  // Initialize CAN0. Set the proper baud rates here
  if (Can0.begin(CAN_BPS_500K)) {
    Serial.println("CAN ok !");
    myGLCD.print((char*)"CAN OK ", 100,410,0);
  } else {
    Serial.println("CAN ERROR !");
  }
 
  //By default there are 7 mailboxes that are RX boxes
  //This sets each mailbox to have a filter
 
  //extended
  //syntax is mailbox, ID, mask, extended
  Can0.setRXFilter(0, 0x2FFFFF, 0x1FFFFFFF, true);
  Can0.setRXFilter(1, 0x2F0000, 0x1FFFFFFF, true);
  Can0.setRXFilter(2, 0x2F0000, 0x1FFFFFFF, true);
 
  //standard 
  Can0.setRXFilter(3, 0x10, 0x7F0, false);
  Can0.setRXFilter(4, 0x11, 0x7F0, false);
  Can0.setRXFilter(5, 0x12, 0x7F0, false);
  Can0.setRXFilter(6, 0x1E, 0x7F0, false);


  for (int i=0; i<IdMax; i++) {    // pour le comptage des messages CAN
    CANCount[i]=0;
    ValId[i]=0;
  }

et dans la loop :
void loop() {
  Itineraire* it;
  int code=0;
  CAN_FRAME incoming;
  CAN_FRAME outgoing;
  /*
    * TRAITEMENT DES MESSAGES CAN
  */
 
  while (Can0.available() > 0) { 
    Can0.read(incoming);
    //countMessagesByIds(incoming);
    //printFrame(incoming);
    answerFrame(incoming);     
    // Can0.sendFrame(incoming) est envoyé par cette procédure qui est l'automate reseau
  }
 
Cordialement,
Dominique

claudius310

  • Newbie
  • *
  • Messages: 3
    • Voir le profil
Re : Je me présente besoin Bus Can
« Réponse #6 le: mars 17, 2020, 11:03:23 am »
Bonjour,

Merci de votre réponse
Je vais acheter deux nouvelles cartes comme la votre pour essayer à nouveau, mais le temps que cela vienne de chine....
ensuite je m'y remets
En tout état de cause je reviens vers vous dès que j'ai le matériel et fait quelques essais
je vais aussi essayer de nouvelles cartes de bus CAN avec des filtres qui diminuent les phénomènes d'hystérésis car j'avais mis l'oscilloscope directement sur la sortie de l'arduino et ce n'était pas très propre.

Encore merci