402261102 发表于 2012-12-15 22:36:36

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


没有人出现过这个情况啊。求助下~今晚在看看,能不能解决。

xlwuhai 发表于 2013-5-23 20:21:03

查一下DataFormat寄存器中的Justify

Cortex_M3 发表于 2013-5-23 20:32:17

哇!
你这个有点大啊

Cortex_M3 发表于 2013-5-23 20:38:27

给你上传一个IIC 读取的

(ADXL345驱动函数.RAR)

STM32 下模拟IIC 驱动
页: [1]
查看完整版本: ADXL345读出数据,但是怎么这么大