ADI 技术
直播中

李林

7年用户 187经验值
私信 关注
[问答]

ADXL345中断清零问题

尊敬的技术支持人员,  我在使用ADXL345做计步器设计的时候, 碰到了以下问题;
非常着急, 请帮忙看看, 如何解决?
目前我们用ADXL345设计计步器, 已经到了测试阶段; 在测试阶段偶尔能发现计步会停止的现象;
  经过查证, 发现是ADXL345WaterMark中断输出一直为低电平不能恢复到高电平;
  环境说明: ADXL3452.1V供电, I2C接口;





  输出两个中断, INT1FIFOWatermark中断, INT2为测试静止和活动中断;
   中断设置为低电平有效;
   
   中断处理为:

if((FirmBitFlag.BitFlag.ibitA345FIFO == 1) || (P345INT1 == 0))
    {    //读ADXL345 INT SOURCE寄存器   
    if(Adxl345ReadRegister(Adxl345_INT_SOURCE) & 0x02)
    {
    Adxl345DataAnalysis();//12.5ms执行速度;   
    }
    FirmBitFlag.BitFlag.ibitA345FIFO = 0;   
    }   
    if((FirmBitFlag.BitFlag.ibitA345ACT  == 1) ||(P345INT2 == 0))
    {
    if((Adxl345ReadRegister(Adxl345_INT_SOURCE) & 0x18) != 0)   
    {
    //如果判断到是由INACtiVITITY产生的中断;则进入Sleep状态;
    ReadValue = Adxl345ReadRegister(Adxl345_TAP_STATUS);
    if((ReadValue & 0x08) != 0)   
    Adxl345ParameterSet(Adxl345_POWER_CTL,0x3C);
    //如果是由ACTIVITY产生的中断;让ADXL345进入测量状态;
    else //if((ReadValue & 0x10) != 0)
    {   
    Adxl345ParameterSet(Adxl345_POWER_CTL,0x0);
    Adxl345ParameterSet(Adxl345_FIFO_CTRL,0x40+FIFO_NUMBER);   
    Adxl345ParameterSet(Adxl345_INT_ENABLE,0x1A);//静止,活动中断和水印中断使能;   
    Adxl345ParameterSet(Adxl345_POWER_CTL,0x38);   
   
    }   
    }
   
    FirmBitFlag.BitFlag.ibitA345ACT = 0;
    }   


   

  现在发现INT1变低后不能变高, 情况是偶尔发生, 所以不好抓取数据, 想问一下贵司的工程人员有没有碰到类似情况;请指教一下;

回帖(4)

张博

2018-11-29 09:58:45
您好。当读取FIFO,使得其中内容返回到比samples bits的值更低时,水印位自动清零。您可以尝试通过FIFO_STATUS来检查FIFO状态。也请您检查I2C通信速度和ADXL345的数据输出速率,保证通信速度足够用来读出FIFO中的采样。请参考AN1025
举报

张博

2018-11-29 10:12:38

您好。因为读取FIFO,使FIFO中的sample比samples bits的值更低时,watermark会自动清零。那句话说多读一些,这样才能发挥FIFO的作用。如果读的少,效果和data_ready区别不大了。比如它下面的例子,sample bits设为6,读取6个sample。请您尝试读取FIFO_STATUS,检查是否出现这个情况时条目大于或者等于sample bits。
举报

李林

2018-11-29 10:27:14
引用: st94wo 发表于 2018-11-29 17:27
您好。因为读取FIFO,使FIFO中的sample比samples bits的值更低时,watermark会自动清零。那句话说多读一些,这样才能发挥FIFO的作用。如果读的少,效果和data_ready区别不大了。比如它下面的例子,sample bits设为6,读取6个sample。请您尝试读取FIFO_STATUS,检查是否出现这个情况时条目大于或者等于sample bits。 ...

Dear Rock,
    多谢您的回复, 我再按照您的说法试试问题所在;
    另外我想请问, 我有两个板子都是用ADXL345做计步器, 同样的算法, 一个板子ADXL345用2.5V的电压, 计算的结果好像比另外一个板子准确一点, 另外一个板子ADXL345用的是2.1V电压, 联想到最初的ADXL331好像是模拟输出, 请教一下,是不是电压不同, 对结果有一定的影响呢?
 
 
 
 
djdym
 
发件人: adi_rock
发送时间: 2013-05-03 14:45
收件人: 先生 董
主题:  Re: ADXL345 中断清零问题 -
中文技术支持
Re: ADXL345 中断清零问题
created by adi_rock in MEMS和传感器专区 - 查看全部讨论
 
 
您好。因为读取FIFO,使FIFO中的sample比samples bits的值更低时,watermark会自动清零。那句话说多读一些,这样才能发挥FIFO的作用。如果读的少,效果和data_ready区别不大了。比如它下面的例子,sample bits设为6,读取6个sample。请您尝试读取FIFO_STATUS,检查是否出现这个情况时条目大于或者等于sample bits。
通过回复电子邮件回复该消息 -或- 转到以下位置上的消息
 
如您想暂停对某个讨论的关注,请您点击该讨论帖并在右手菜单处点击“停止跟踪”。请您务必在登陆状态下进行设置。
在 MEMS和传感器专区 内开始新讨论,通过 电子邮件 或在以下位置上:中文技术支持
举报

张博

2018-11-29 10:44:26
引用: Eleven________ 发表于 2018-11-29 17:41
Dear Rock,
    多谢您的回复, 我再按照您的说法试试问题所在;
    另外我想请问, 我有两个板子都是用ADXL345做计步器, 同样的算法, 一个板子ADXL345用2.5V的电压, 计算的结果好像比另外一个板子准确一点, 另外一个板子ADXL345用的是2.1V电压, 联想到最初的ADXL331好像是模拟输出, 请教一下,是不是电压不同, 对结果有 ...

Hi djdym,
在供电电压是2.5V的情况下,传感器的偏移、灵敏度、噪声等都会有所变化。您在2.1V供电时,偏移和灵敏度会发生一些小的变化。噪声的变化,您可以参考数据手册图53,Normalized Noise vs. Supply Voltage, VS
其他指标的变化可以参考手册OPERATION AT VOLTAGES OTHER THAN 2.5 V部分中的详细内容
举报

更多回帖

发帖
×
20
完善资料,
赚取积分