probléme de communication via un bus i2c

Bonjour

Je suis actuellement en train de réaliser un projet personnel qui consiste a mesurer l'acceleration d'un bras de robot lors de sa descente vers un objet.

J'utilise un Arduino méga 2560 et un accéléromètre accel 3 click de mikroelektronika
j'ai réussi a afficher sur mon traceur série les donnée de un accéléromètre mais quand j'en place u deuxième j'ai le problème suivant:
mes deux accéléromètre sont identique et on la même adresse de communication o je voudrais changer l'adresse de l'un de deux mais je ne sais pas du tout comment faire.
Selon mikroelektronika, leur accéléromètre a une adresse i2c configurable mais je ne peut pas y accéder via mon Arduino méga ou alors si il y a un moyen je ne l'ai pas trouver.

Si quelqu'un aurai une piste de réflexion ou une solution je serai très interreser

Merci par avance pour vos réponses.

lien vers votre carte? (ils ont 13 accéléromètres différents...)

par exemple la doc du Accel 2 click montre qu'il suffit de souder (le 0 que vous voyez indique une résistance de 0 entre les 2 plots - donc juste une simple connexion) deux plots entre eux pour choisir une fonction. Pour être en mode I2C il faut souder J1, J2, J3 sur la partie droite (et s'assurer qu'il n'y a pas de soudure sur la partie gauche) et pour choisir l'adresse 0 ou 1 (que vous pourrez ensuite déterminer avec un scan du bus I2C (cf aussi l'excellent Article de Nick G. sur l'"Inter-Integrated Circuit")) souder les plots I2C ADD soit à gauche, soit à droite (Ils ne disent pas si les 2 ensemble donnent une troisième adresse)

mais je ne peut pas y accéder via mon Arduino méga ou alors si il y a un moyen je ne l'ai pas trouver.

Pour accéder à un esclave I2C à partir la carte Mega il faut avoir accès à l'esclave I2C mais si l'adresse I2C n'est pas la bonne aucun dialogue n'est possible.

C'est pour cette raison que très généralement les adresses I2C sont réglables par 1 à 3 straps à configurer manuellement sur la carte de l'esclave I2C.

Merci beaucoup pour ces réponses rapide.

Voila le lien vers le site de l'accelerometre:https://shop.mikroe.com/click/sensors/accel3

Merci pour l'astuce avec les jumpers car je ne savais pas si les jumpers dont ils parlaient dans la doc

était ceux de l'accelerometre ou de leur développement board.

Seulement je dois pouvoir afficher les données de 4 accéléromètres. Or via cette méthode je ne peux

en utiliser que 2 sur deux adresses différentes.

Ensuite pour ce qui est de la configuration de ma liaison i2c maitre/esclave elle marche sans pb avec

un accéléromètre car j'ai eu sont adresse dans la documentation technique du H3LIS331DL qui est le

composant utiliser par mikroelektronika.

En fait je cherche plus un moyen de modifier l'adresse de mon accéléromètre directement via le

microcontrôleur AVR de l’Arduino ou via un environnement de développement qui me laisse accéder a

son adresse et la modifier.

Encore une fois merci pour vos réponses rapide et merci d'avance pour vos prochaine réponses.

samy54:
En fait je cherche plus un moyen de modifier l'adresse de mon accéléromètre directement via le microcontrôleur AVR de l’Arduino ou via un environnement de développement qui me laisse accéder a son adresse et la modifier.

ce n'est pas possible de modifier l'adresse par programme, elle est "câblée en dur" au niveau du composant, juste modifiable sur 1 bit comme effectivement décrit dans la documentation de votre produit:

The slave address (SAD) associated to the H3LIS331DL is 001100xb. The SDO/SA0 pad can be used to modify the less significant bit of the device address. If the SA0 pad is connected to the voltage supply, LSB is ‘1’ (address 0011001b) or else, if the SA0 pad is connected to ground, the LSB value is ‘0’ (address 0011000b). This solution allows the connection and addressing of two different accelerometers to the same I2C lines.

vous n'avez donc que 2 adresses possibles qui sont obtenues en jouant sur la pin SA0

il y a des solutions cependant:

  • vous prenez un micro-contrôleurs avec plusieurs bus I2C séparés (ARM Cortex M0 -> M3 ) mais c'est compliqué

  • la version "du pauvre" est d'utiliser une librairie qui va émuler le I2C sur d'autres pins. Si vous n'avez pas besoin d'un fort débit ça peut le faire (cf Software I2C library par exemple, il y en a d'autres comme greiman/DigitalIO)

  • bien que ce ne soit pas complètement garanti de fonctionner, vous pourriez en gérant l'alimentation depuis une pin et un transistor éteindre et allumer deux par deux les accéléromètres, ceux qui sont éteints ne répondront pas à la requête... mais bon avoir des composants sur le bus qu'on allume et éteint en permanence ce n'est pas top

  • on peut bidouiller avec un CD4053 pour multiplexer seulement la ligne SCL

  • il existe un moyen de créer des bus I2C indépendants, cf page 5 de cette doc TISolving Address Conflict When Sharing I2C Bus.

  • Adafruit propose par exemple le TCA9548A 1-to-8 I2C multiplexer qui vous permet de gérer jusqu'à 8 esclaves ayant la même adresse.

Si vous avez un peu de temps devant vous un TCA9548A s'achète pour 2 ou 3 euros en asie si votre site favori

Bonjour

Après avoir testé plusieurs des méthodes proposer j'ai finalement pu résoudre mon problème en changeant un jumper en le soudant a un autre endroit de mon accélérométrie.

Merci beaucoup pour les conseils et les explications que vous m'avez donner car elle m'ont été utile pour faire avancer mon projet.