pin SDA e SCL gia in uso.. che fare?

Ciao ragazzi, ho un brutto problemaccio.
Ho acquistato un giroscopio/accellerometro GY-521 (MPU6050), testato e perfettamente funzionante.

Purtroppo pero' utilizza i pin SDA e SCL della mia Arduino mega 2560 che sono gia' occupati dalla scheda servo driver Adafruit!

Cosa posso fare?

E' possibile "sdoppiare" l'SDA e l'SCL in qualche modo? a quel punto potro' utilizzare sia la scheda servo driver che il giroscopio.

Ecco lo schema di collegamento del giroscopio:

Spero proprio ci sia una soluzione..

Sono periferiche I2C gli dai indirizzi diversi e sei a posto

Metti in parallelo i due pin di uno con quelli dell’altro e ti assicuri che non si riferiscano entrambi allo stesso indirizzo :wink:

ahhh ragazzi mi state dando speranze!!!

Guardate l’immagine allegata, e’ corretto il cablaggio?

Qui e’ il codice del giroscopio, dov’e’ l’indirizzo e che formato utilizza?? (scusate il livello eh…)

    #include<Wire.h>
    const int MPU=0x68;  // I2C address of the MPU-6050
    int16_t AcX,AcY,AcZ,Tmp,GyX,GyY,GyZ;
    void setup(){
      Wire.begin();
      Wire.beginTransmission(MPU);
      Wire.write(0x6B);  // PWR_MGMT_1 register
      Wire.write(0);     // set to zero (wakes up the MPU-6050)
      Wire.endTransmission(true);
      Serial.begin(9600);
    }
    void loop()
    {
      Wire.beginTransmission(MPU);
      Wire.write(0x3B);  // starting with register 0x3B (ACCEL_XOUT_H)
      Wire.endTransmission(false);
      Wire.requestFrom(MPU,14,true);  // request a total of 14 registers
      AcX=Wire.read()<<8|Wire.read();  // 0x3B (ACCEL_XOUT_H) & 0x3C (ACCEL_XOUT_L)    
      AcY=Wire.read()<<8|Wire.read();  // 0x3D (ACCEL_YOUT_H) & 0x3E (ACCEL_YOUT_L)
      AcZ=Wire.read()<<8|Wire.read();  // 0x3F (ACCEL_ZOUT_H) & 0x40 (ACCEL_ZOUT_L)
      Tmp=Wire.read()<<8|Wire.read();  // 0x41 (TEMP_OUT_H) & 0x42 (TEMP_OUT_L)
      GyX=Wire.read()<<8|Wire.read();  // 0x43 (GYRO_XOUT_H) & 0x44 (GYRO_XOUT_L)
      GyY=Wire.read()<<8|Wire.read();  // 0x45 (GYRO_YOUT_H) & 0x46 (GYRO_YOUT_L)
      GyZ=Wire.read()<<8|Wire.read();  // 0x47 (GYRO_ZOUT_H) & 0x48 (GYRO_ZOUT_L)

      //Serial.print("AcX = "); Serial.print(AcX);
      //Serial.print(" | AcY = "); Serial.print(AcY);
      //Serial.print(" | AcZ = "); Serial.print(AcZ);
      //Serial.print(" | Tmp = "); Serial.print(Tmp/340.00+36.53);  //equation for temperature in degrees C from datasheet
      //Serial.print(" | GyX = "); Serial.print(GyX);
      //Serial.print(" | GyY = "); Serial.print(GyY);
      //Serial.print(" | GyZ = "); Serial.println(GyZ);
      
      Serial.print("\X: ");
      Serial.print(GyX);
      delay(50);
    }

#include<Wire.h>
    const int MPU=0x68;  // I2C address of the MPU-6050

l’indirizzo è qui… invece il servo driver dovrebbe avere un indirizzo settabile tramite jumper, da 0x60 a 0x80…
il collegamento va bene

Innanzitutto grazie 1000 marinaio!

Poi guarda questa foto dell’adafruit…

non ho la piu’ pallida idea di come si utilizzano questi cosini che dovrebbero essere jumpers…
puoi darmi qualche consiglio?

Comunque presumo che fornendo un indirizzo particolare al giroscopio, non dovrei avere problemi, in effetti saranno 2 indirizzi diversi anche senza toccare l’adafruit!

Secondo me quella scheda non é una scheda per servo ma una scheda con 16 uscite PWM che in un certorange ristretto possono produrre un segnale PPM per i servo.

I contatti sono da saldare per poter inserire i conettori dei Servo.

Ciao Uwe

uwefed:
Secondo me quella scheda non é una scheda per servo ma una scheda con 16 uscite PWM che in un certorange ristretto possono produrre un segnale PPM per i servo.

I contatti sono da saldare per poter inserire i conettori dei Servo.

Ciao Uwe

Ciao uwefed, si quella e' una scheda servo driver! Nata per quello :slight_smile: poi non so, puo'essere che ci si possa attaccare pure qualcos'altro!
Si i contatti vanno saldati e permette di utilizzare fino a 16 servo.

Comunque ho scoperto dal sito adafruit come cambiargli l'indirizzo, cioe' saldando dei ponticelli nelle piastrine color oro.

L'adafruit ha come indirizzo di base 0x40 mentre il gyro e' 0x68 quindi dovrebbero gia' avere 2 indirizzi diversi :slight_smile:

Se gli indirizzi sono diversi già in partenza non serve che smanetti per ponticellare sulla scheda, va bene così :grinning:

giorgio90:
Se gli indirizzi sono diversi già in partenza non serve che smanetti per ponticellare sulla scheda, va bene così :grinning:

Grazie giorgio e grazie a tutti! :slight_smile:

Dovresti mettere dei resistori di pull-up sulle due linee SDA - SCL

paulus1969:
Dovresti mettere dei resistori di pull-up sulle due linee SDA - SCL

Ciao paulus, potresti spiegarmi meglio?
che scopo avrebbero e come dovrei allacciarli ai cavi sda e scl?
grazie!

Resistori da 10 k oppure da 4.7 k da mettere fra un punto della linea SDA e + 5 V e fra un punto della linea SCL e + 5 V.
Funziona anche senza, specialmente se hai le linee molto corte, ma è meglio metterli.
In caso di dubbio parti col 10 k.

paulus1969:
Resistori da 10 k oppure da 4.7 k da mettere fra un punto della linea SDA e + 5 V e fra un punto della linea SCL e + 5 V.
Funziona anche senza, specialmente se hai le linee molto corte, ma è meglio metterli.
In caso di dubbio parti col 10 k.

Grazie!! :slight_smile: