Auteur Sujet: Carte Servomoteurs DCC + CAN  (Lu 193275 fois)

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3011
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #150 le: avril 21, 2016, 11:36:47 pm »
Il y a quand même un truc qui ne va pas : les cartes émettent bien des messages CAN puisque que je les reçois bien sur mon moniteur CAN.

Par contre, elles ne voient pas les messages reçus, sous interruption ou pas.

J'ai bricolé un test qui émet et reçoit avec des Id aléatoires pour permettre de charger le même code sur 2 cartes connectées par le bus CAN.
J'ai adapté l'initialisation de l'interruption à la méthode recommandée du moment. L'interruption est bien sur la pin 3.

Il manque l'initialisation des filtres, mais ça ne devrait rien filtrer.

// Demo: CAN-BUS Shield, send data & receive data with interrupt mode
// Dominique 21/04/2016
// TEST des cartes 8 servos conçues et réalisées par Jean-Luc Bechennec

#include <SPI.h>
#include "mcp_can.h"

// La pin CS du 2515 sur la carte 8 servos est 10
const int SPI_CS_PIN = 10;
// L'IT_CAN est sur D3
const byte interruptPin = 3;

MCP_CAN CAN(SPI_CS_PIN);                                    // Set CS pin


unsigned char flagRecv = 0;
unsigned char len = 0;
unsigned char buf[8];
char str[20];

unsigned char stmp[8] = {0, 0, 0, 0, 0, 0, 0, 0};
unsigned long _Seconde;
int Id;

void setup()
{
    Serial.begin(115200);

START_INIT:

    if(CAN_OK == CAN.begin(CAN_500KBPS))                   // init can bus : baudrate = 500k
    {
        Serial.println("CAN BUS Shield init ok!");
    }
    else
    {
        Serial.println("CAN BUS Shield init fail");
        Serial.println("Init CAN BUS Shield again");
        delay(500);
        goto START_INIT;
    }
    pinMode(interruptPin, INPUT_PULLUP);
    attachInterrupt(digitalPinToInterrupt(interruptPin), MCP2515_ISR, FALLING); // start interrupt
    _Seconde = millis();                      // start tache emission periodique
    randomSeed(analogRead(A6));
    Id = random(10,200);                      // pour éviter d'avoir la même adresse des 2 cotés
}

void MCP2515_ISR()
{
    flagRecv = 1;
}

void loop()
{
  if(flagRecv) {                    // check if get data
    flagRecv = 0;                   // clear flag
    // iterate over all pending messages
    // If either the bus is saturated or the MCU is busy,
    // both RX buffers may be in use and reading a single
    // message does not clear the IRQ conditon.
    while (CAN_MSGAVAIL == CAN.checkReceive()) {
      // read data,  len: data length, buf: data buf
      CAN.readMsgBuf(&len, buf);
      unsigned char canId = CAN.getCanId();
      // print the data
      Serial.print(canId);Serial.print("\t");
      for(int i = 0; i<len; i++) {
        Serial.print(buf[i]);Serial.print("\t");
      }
      Serial.println();
    } // while
  } // if(flagRecv)
 
  if (_Seconde + 1000 < millis()) {
    _Seconde = millis();
    CAN.sendMsgBuf(Id,0, 8, stmp);
    Serial.println("envoi message");
    stmp[0]++;
    if (stmp[0]==0) {
      stmp[1]++;
      if (stmp[1]==0) {
        stmp[2]++;
        if (stmp[2]==0) {
          stmp[3]++;
          if (stmp[3]==0) {
            stmp[4]++;
            if (stmp[4]==0) {
              stmp[5]++;
              if (stmp[5]==0) {
                stmp[6]++;
                if (stmp[6]==0) {
                  stmp[7]++;
                }
              }
            }
          }
        }
      }
    }
  }   
}

Je n'ai pas réussi à recevoir les messages qui sont pourtant bien émis.

Il est tard, je verrai ça demain soir.
Cordialement,
Dominique

bern69

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #151 le: avril 22, 2016, 04:43:15 pm »
en tant que néophyte ignare , je suis attentivement les questions posées par le fonctionnement de la carte, sans pouvoir y ajouter qq avis que ce soit.
Par contre je reviens 30sec sur les prises RJ 10et 11 du bus CAN. J'ai trouvé ça sur le Net et ça ne semble pas correspondre au câblage utilisé pour les cartes CAN et Servo de Jean Luc
Merci de votre avis.

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3011
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #152 le: avril 22, 2016, 09:35:23 pm »
J'ai regardé ta référence sur les standards télécom : ils me semblent américains, en France on a peut-être un standard différent.

