ADXL345读出数据,但是怎么这么大
驱动写好了,就是参考网上最多的那个模式。主要代码就这些:
/*初始化ADX345*/
void Init_ADX345(void)
{
I2C_WriteReg(0x31,0x0B); //测量范围,正负16g,13位模式
I2C_WriteReg(0x2C,0x08); //速率设定为12.5 参考pdf13页
I2C_WriteReg(0x2D,0x08); //选择电源模式 参考pdf24页
I2C_WriteReg(0x2E,0x80); //使能 DATA_READY 中断
I2C_WriteReg(0x1E,0x00); //X 偏移量 根据测试传感器的状态写入pdf29页
I2C_WriteReg(0x1F,0x00); //Y 偏移量 根据测试传感器的状态写入pdf29页
I2C_WriteReg(0x20,0x05); //Z 偏移量 根据测试传感器的状态写入pdf29页
}
/*连续读取加速度数据*/
void Multiple_read_ADX345(void)
{
unsigned char i;
I2C_Start();
I2C_Send(SlaveAddress_ADX345);
I2C_Send(0x32);
I2C_Start();
I2C_Send(SlaveAddress_ADX345+1);
for(i=0;i<6;i++)
{
BUF = TWDR;
if(i == 5)
I2C_NoneAck();
else
I2C_Ack();
}
I2C_Stop();
}
//发送数据
void Send_XYZ(unsigned char xyz)
{
float temp;
int xyz_data;
switch (xyz)
{
case 0:Send_Data(X_BUF);
xyz_data = (BUF<<8)+BUF;
break;
case 1:Send_Data(Y_BUF);
xyz_data = (BUF<<8)+BUF;
break;
case 2:Send_Data(Z_BUF);
xyz_data = (BUF<<8)+BUF;
break;
default : break;
}
if(xyz_data<0)
{
xyz_data = -xyz_data;
Uart_Tx('-');
}
else Uart_Tx(' ');
temp = (float)xyz_data*3.9;
dis_data =ftoa(temp, 0);
Send_Data(dis_data);
}
但是读出来数据不对劲啊,模块放那没有动,读出来的数据怎么是这样:
X : 5643.2998046Y : 10982.399414Z : 20966.4003906
X : 5643.2998046Y : 11980.7998046Z : 21964.7988281
X : 5643.2998046Y : 11980.7998046Z : 21964.7988281
X : 5643.2998046Y : 11980.7998046Z : 20966.4003906
X : 7640.0996093Y : 11980.7998046Z : 19968.0
X : 5643.2998046Y : 11980.7998046Z : 20966.4003906
X : 6641.699707 Y : 11980.7998046Z : 21964.7988281
X : 5643.2998046Y : 11980.7998046Z : 19968.0
X : 6641.699707 Y : 11980.7998046Z : 19968.0
X : 6641.699707 Y : 10982.399414Z : 21964.7988281
X : 5643.2998046Y : 10982.399414Z : 20966.4003906
X : 4644.899414 Y : 11980.7998046Z : 20966.4003906
X : 5643.2998046Y : 11980.7998046Z : 20966.4003906
X : 6641.699707 Y : 10982.399414Z : 20966.4003906
X : 5643.2998046Y : 10982.399414Z : 19968.0
X : 6641.699707 Y : 10982.399414Z : 20966.4003906
X : 6641.699707 Y : 10982.399414Z : 19968.0
X : 5643.2998046Y : 11980.7998046Z : 19968.0
X : 6641.699707Y : 10982.399414Z : 20966.4003906
X : 5643.2998046Y : 11980.7998046Z : 20966.4003906
X : 5643.2998046Y : 10982.399414Z : 20966.4003906
X : 6641.699707Y : 10982.399414Z : 20966.4003906
X : 5643.2998046Y : 10982.399414Z : 21964.7988281
X : 6641.699707Y : 10982.399414Z : 20966.4003906
没有人出现过这个情况啊。求助下~今晚在看看,能不能解决。 查一下DataFormat寄存器中的Justify 哇!
你这个有点大啊 给你上传一个IIC 读取的
(ADXL345驱动函数.RAR)
STM32 下模拟IIC 驱动
页:
[1]