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:

Code:
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:

Code:
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:

Code:
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?