寄存器配置如下所示,对应于LIS3DH的ctrl_reg 1-5。在配置之后我回读了ctrl_reg,结果是正确的,这意味着寄存器被编程为我想要的值。我期望的结果是我可以从OUT_X_L(28h) - OUT_Z_H(2Dh)获得12位数据。但结果是我只能从那些寄存器中获得8位数据。数据输出寄存器的MSB始终为零。我用来读取加速度数据的功能也在下面复制,其中i2c_read的最后一个参数为1 meas burst read。我想知道是什么问题阻止我获得12位输出数据。谢谢。
uint8_t ctrl_reg [5] =
{/ *启用x,y,z加速度检测,正常模式,400HZ odr * /
0x77,/ *启用AOI1的高通滤波器* /
0x09,/ *在INT1上启用IA1 * /
0x40,/ *满刻度2g,高分辨率
0x08,/ * Fifo禁用* /
为0x00
}; void accel_read(int16_t * accel)
{
uint8_t buffer [6];
i2c_read(OUT_X_L,缓冲液,6,1);
加速度[0] =(缓冲液[1];< 8)|缓冲器[0];
加速度[1] =(缓冲液[3]<< 8)|缓冲液[2];
加速度[2] =(缓冲液[5]<< 8)|缓冲液[4];
}
以上来自于谷歌翻译
以下为原文
The register configura
tion is as below array which corresponds to ctrl_reg 1-5 of LIS3DH. I read back the ctrl_reg after configure it, the result is correct which means the register is programmed to the value as I wanted. The result I expected is that I could get 12-bit data from OUT_X_L(28h) - OUT_Z_H(2Dh). But the result is I could only get 8-bit data from those registers. The MSB's of the data output registers are always zero. The function I am using to read the acceleration data is copied below as well, where the last parameter of i2c_read as 1 meas burst read. I'm wondering what the problem is to prevent me from getting 12-bit output data. Thanks.
uint8_t ctrl_reg[5]=
{/* Enable x,y,z accelaration detect, normal mode, with 400HZ odr */
0x77,/* Enable high pass filter for AOI1 */
0x09,/* Enable IA1 on INT1 */
0x40,/* Full Scale 2g, high resolution
0x08,/* Fifo Disabled */
0x00
};void accel_read(int16_t* accel)
{
uint8_t buffer[6];
i2c_read(OUT_X_L,buffer,6,1);
accel[0]=(buffer[1]<<8)|buffer[0];
accel[1]=(buffer[3]<<8)|buffer[2];
accel[2]=(buffer[5]<<8)|buffer[4];
}