PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem mit MPU-6050



ni.c
06.04.2012, 12:53
Hi,

ich hänge seit ein paar Tagen an einem Problem mit einem MPU-6050. Die Kommunikation über I2C mit dem MPU-6050 funktioniert, aber aus irgendeinem Grund sind die Werte mancher Beschleunigungsmesser und Gyroskope 0x00. Und zwar je nach Initialisierung unterschiedliche.

Wenn ich den MPU-6050 folgendermaßen initialisiere:



if (i2c_start(0xD0 + I2C_WRITE)) {

/* Set clock to X GYRO and disable sleep */
i2c_write(0x6B);
i2c_write(0x01);

i2c_stop();
}

und ich anschließen die Register ab 3B auslese, stehen dort Werte für ACCEL_XOUT, TEMP_OUT, GYRO_XOUT und GYRO_YOUT, alle anderen Register sind 0x00. Schreibe ich in der Initialisierung nach dem Aufwecken des MPU-6050 in das Register 6A:



if (i2c_start(0xD0 + I2C_WRITE)) {

/* Set clock to X GYRO and disable sleep */
i2c_write(0x6B);
i2c_write(0x01);

i2c_write(0x6C);
i2c_write(0x00);

i2c_stop();
}

Dann stehen ab dem Register 3B die Werte für ACCEL_YOUT, TEMP_OUT, GYRO_YOUT und GYRO_ZOUT, alle anderen Register sind 0x00. Das sind andere Register als im ersten Fall.

Die Funktion zum Auslesen der Register sieht folgendermaßen aus:



void mpu6050_getall(int16_t *accel_xout, int16_t *accel_yout, int16_t *accel_zout, int16_t *gyro_xout, int16_t *gyro_yout, int16_t *gyro_zout, int16_t *temp_out) {
if (i2c_start(0xD0 + I2C_WRITE)) {
i2c_write(0x3B);
if (i2c_rep_start(0xD0 + I2C_READ)) {
*accel_xout = (((int16_t) i2c_read_ack()) << 8) | i2c_read_ack();
*accel_yout = (((int16_t) i2c_read_ack()) << 8) | i2c_read_ack();
*accel_zout = (((int16_t) i2c_read_ack()) << 8) | i2c_read_ack();
*temp_out = (((int16_t) i2c_read_ack()) << 8) | i2c_read_ack();
*gyro_xout = (((int16_t) i2c_read_ack()) << 8) | i2c_read_ack();
*gyro_yout = (((int16_t) i2c_read_ack()) << 8) | i2c_read_ack();
*gyro_zout = (((int16_t) i2c_read_ack()) << 8) | i2c_read_nak();
}
}
i2c_stop();
}

Ich schaffe es nicht, dass Werte für alle Sensoren gleichzeitig in den Registern stehen. Was mache ich falsch?