|
#define MPU6050_CLOCK_PLL_YGYRO 0x02
#define devAddr 0xD0
#define MPU6050_RA_PWR_MGMT_1 0x6B
#define MPU6050_PWR1_CLKSEL_BIT 2
#define MPU6050_PWR1_CLKSEL_LENGTH 3
MPU6050_setClockSource(MPU6050_CLOCK_PLL_YGYRO); //设置时钟
void MPU6050_setClockSource(uint8_t source){
IICwriteBits(devAddr, MPU6050_RA_PWR_MGMT_1, MPU6050_PWR1_CLKSEL_BIT, MPU6050_PWR1_CLKSEL_LENGTH, source);
}
u8 IICwriteBits(u8 dev,u8 reg,u8 bitStart,u8 length,u8 data)
{
u8 b;
if (IICreadByte(dev, reg, &b) != 0) {
u8 mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1);
data <<= (8 - length);
data >>= (7 - bitStart);
b &= mask;
b |= data;
return IICwriteByte(dev, reg, b);
} else {
return 0;
}
}
给MPU6050的电源管理寄存器1(0X6B)的Bit3.Bit2.Bit1三位写入MPU6050_CLOCK_PLL_YGYRO(也就是0x02)是要使能温度传感器和使用外部32.768Khz作为参考吗?
就算是
在u8 mask = (0xFF << (bitStart + 1)) | 0xFF >> ((8 - bitStart) + length - 1);
data <<= (8 - length);
data >>= (7 - bitStart);
算法中我也有疑惑
在配置“陀螺仪最大量程 +-1000度每秒”和“加速度度最大量程 +-2G”时
因为是Bit4.Bit3两位(MPU6050_PWR1_CLKSEL_BIT=4,MPU6050_PWR1_CLKSEL_LENGTH=2)算法刚好能用,可是在配置电源管理寄存器1时好像算法有误啊
|
|