Hi Schachti,
sollte gehen wenn du in der FreeIMUV043 das '#define MPU6050_I2C_AUX_MASTER // MAG connected to the AUX I2C bus of MPU6050' (in der def.h) auskommentierst und in der Sensors.ino den I2C Bypass-Mode abschaltest.
Hier mal die Stellen mit den Änderungen (ungetestet, d.h. ohne Gewähr!):
Code: Alles auswählen
#if defined(FREEIMUv043)
#define MPU6050
#define HMC5883
#define MS561101BA
#define ACC_ORIENTATION(X, Y, Z) {accADC[ROLL] = -X; accADC[PITCH] = -Y; accADC[YAW] = Z;}
#define GYRO_ORIENTATION(X, Y, Z) {gyroADC[ROLL] = Y; gyroADC[PITCH] = -X; gyroADC[YAW] = -Z;}
#define MAG_ORIENTATION(X, Y, Z) {magADC[ROLL] = X; magADC[PITCH] = Y; magADC[YAW] = -Z;}
// MAG ist nich am MPU6050 angeschlossen --> I2C Bypass Mode ausschalten!!
//#define MPU6050_I2C_AUX_MASTER // MAG connected to the AUX I2C bus of MPU6050
#undef INTERNAL_I2C_PULLUPS
#endif
Code: Alles auswählen
// ************************************************************************************************************
// I2C Gyroscope and Accelerometer MPU6050
// ************************************************************************************************************
#if defined(MPU6050)
void Gyro_init() {
TWBR = ((F_CPU / 400000L) - 16) / 2; // change the I2C clock rate to 400kHz
i2c_writeReg(MPU6050_ADDRESS, 0x6B, 0x80); //PWR_MGMT_1 -- DEVICE_RESET 1
delay(5);
i2c_writeReg(MPU6050_ADDRESS, 0x6B, 0x03); //PWR_MGMT_1 -- SLEEP 0; CYCLE 0; TEMP_DIS 0; CLKSEL 3 (PLL with Z Gyro reference)
i2c_writeReg(MPU6050_ADDRESS, 0x1A, MPU6050_DLPF_CFG); //CONFIG -- EXT_SYNC_SET 0 (disable input pin for data sync) ; default DLPF_CFG = 0 => ACC bandwidth = 260Hz GYRO bandwidth = 256Hz)
i2c_writeReg(MPU6050_ADDRESS, 0x1B, 0x18); //GYRO_CONFIG -- FS_SEL = 3: Full scale set to 2000 deg/sec
// enable I2C bypass for AUX I2C
//#if defined(MAG)
// i2c_writeReg(MPU6050_ADDRESS, 0x37, 0x02); //INT_PIN_CFG -- INT_LEVEL=0 ; INT_OPEN=0 ; LATCH_INT_EN=0 ; INT_RD_CLEAR=0 ; FSYNC_INT_LEVEL=0 ; FSYNC_INT_EN=0 ; I2C_BYPASS_EN=1 ; CLKOUT_EN=0
//#endif*/
}
Jetzt solltest du den MAG wie gewohnt über den I2C Anschluss anschließen können. Aber Achtung: Der Signalpegel am Anschluss I2CEXTLV ist 3.3V!! Das Drotek-Teil also mit 3.3V versorgen!!!
Es sollte aber auch gehen wenn du die Sensoren einzeln definierst. Musst halt die Wirkrichtung ggf. anpassen (kannst ja beim Gyro und ACC direkt von der FreeIMUV043 übernehmen). Wenn das sauber programmiert ist sollte das die einfache, stressfreie Lösung sein.
Gruss
Jörg