Jean-Luc a assigné CANH aux fils du centre 2 et 3 et CANL au fils extérieurs 1 et 4. Il n'y a pas de possibilité d'alimentation type PoCan (Power over Can).

Si tu utilises un bête fil de téléphone, ça doit marcher. Pourquoi faire compliqué ?
« Modifié: avril 22, 2016, 11:14:01 pm par Dominique »
Cordialement,
Dominique

bern69

  • Newbie
  • *
  • Messages: 33
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #153 le: avril 22, 2016, 11:59:01 pm »
Tu as raison.
De toute façon 4brins 4contacts. Selon le câblage des prises femelles... Mais mon attention avait été attirée  par le PoCan. Pourquoi faire simple... ;D ;D

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3011
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #154 le: avril 23, 2016, 09:47:34 am »
Je n'ai pas assez d'expérience sur le CAN pour affirmer quelque chose avec certitude. Mais je pense que, comme le CAN permet des transmissions fiables en milieu bruité, ce qui est le cas sous un réseau  de machines électriques, ce serait dommage de bruiter les alimentations des organes connectés.

Ça irait à l'encontre du but à atteindre.
Cordialement,
Dominique

DDEFF

  • Hero Member
  • *****
  • Messages: 760
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #155 le: avril 23, 2016, 03:20:59 pm »
Moi aussi, j'ai suivi avec attention sans pouvoir aider, malheureusement (la faute à mes préparatifs de déménagement ???  et mon TCO objet).
On voit qu'on est sur un site actif et que tout le monde se démène pour aider quelqu'un dans le besoin.
Ce n'est pas une découverte, loin de là, mais ça fait plaisir !

Pour la question de Bernard, je dirais que, comme, moi aussi, je fais mes câbles RJ, je ne me suis pas posé de questions existentielles : câblage droit.
J'ai juste respecté le code des couleurs (pas dur : c'était marqué sur la boîte   ;D )
"Ce n'est pas le puits qui est trop profond, c'est ta corde qui est trop courte" (proverbe chinois)

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #156 le: avril 23, 2016, 03:39:00 pm »
Ben je sais pas trop quoi vous dire les gars parce que de mon côté je n'ai pas de soucis ???.

Je viens de mettre en route :
1) la carte 8 servos
2) un module CAN locoduino branché sur un Nano



Les deux reliés par un cable RJ11 cablé droit comme ceci :



Notez que quand on regarde les socket RJ11 de dessus, les deux contacts centraux sont CANH et les deux contacts des bords sont CANL. Par conséquent, si le câble était croisé avec sur la prise de droite sur la photo les couleurs noir rouge vert jaune de haut en bas, ça n'aurait aucune importance puisque sur la carte le noir est relié au jaune et le rouge au vert.

J'ai chargé le sketch que Dominique a donné juste ci-dessus

Et j'ai bien envoi et réception de message à chaque bout comme l'atteste cette vidéo : http://www.locoduino.org/pic/sortie.mp4

Donc : vérification des soudures, n'y en a-t-il pas une d'oubliée ? Tous les composants sont bien en place ?
« Modifié: avril 23, 2016, 03:57:54 pm par Jean-Luc »
Cordialement

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #157 le: avril 23, 2016, 04:12:23 pm »
Concernant la connectique, j'ai choisi le RJ11 car c'est également la connectique CAN de mon réseau et de celui de deux copains Pierre et Philippe avec lesquels je développe l'électronique du réseau. C'est Pierre qui a fait ce choix il y a lontemps, avant que je me raccroche au projet.

Classiquement le CAN est en DB9 mais les socket DB9 sont très encombrants (30mm de large !), les câbles sont également plus chers et sont plus fastidieux à réaliser soi même. donc pour des raisons de coût (le prix des cartes est proportionnel à la surface/dimensions) et de facilité d'emploi le DB9 a été écarté.
« Modifié: avril 23, 2016, 04:25:40 pm par Jean-Luc »
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3011
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #158 le: avril 23, 2016, 04:47:18 pm »
Je confirme partiellement la manip de Denis : entre une carte 8 servos et une carte CAN Locoduino, ça marche en émission et réception, vu du coté de la carte Locoduino :
On voit les messages émis ("envoi message"), et les messages reçus ("166   75   0   0   0   0   0   0   0").

Par contre, du coté de la carte 8 servos, on ne voit que les messages émis ("envoi message"), pas les messages reçus !!!

Est-ce que ça fonctionne chez toi Denis des 2 cotés ?

Autre phénomène bizarre, j'ai un Nano dont le port est visible de l'IDE quand il n'est pas installé sur la carte 8 servos, mais devient invisible dès qu'il est installé sur la carte. Pourtant il fonctionne (tout du moins en émission de messages CAN). Un autre Nano ne fait pas ce problème.

