start:arduino:i2c:tca9548a
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
start:arduino:i2c:tca9548a [2024/04/15 13:06] – gerardadmin | start:arduino:i2c:tca9548a [2024/04/15 13:25] (Version actuelle) – gerardadmin | ||
---|---|---|---|
Ligne 26: | Ligne 26: | ||
=== Module multiplexeur basé sur un TCA9548A === | === Module multiplexeur basé sur un TCA9548A === | ||
+ | |||
+ | {{ : | ||
+ | |||
| | ||
Ligne 39: | Ligne 42: | ||
Poids: 1,8 g | Poids: 1,8 g | ||
Référence Adafruit: ADA2717 | Référence Adafruit: ADA2717 | ||
+ | |||
+ | http:// | ||
+ | |||
+ | Son utilisation est assez simple : le multiplexeur lui-même est sur l' | ||
+ | |||
+ | La puce elle-même est compatible 1,8 V - 5 V, vous pouvez donc l' | ||
+ | |||
+ | ===Broches d' | ||
+ | |||
+ | |||
+ | * Vin - c'est la broche d' | ||
+ | * GND - terrain d' | ||
+ | |||
+ | ===Broches côté contrôle I2C :=== | ||
+ | | ||
+ | * SDA - il s'agit de la broche de données I2C pour la puce elle-même, connectez-vous à la ligne de données I2C de votre microcontrôleur. | ||
+ | * RST - c'est la broche de réinitialisation, | ||
+ | * A0 A1 A2 - ce sont les broches de sélection d' | ||
+ | * A0 est le bit de poids le plus faible (s'il est élevé, il augmentera l' | ||
+ | * A1 est le deuxième bit de poids le plus faible (s'il est élevé, il augmentera l' | ||
+ | * A2 est le troisième bit de poids le plus faible (s'il est élevé, il augmentera l' | ||
+ | |||
+ | ===Broches côté multiplexé I2C :=== | ||
+ | |||
+ | * SDx et SCx : Il existe 8 jeux de broches SDx et SCx , de SD0/SC0 à SD7/SC7 . Ce sont les broches multiplexées. Chacun est un ensemble de bus I2C complètement séparé. Vous pouvez donc avoir 8 appareils I2C avec des adresses identiques, à condition qu'ils soient chacun sur un bus I2C. | ||
+ | * Aucun pullup n'est installé sur ces broches, donc si vous utilisez une puce ou un breakout sans pullups i2c, assurez-vous de les ajouter ! Eh bien, vous pouvez avoir Vin à 3,3 V et faire tirer ces broches jusqu' | ||
+ | |||
+ | |||
+ | ===Câblage et test Arduino=== | ||
+ | |||
+ | Le multiplexeur TCA9548A est intéressant dans la mesure où il possède une adresse I2C (0x70 par défaut) - et vous lui envoyez essentiellement une commande pour lui indiquer à quelle sortie multiplexée I2C vous souhaitez parler, vous pouvez ensuite adresser la carte à laquelle vous souhaitez adresser. | ||
+ | |||
+ | Nous vous suggérons d' | ||
+ | |||
+ | <code c prog001.ino> | ||
+ | #définir TCAADDR 0x70 | ||
+ | void tcaselect(uint8_t i) { | ||
+ | if (i > 7) return; | ||
+ | Wire.beginTransmission(TCAADDR); | ||
+ | Wire.write(1 << i); | ||
+ | Wire.endTransmission(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Vous pouvez ensuite appeler tcaselect(0) via tcaselect(7) pour configurer le multiplexeur. | ||
+ | |||
+ | Notez que si vous possédez des appareils I2C avec l' | ||
+ | |||
+ | |||
+ | <code c progr002.ino> | ||
+ | /** | ||
+ | * TCA9548 I2CScanner.ino -- I2C bus scanner for Arduino | ||
+ | * | ||
+ | * Based on https:// | ||
+ | * | ||
+ | */ | ||
+ | |||
+ | #include " | ||
+ | |||
+ | #define TCAADDR 0x70 | ||
+ | |||
+ | void tcaselect(uint8_t i) { | ||
+ | if (i > 7) return; | ||
+ | |||
+ | Wire.beginTransmission(TCAADDR); | ||
+ | Wire.write(1 << i); | ||
+ | Wire.endTransmission(); | ||
+ | } | ||
+ | |||
+ | |||
+ | // standard Arduino setup() | ||
+ | void setup() | ||
+ | { | ||
+ | while (!Serial); | ||
+ | delay(1000); | ||
+ | |||
+ | Wire.begin(); | ||
+ | | ||
+ | Serial.begin(115200); | ||
+ | Serial.println(" | ||
+ | | ||
+ | for (uint8_t t=0; t<8; t++) { | ||
+ | tcaselect(t); | ||
+ | Serial.print(" | ||
+ | |||
+ | for (uint8_t addr = 0; addr< | ||
+ | if (addr == TCAADDR) continue; | ||
+ | |||
+ | Wire.beginTransmission(addr); | ||
+ | if (!Wire.endTransmission()) { | ||
+ | Serial.print(" | ||
+ | } | ||
+ | } | ||
+ | } | ||
+ | Serial.println(" | ||
+ | } | ||
+ | |||
+ | void loop() | ||
+ | { | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | Par exemple, l' | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | Ensuite, vous devrez ajuster le code dont vous disposez pour sélectionner le bon port multiplexé ! | ||
+ | |||
+ | Assurez-vous avant d' | ||
+ | |||
+ | |||
+ | <code c prog003.ino> | ||
+ | #include < | ||
+ | #include < | ||
+ | #include < | ||
+ | |||
+ | #define TCAADDR 0x70 | ||
+ | |||
+ | /* Assign a unique ID to this sensor at the same time */ | ||
+ | Adafruit_HMC5883_Unified mag1 = Adafruit_HMC5883_Unified(1); | ||
+ | Adafruit_HMC5883_Unified mag2 = Adafruit_HMC5883_Unified(2); | ||
+ | |||
+ | void displaySensorDetails(Adafruit_HMC5883_Unified *mag) | ||
+ | { | ||
+ | sensor_t sensor; | ||
+ | mag-> | ||
+ | Serial.println(" | ||
+ | Serial.print | ||
+ | Serial.print | ||
+ | Serial.print | ||
+ | Serial.print | ||
+ | Serial.print | ||
+ | Serial.print | ||
+ | Serial.println(" | ||
+ | Serial.println("" | ||
+ | delay(500); | ||
+ | } | ||
+ | |||
+ | void tcaselect(uint8_t i) { | ||
+ | if (i > 7) return; | ||
+ | |||
+ | Wire.beginTransmission(TCAADDR); | ||
+ | Wire.write(1 << i); | ||
+ | Wire.endTransmission(); | ||
+ | } | ||
+ | |||
+ | |||
+ | void setup(void) | ||
+ | { | ||
+ | Serial.begin(9600); | ||
+ | Serial.println(" | ||
+ | | ||
+ | /* Initialise the 1st sensor */ | ||
+ | tcaselect(2); | ||
+ | if(!mag1.begin()) | ||
+ | { | ||
+ | /* There was a problem detecting the HMC5883 ... check your connections */ | ||
+ | Serial.println(" | ||
+ | while(1); | ||
+ | } | ||
+ | | ||
+ | /* Initialise the 2nd sensor */ | ||
+ | tcaselect(6); | ||
+ | if(!mag2.begin()) | ||
+ | { | ||
+ | /* There was a problem detecting the HMC5883 ... check your connections */ | ||
+ | Serial.println(" | ||
+ | while(1); | ||
+ | } | ||
+ | | ||
+ | /* Display some basic information on this sensor */ | ||
+ | tcaselect(2); | ||
+ | displaySensorDetails(& | ||
+ | tcaselect(6); | ||
+ | displaySensorDetails(& | ||
+ | } | ||
+ | |||
+ | void loop(void) | ||
+ | { | ||
+ | /* Get a new sensor event */ | ||
+ | sensors_event_t event; | ||
+ | | ||
+ | tcaselect(2); | ||
+ | mag1.getEvent(& | ||
+ | |||
+ | /* Display the results (magnetic vector values are in micro-Tesla (uT)) */ | ||
+ | Serial.print(" | ||
+ | Serial.print(" | ||
+ | Serial.print(" | ||
+ | Serial.print(" | ||
+ | | ||
+ | tcaselect(6); | ||
+ | mag2.getEvent(& | ||
+ | /* Display the results (magnetic vector values are in micro-Tesla (uT)) */ | ||
+ | Serial.print(" | ||
+ | Serial.print(" | ||
+ | Serial.print(" | ||
+ | Serial.print(" | ||
+ | | ||
+ | delay(500); | ||
+ | } | ||
+ | </ |
/home/chanteri/www/fablab37110/data/attic/start/arduino/i2c/tca9548a.1713179197.txt.gz · Dernière modification : 2024/04/15 13:06 de gerardadmin