Problème d'adressage d'un module I2C

Bonjour,

Je bricole un petit jeu qui nécessite 16 touches tactiles.
Pour cela j'ai acheté 2 modules de détection de capacités basés sur une puce MPR121 (photos recto et verso en pièce jointe). Ce sont des clones chinois des modules proposés par Adafruit ou Sparkfun. Ces modules fonctionnent très bien séparément.
Un module gère 12 entrées et se branche sur le port I2C. Il me faut donc en utiliser 2 pour gérer mes 16 touches tactiles et cela nécessite donc de modifier l'adresse d'un des modules. Le peu de documentation que j'ai réussi à dégotter précise qu'il faut connecter le pin ADD au pin 3.3V ou à SCL ou SDA pour modifier l'adresse. Aucune de ces manipulations n'a pourtant fonctionné : elles ne font que bloquer la détection du module. Il y a cependant au dos de la carte (voir photo) des petites plaques juxtaposées à côté des pins dont certaines sont visiblement connectées à des résistances de pull-up (pin SCL / SDA / IRQ), ce qui suggère que ces dispositifs font office de cavaliers. Etant novice je n'ai pas réussi à déterminer comment cela fonctionne. Je suppose que la pin ADD doit être par défaut reliée à la masse mais je suis un peu hésitant quand il s'agit de détériorer de manière définitive un élément du module... Quelqu'un pourrait-il me renseigner SVP ?
Par ailleurs, je suppose qu'il va me falloir modifier quelque peu la librairie pour faire fonctionner 2 modules simultanément. Est-ce que quelqu'un a déjà testé ça ?

Merci d'avance pour votre aide

Bonjour,

Tout est dit sur le site SparkFun.

Il faut enlever le point de soudure qui met Addr à la masse et en suite relier Addr au +3.3v.
L'adresse du module passera de 0x5A à 0x5B.
Les resistances de pull-up font 10K. On peut les laisser connectées.

Roger.

bonjour,
un code peut être?

utilise ce code pour scanner les adresses i2c des modules

#include <Wire.h>


void setup()
{
  Wire.begin();

  Serial.begin(9600);
  Serial.println("\nI2C Scanner");
}


void loop()
{
  byte error, address;
  int nDevices;

  Serial.println("Scanning...");

  nDevices = 0;
  for(address = 0; address <= 127; address++ ) 
  {
    // The i2c_scanner uses the return value of
    // the Write.endTransmisstion to see if
    // a device did acknowledge to the address.
    Wire.beginTransmission(address);
    error = Wire.endTransmission();

    if (error == 0)
    {
      Serial.print("I2C device found at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.print(address,HEX);
      Serial.println(" !");

      nDevices++;
    }
    else if (error==4) 
    {
      Serial.print("Unknow error at address 0x");
      if (address<16) 
        Serial.print("0");
      Serial.println(address,HEX);
    }    
  }
  if (nDevices == 0)
    Serial.println("No I2C devices found\n");
  else
    Serial.println("done\n");

  delay(500);           // wait 8 seconds for next scan
}

Merci pour ces réponses rapides.

J'utilises déjà un scanner I2C, mon problème est "hardware" mais merci quand même Infobarquee.

Il n'y a pas de point de soudure Bilbo83 mais le lien sparkfun précise " you can open the jumpers by cutting the trace connecting them" donc j'ai tenté le coup avec un cutter (photo jointe).

Je sais pas si j'ai coupé dans le bon sens mais du coup le pin ADD n'est plus relié à rien du tout et pour le court-circuiter, il faut utiliser le petit perçage secondaire qu'il y a à côté de l'inscription du nom du pin. Du coup ça marche, j'ai réussi à obtenir une adresse 0x5B mais pas trouvé de court-circuit pour obtenir d'autres adresses. Comme je veux juste 2 adresses différentes ça fait l'affaire pour moi mais je serais quand même curieux de comprendre pourquoi je n'en obtiens pas d'autres (normalement 4 adresses différentes possibles)

Merci encore

Si on suit le principe d'autres composants I2C, avec une seule broche de sélection d'adresse, on devrait avoir:

ADD =Gnd -->0x5A
ADD=Vcc --> 0x5B
ADD= SDA --> 0x5C
ADD= SCL --> 0x5D

C'est ce que j'obtiens avec des TMP102, adresses 0x48 à 0x4B.

Roger.

En fait, je viens de télécharger la notice du MPR121

Tu as le tableau d'adressage page 24.

ADD = VCC-->0x5A
ADD= GND --> 0x5B
ADD= SDA --> 0x5C
ADD= SCL --> 0x5D

Il y a donc une erreur dans la doc Sparkfun.