Et c'est pareil sur les 2 cartes 8 servo que j'ai !
Ca doit être une grosse bourde, je m'en excuse d'avance  :-\

Je vais inspecter soigneusement les soudures et les composants
Cordialement,
Dominique

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #159 le: avril 23, 2016, 04:59:43 pm »
Ou bien ça vient du Nano. La Nano que j'ai sur la carte est celui disponible chez ElectroDragon : http://www.electrodragon.com/product/edarduino-nano-c-new-usb-ch340/ et j'ai la liaison série quand il est sur la carte (interface CH340)

Avec un autre Nano de Funduino, je n'ai pas la liaison série quand il est sur la carte  :-\
La gravure de la marque du FTDI (laser) qui l'équipe est pas top, il doit être bidon. C'est celui qui est sur la breadboard ci-dessus

Avec un autre d'origine inconnue mais qui a également copié la marque de l'original (gravitech), c'est ok
La gravure du FTDI est nickel, c'est peut être un vrai. (ou alors c'est un vrai Gravitech tombé dans un carton en bout de chaine et vendu sur le marché gris, va savoir)

« Modifié: avril 23, 2016, 05:16:19 pm par Jean-Luc »
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3011
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #160 le: avril 23, 2016, 05:02:00 pm »
On a des rebondissements dans cette affaire  :o 8)

Je viens de remplacer le Nano, dont le port ne se voit pas, par un autre Nano et maintenant on voit les émissions ET receptions sur la carte servo, avec ce nouveau Nano.
Celui dont le port n'est plus visible (mais avec le bon sketch) n'est plus visible non plus sur mon breadboard avec carte Locoduino

C'est donc le Nano qui semble être en cause.
Donc ça se passe sur le port SPI.
Comme ces Nano ne me posaient pas de problème avant, il y a matière à investigation.
Est-ce que le fait de les avoir alimentés par le port USB uniquement au début a pu les endommager ?

Cherchons, ça peut servir !
Cordialement,
Dominique

Jean-Luc

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 1713
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #161 le: avril 23, 2016, 05:14:57 pm »
Bizarre,

Il n'est pas impossible qu'il ait été endommagé mais de mon côté le Nano Funduino n'est pas visible quand il est sur la carte et il n'y a jamais été avec une alimentation côté USB et pas côté carte.

Par ailleurs j'ai branché le Nano d'ElectroDragon seulement par l'USB au tout début mais ni le 2515 ni le 23017 n'étaient en place et de toute manière je ne me suis occupé que de la broche du bouton CFG.

Quoiqu'il en soit : Il ne faut pas brancher l'USB alors que la carte n'est pas alimentée
Cordialement

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3011
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #162 le: avril 23, 2016, 05:15:06 pm »
Je crois que Jean-Luc a raison.
Tous mes Nano ont une belle gravure FTDI.
Mais le bleu marqué "Arduino Compatible", d'origine inconnue ne permet pas de voir son port aussi sur le breadboard.
On ne voit son port que quand il est pas branché ! Pas normal. Il ne me faisait pas cala avant.
Bon c'est vrai que je les torture un peu quand même !
Le rouge "Iduino" pose moins de problème

Si ceux d'Elecrodragon (à base de CH40 ?) fonctionne bien, pourquoi pas, mais je rechigne à installer un driver non certifié sur mon Mac.

J'ai du mal à comprendre la relation qu'il peut y avoir entre le port USB et le port SPI !!!
Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3011
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #163 le: avril 23, 2016, 05:22:37 pm »
Ce que je comprend mal, c'est que quand on utilise la carte Locoduino branchée sur le 5v du Nano et le SPI, donc quand le Nano est alimenté QUE par le port USB et alimente la carte Locoduino par son 5V, là ça ne semble pas endommager le Nano.

Ne serait-il pas possible d'utiliser la pin 5v pour alimenter les chips CAN ? (évidemment pas les servos)

Cordialement,
Dominique

Dominique

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 3011
  • 100% Arduino et N
    • Voir le profil
Re : Carte Servomoteurs DCC + CAN
« Réponse #164 le: avril 23, 2016, 05:33:53 pm »
A coté du Nano bleu "compatible" dont je ne vois plus le port, j'ai un Nano rouge Iduino de Geeetech.com dont je vois le port quand il est installé sur la carte 8 servos, qui se laisse programmer sans problème, mais, quand le sketch tourne, n'affiche pas les messages reçus.

C'est quand même troublant : il va falloir tester les Nanos ! Cette carte 8 servos est donc un bon banc de test de Nano  :-[ :-[
Cordialement,
Dominique