return data;
}
/*
函数名称:AD_Read_Multi_Byte
函数功能:一次读取多个字节
函数入口:reg :要读取的寄存器的起始地址
* buf:存放数据缓存
len:要读取的数据长度
函数出口:
*/
void AD_Read_Multi_Byte(uint8 reg, uint8 *buf,uint8 len)
{
uint8 i;
IIC_Start();
IIC_Send_Byte(WRITE_CMD);//发送写命令
IIC_Wait_Ack();
IIC_Send_Byte(reg);
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(READ_CMD);//发送读命令
IIC_Wait_Ack();
for(i=0;i
if(AD_Read_One_Byte(0)==0xe5)
{
AD_Wtite_One_Byte(DATA_FORMAT,0x69);
AD_Wtite_One_Byte(BW_RATE,0x09);
AD_Wtite_One_Byte(POWER_CTL,0x28);
AD_Wtite_One_Byte(INT_ENABLE,0x80);
AD_Wtite_One_Byte(INT_MAP,0x80);
AD_Wtite_One_Byte(OFSX,0x00);
//测量范围,正负 4g,全分辨率 11 位模式
//速率设定为 50HZ 参考 pdf13 页
//选择电源模式 参考 pdf24 页
//关掉中断
//关掉中断
//X 偏移量 根据测试传感器的状态写入
pdf29 页
AD_Wtite_One_Byte(OFSY,0x00);
//Y 偏 移 量 根 据 测 试 传 感 器 的 状 态 写 入
pdf29 页
AD_Wtite_One_Byte(OFSZ,0x00);
//Z 偏 移量 根 据测 试 传感 器 的状 态 写入
pdf29 页
return 0;
}
return 1;
}
/*
函数名称 :Read_Axis
函数功能:读取 xyz 轴的加速度
函数入口:*x:x 轴数据
*y:y 轴数据
*z:z 轴数据
函数出口:无
*/
void Read_Axis(int16 *data)
{
uint8 buf[6]={0};
AD_Read_Multi_Byte(DATAX0, buf,6);
*data=(int16)(((u16)buf[1]<<8)+buf[0]);
*(data+1)=(int16)(((u16)buf[3]<<8)+buf[2]);
*(data+2)=(int16)(((u16)buf[5]<<8)+buf[4]);
printf("%d,%d,%d\n",*data,*(data+1),*(data+2));
//
}
void Filter_AD_Data_1(void)
{
uint8 i;
int16 abs[2][3];
Axis_Flag=Select_Axis(Axis_ResultA);
if(Sample_Timer<99)
{
Sample_Timer++;
}
//有效计步间隔时间
if(Sum_Time<149)
{
Sum_Time++;
}
else
{
Sum_Step=0;
//进入搜索模式
Sum_Flag=0;
Sum_Time=0;
}
if(Decide_Sample_No<49)
{
//更新最值
Judge_Extreme_Ad();
Decide_Sample_No++;
}
else
{
Cal_Threhold_Precision(Axis_Threhold,Axis_Precision);
//交换最值以便下个周期更换最值
Exchage_Extrem_Reg();
Decide_Sample_No=0;
}
for(i=0;i<3;i++)
{
//寻找波峰
if(Step_P_Flag[i]==0)//找波峰的起点
{
if(Axis_ResultA[i]<=Step_Startmin[i])
{
}
else
{
Step_Startmin[i]=Axis_ResultA[i];
//跳入寻找最大值
Step_Max[i]=Axis_ResultA[i];
Step_P_Flag[i]=1;
}
//
{
//
if(i==Axis_Flag)
//printf("%d:%d,%d,%d\n",Step_P_Flag[i],Axis_ResultA[0],Axis_ResultA[1],Axis_ResultA[2]);