Bonjour à tous et bonne année !
Je viens vers vous aujourd'hui pour trouver une solution à mon problème.
Pour faire simple: le contexte:
j'ai une carte kl25z de chez freescale (NXP maintenant) qui comporte 4 bus I2C (jusqu'à la tout vas bien !)
de l'autre coté du ring j'ai 15 capteurs GY-521 6DOF MPU6050 (accelerometre gyroscopique).
Le problème:
Ces capteurs n'ont que 2 adresses possible sur le bus (0x68 et 0x69) donc je ne peut utilser que 2 capteurs par bus donc 8 au total!
avec quelque recherche sur internet je suis tombé sur ça :
(résumé en 3 ligne a la fin !)
Pour les ceux qui ne veulent pas ce casser la tête (google traduction):
source:http://playground.arduino.cc/Main/MPU-6050
Using more than two MPU-6050 sensors can be achieved by connecting each of the AD0 pins to a separate output of the Arduino. If the number of pins is a problem, then a shift register or a port expander can be used.
The output of a 5V Arduino can not be used. In that case a voltage divider or level shifter for 3.3 volts on each of the outputs is needed. The 5V output pins can also be converted in 3.3V open collector outputs by using transistors or an open-collector driver. Pullup resistors to 3.3V should be added for a high level of 3.3V.
Suppose all AD0 lines are default high (3.3V), so every MPU-6050 is I2C address 0x69. That I2C address is however never used ! The Arduino makes one of the AD0 lines low, and uses that sensor at I2C address 0x68. After that is finished, the Arduino selects another AD0 line, and can use that sensor.
So every sensor is used at I2C address 0x68 (one by one) and 0x69 is never used.
This should make it possible to have many MPU-6050 sensors in a project. Even more than 10 sensor should be possible.
Note that requesting data from many MPU-6050 sensors is slow, because the I2C-bus is slow. A sensor with SPI interface is faster.
At this moment (15 July 2014) it is not known if this trick works for the MPU-6050.
Utilisation de plus de deux capteurs MPU-6050 peut être réalisé en connectant chacun des repères de AD0 à une sortie séparée de l'Arduino. Si le nombre de broches est un problème, alors un registre à décalage ou une extension de port peut être utilisé.
La sortie d'un Arduino 5V ne peut être utilisé. Dans ce cas, un diviseur de tension ou de décalage de niveau de 3,3 volts sur chacune des sorties est nécessaire. Les broches de sortie 5V peuvent également être convertis en 3.3V sorties à collecteur ouvert en utilisant des transistors ou un pilote à collecteur ouvert. Résistance de tirage au 3.3V devraient être ajoutées pour un haut niveau de 3.3V.
Supposons toutes les lignes de AD0 sont élevés par défaut (3,3), de sorte que chaque MPU-6050 est l'adresse I2C 0x69. Cette adresse I2C est cependant jamais utilisé! L'Arduino fait l'une des lignes de faible AD0, et utilise ce capteur à l'adresse I2C 0x68. Après cela est terminé, l'Arduino sélectionne une autre ligne de AD0, et peut utiliser ce capteur.
Ainsi, chaque capteur est utilisé à l'adresse I2C 0x68 (un par un) et 0x69 est jamais utilisée.
Cela devrait permettre d'avoir de nombreux capteurs MPU-6050 dans un projet. Plus encore que le capteur 10 doit être possible.
Notez que la demande de données à partir de nombreux capteurs MPU-6050 est lent, parce que le bus I2C est lente. Un capteur avec interface SPI est plus rapide.
En ce moment (15 Juillet 2014) on ne sait pas si cette astuce fonctionne pour le MPU-6050.
et les gros flemmard :
résumé:
il propose de mettre tous les capteurs sur un seul bus I2C avec la même adresse (0x68) et lorsque je veux savoir la valeur d'un des capteurs on change son bit d'adressage a 0x69 et dans le code on envoie 0x69.
il dise à la fin qu'il n'ont pas eu le cas de tester!
je voulais donc savoir si vous pensiez que cela était possible ou non !
cordialement !
Sh0rtY
Partager