fix driver

This commit is contained in:
sfja 2026-03-31 21:50:29 +02:00
parent dbad216e10
commit c7d85ce151

View File

@ -68,7 +68,7 @@ typedef enum : uint8_t {
} Mask; } Mask;
static esp_err_t read_regs( static esp_err_t read_regs(
Mpu6050* dev, uint8_t* out_data, size_t data_size, Reg reg) Mpu6050* dev, void* out_data, size_t data_size, Reg reg)
{ {
return i2c_master_transmit_receive( return i2c_master_transmit_receive(
dev->i2c_dev, &reg, 1, out_data, data_size, DEFAULT_TIMEOUT); dev->i2c_dev, &reg, 1, out_data, data_size, DEFAULT_TIMEOUT);
@ -140,12 +140,14 @@ esp_err_t new_mpu6050_init(Mpu6050* dev)
} }
ESP_LOGI(TAG, "Found MPU6050 device"); ESP_LOGI(TAG, "Found MPU6050 device");
dev->gyro_range = MPU6050_GYRO_RANGE_250;
dev->accel_range = MPU6050_ACCEL_RANGE_2;
CHECK(new_mpu6050_set_clock_source(dev, MPU6050_CLKSEL_PLL_GYRO_X_REF)); CHECK(new_mpu6050_set_clock_source(dev, MPU6050_CLKSEL_PLL_GYRO_X_REF));
CHECK(new_mpu6050_set_sleep_enabled(dev, false)); CHECK(new_mpu6050_set_sleep_enabled(dev, false));
dev->gyro_range = MPU6050_GYRO_RANGE_250; CHECK(new_mpu6050_set_sample_rate_div(dev, 7));
dev->accel_range = MPU6050_ACCEL_RANGE_2;
return ESP_OK; return ESP_OK;
} }
@ -162,9 +164,12 @@ esp_err_t new_mpu6050_get_rotation(Mpu6050* dev, float3* rotation)
uint8_t buffer[6]; uint8_t buffer[6];
CHECK(read_regs(dev, buffer, 6, REG_GYRO_XOUT_H)); CHECK(read_regs(dev, buffer, 6, REG_GYRO_XOUT_H));
rotation->x = (buffer[0] << 8 | buffer[1]) * resolution[dev->gyro_range]; rotation->x
rotation->y = (buffer[2] << 8 | buffer[3]) * resolution[dev->gyro_range]; = (int16_t)(buffer[0] << 8 | buffer[1]) * resolution[dev->gyro_range];
rotation->z = (buffer[4] << 8 | buffer[5]) * resolution[dev->gyro_range]; rotation->y
= (int16_t)(buffer[2] << 8 | buffer[3]) * resolution[dev->gyro_range];
rotation->z
= (int16_t)(buffer[4] << 8 | buffer[5]) * resolution[dev->gyro_range];
return ESP_OK; return ESP_OK;
} }
@ -181,9 +186,12 @@ esp_err_t new_mpu6050_get_acceleration(Mpu6050* dev, float3* accel)
uint8_t buffer[6]; uint8_t buffer[6];
CHECK(read_regs(dev, buffer, 6, REG_ACCEL_XOUT_H)); CHECK(read_regs(dev, buffer, 6, REG_ACCEL_XOUT_H));
accel->x = (buffer[0] << 8 | buffer[1]) * resolution[dev->accel_range]; accel->x
accel->y = (buffer[2] << 8 | buffer[3]) * resolution[dev->accel_range]; = (int16_t)(buffer[0] << 8 | buffer[1]) * resolution[dev->accel_range];
accel->z = (buffer[4] << 8 | buffer[5]) * resolution[dev->accel_range]; accel->y
= (int16_t)(buffer[2] << 8 | buffer[3]) * resolution[dev->accel_range];
accel->z
= (int16_t)(buffer[4] << 8 | buffer[5]) * resolution[dev->accel_range];
return ESP_OK; return ESP_OK;
} }