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; | |||||||||||||
} |
引用: st94wo 发表于 2018-11-29 17:27
您好。因为读取FIFO,使FIFO中的sample比samples bits的值更低时,watermark会自动清零。那句话说多读一些,这样才能发挥FIFO的作用。如果读的少,效果和data_ready区别不大了。比如它下面的例子,sample bits设为6,读取6个sample。请您尝试读取FIFO_STATUS,检查是否出现这个情况时条目大于或者等于sample bits。 ...
引用: Eleven________ 发表于 2018-11-29 17:41
Dear Rock,
多谢您的回复, 我再按照您的说法试试问题所在;
另外我想请问, 我有两个板子都是用ADXL345做计步器, 同样的算法, 一个板子ADXL345用2.5V的电压, 计算的结果好像比另外一个板子准确一点, 另外一个板子ADXL345用的是2.1V电压, 联想到最初的ADXL331好像是模拟输出, 请教一下,是不是电压不同, 对结果有 ...
更多回帖