Discussions Générales > Bus CAN

Usage particulier du bus CAN

<< < (2/4) > >>

Dominique:
voir l'article La bibliothèque ACAN (2)

Il y a un code erreur à récupérer à chaque emission :
const bool ok = controleurCAN.tryToSend(messageCANLEDs)

si ok est false, on incrémente un compteur. Les erreurs ne se voient pas en réception, mais seulement en émission.

Le principe est le même sur l'ancienne bibliothèque CAN BUS Shield

Tony04:
Bonjour Dominique,

je viens de faire des essais avec l'ancienne bibliothèque CAN BUS Shield avec le code suivant:


--- Code: ---boolean ok = CAN.sendMsgBuf(ad_emission_TCO, 0, 5, data_send);
Serial.println(ok);

--- Fin du code ---

et dans tous les cas je récupère 'true' même si le bus CAN n'est pas relié, est-ce normal ? Et si oui ce test ne me servira à rien.

Dans ton message tu proposes
--- Code: --- const bool ok = controleurCAN.tryToSend(messageCANLEDs)
--- Fin du code ---
  'const' n'est-ce pas une erreur ?

Merci d'éclairer ma lanterne qui ne brille pas trop en ce moment.

Cordialement
Antoine

Dominique:
Bonjour Antoine,

La syntaxe exacte (c'est pas la même fonction, mais le principe est le même) est :

--- Code: ---byte MCP_CAN::sendMsgBuf(byte status, unsigned long id, byte ext, byte rtrBit, byte len, volatile const byte *buf)
{
  byte txbuf_n=statusToTxSidh(status);

  if ( txbuf_n==0 ) return CAN_FAILTX; // Invalid status

  mcp2515_modifyRegister(MCP_CANINTF, status, 0);  // Clear interrupt flag
  mcp2515_write_canMsg(txbuf_n, id, ext, rtrBit, len, buf);

  return CAN_OK;
}
--- Fin du code ---

donc un boolean à la place d'un Byte va donner le contraire de ce que tu attends, car CAN_FAILTX = 2 donc true  >:(

--- Code: ---#define CAN_OK              (0)
#define CAN_FAILINIT        (1)
#define CAN_FAILTX          (2)

--- Fin du code ---

Comme cette ancienne bibliothèque est très utilement remplacée par la bibliothèque ACAN décrite par Jean-Luc récemment, je pense que tu aurais intérêt à changer de bibliothèque et réécrire les bouts de code correspondants dans ton programme : je sais c'est du boulot et moi je l'ai fait presque partout dans mes programmes (au fur et à mesure des mises à jour).

Là je peux te garantir que ça simplifie la vie et les exemples donnés dans les articles de Jean-Luc sont les plus utiles, en compléments de ceux qui sont dans la bibliothèque (qui étendent son usage à d'autres microcontrôleurs).

Bon courage

Coyotte:
Hello à toutes et tous,

Je suis un peu surpris que l'utilisation prévue par Antoine puisse poser problème.
Il me semblait justement que l'intérêt du bus CAN était de pouvoir envoyer une information sur le bus sans connaître le nombre de destinataires.

Dans mon cas, par exemple, je compte envoyer "l'heure du réseau" sur le bus via un module (appelons-le "Clock"). Tous les périphériques éventuellement intéressé par celle-ci pourraient alors récupérer l'info.
S'il faut utiliser des "adresses" différentes cela revient à dire que lorsque j'ajouterais un périphérique utilisant cette info, je devrais modifier le module "clock" pour prendre en compte le nouveau destinataire ? Cela me semble aller à l'encontre du principe de ce bus, non ? (ou alors, je n'ai rien compris,ce qui est encore possible  ;) )

Coyotte

Tony04:
Tu m'as convaincu Dominique, je vais de ce pas changer de librairie et te tiendrai au courant.

Un grand merci à toi et bonne journée.
Antoine

Navigation

[0] Index des messages

[#] Page suivante

[*] Page précédente

Utiliser la version classique