|
发表于 2013-10-24 13:39:30
|
显示全部楼层
john800422 发表于 2013-10-24 12:49
連續讀取的話,先讀出來的是低 8 寄存器
不知道是否是這個原因?
我的也是一样的
你帮我看看 是什么情况
LSM303 低8位 3轴加速计正常
但是高8位却是乱码
为什么呢? 静止不懂的时候 高8位应该是零才对吧
因为是16位的 高8位有数据的话 左移8位的时候 数值变得很大了
有没有出现这情况的?
- void LSM303A_Init( void )
- {
-
- Single_Write(LSM303A_I2C_ADDR,LSM303A_CTRL_REG1,0x27);
- delay_ms(5);
- Single_Write(LSM303A_I2C_ADDR,LSM303A_CTRL_REG4,0x40);
- delay_ms(5);
- temp=Single_Read(LSM303A_I2C_ADDR,LSM303A_CTRL_REG1);
- printf("DS: %2x\n",temp);
- }
- 初始化 返回寄存器设置是正确的。
- void LSM303A_Read_Multiple_printf(void)
- {
- unsigned char ACC_Data[6];
- int Ax = 0;
- int Ay = 0;
- int Az = 0;
-
- ACC_Data[0]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_L);
- ACC_Data[1]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_H);
- ACC_Data[2]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_L);
- ACC_Data[3]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_H);
- ACC_Data[4]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_L);
- ACC_Data[5]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_H);
- // Ax = (int) ((ACC_Data[1]&0x0F) << 8) + ACC_Data[0];
- // Ay = (int) ((ACC_Data[3]&0x0F) << 8) + ACC_Data[2];
- // Az = (int) ((ACC_Data[5]&0x0F) << 8) + ACC_Data[4];
-
- Ax = ACC_Data[1];
- Ay = ACC_Data[3];
- Az = ACC_Data[5];
- printf("LSM:Ax: %d,Ay: %d,Az: %d\n",Ax,Ay,Az);
- }
- 静止状态下 打印信息 很乱
- LSM:Ax: 192,Ay: 16,Az: 112
- LSM:Ax: 128,Ay: 64,Az: 64
- LSM:Ax: 224,Ay: 240,Az: 176
- LSM:Ax: 160,Ay: 0,Az: 48
- LSM:Ax: 160,Ay: 176,Az: 176
- LSM:Ax: 144,Ay: 0,Az: 16
- LSM:Ax: 192,Ay: 0,Az: 128
- LSM:Ax: 144,Ay: 16,Az: 80
- LSM:Ax: 176,Ay: 16,Az: 224
- LSM:Ax: 224,Ay: 32,Az: 0
- LSM:Ax: 96,Ay: 144,Az: 208
- LSM:Ax: 160,Ay: 208,Az: 48
- LSM:Ax: 0,Ay: 160,Az: 112
- LSM:Ax: 64,Ay: 224,Az: 96
- LSM:Ax: 208,Ay: 240,Az: 160
- LSM:Ax: 32,Ay: 224,Az: 160
- LSM:Ax: 224,Ay: 208,Az: 208
- LSM:Ax: 96,Ay: 208,Az: 112
- LSM:Ax: 0,Ay: 160,Az: 80
- LSM:Ax: 48,Ay: 32,Az: 208
- LSM:Ax: 96,Ay: 160,Az: 112
- LSM:Ax: 48,Ay: 32,Az: 192
- LSM:Ax: 64,Ay: 160,Az: 0
- LSM:Ax: 64,Ay: 32,Az: 144
- LSM:Ax: 80,Ay: 176,Az: 192
- 同样一个读取函数
- void LSM303A_Read_Multiple_printf(void)
- {
- unsigned char ACC_Data[6];
- int Ax = 0;
- int Ay = 0;
- int Az = 0;
-
- ACC_Data[0]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_L);
- ACC_Data[1]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_X_H);
- ACC_Data[2]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_L);
- ACC_Data[3]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Y_H);
- ACC_Data[4]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_L);
- ACC_Data[5]=Single_Read(LSM303A_I2C_ADDR,LSM303A_OUT_Z_H);
- // Ax = (int) ((ACC_Data[1]&0x0F) << 8) + ACC_Data[0];
- // Ay = (int) ((ACC_Data[3]&0x0F) << 8) + ACC_Data[2];
- // Az = (int) ((ACC_Data[5]&0x0F) << 8) + ACC_Data[4];
-
- Ax = ACC_Data[0];
- Ay = ACC_Data[2];
- Az = ACC_Data[4];
- printf("LSM:Ax: %d,Ay: %d,Az: %d\n",Ax,Ay,Az);
- }
- 静止状态下 打印信息很正确
- LSM:Ax: 5,Ay: 2,Az: 67
- LSM:Ax: 4,Ay: 2,Az: 66
- LSM:Ax: 4,Ay: 3,Az: 66
- LSM:Ax: 4,Ay: 3,Az: 66
- LSM:Ax: 4,Ay: 3,Az: 65
- LSM:Ax: 4,Ay: 3,Az: 66
- LSM:Ax: 4,Ay: 3,Az: 66
- LSM:Ax: 5,Ay: 2,Az: 66
- LSM:Ax: 4,Ay: 2,Az: 67
- LSM:Ax: 6,Ay: 2,Az: 66
- LSM:Ax: 4,Ay: 2,Az: 66
- LSM:Ax: 4,Ay: 2,Az: 67
- LSM:Ax: 4,Ay: 3,Az: 67
- LSM:Ax: 5,Ay: 3,Az: 66
- LSM:Ax: 5,Ay: 3,Az: 67
- LSM:Ax: 5,Ay: 2,Az: 66
- LSM:Ax: 4,Ay: 3,Az: 68
- LSM:Ax: 5,Ay: 3,Az: 66
- LSM:Ax: 4,Ay: 2,Az: 65
- LSM:Ax: 4,Ay: 2,Az: 66
- LSM:Ax: 4,Ay: 2,Az: 65
- LSM:Ax: 4,Ay: 2,Az: 66
- LSM:Ax: 5,Ay: 2,Az: 66
复制代码 |
|