为什么ADXL345的读数不正确?

[复制链接]
11011|41
 楼主| 与时俱进 发表于 2013-7-11 11:07 | 显示全部楼层 |阅读模式
从网上掏了ADXL345模块,与单片机连接,用单片机I/O模拟4线制SPI,读取加速度值。
设置测量范围16g,数据又对齐,DATAREADY中断,程序调试后,正确地读到芯片的ID值0xe5,并且通过对xyz偏移寄存器的写读操作,证明对345的读写程序完全正常,但是读到的三轴加速度数据却不正确。
通过对读到的数据进行分析,发现一个有趣的现象:如果把 DATAx0(0x32)、 DATAx1(0x33)、DATAy0(0x34)、 DATAy1(0x35)、DATAz0(0x36)、 DATAz1(0x37)的顺序颠倒一下,即把寄存器0x37当做 DATAx0,0x36当做DATAX1......0X32当做DATAz1,三轴加速度就对了,这时为什么呀?!!
 楼主| 与时俱进 发表于 2013-7-12 12:29 | 显示全部楼层
tsdwddp 发表于 2013-7-12 14:00 | 显示全部楼层
顶一下,说两点看法,互相学习
1:SPI读寄存器顺序是否正确,
2::345是如何放置的,可将芯片水平放置,X=0,Y=0,Z=1g试一下
tsdwddp 发表于 2013-7-12 14:03 | 显示全部楼层
多半是程序逻辑问题
ayb_ice 发表于 2013-7-12 14:15 | 显示全部楼层
仔细看手册吧
 楼主| 与时俱进 发表于 2013-7-13 20:49 | 显示全部楼层
tsdwddp 发表于 2013-7-12 14:00
顶一下,说两点看法,互相学习
1:SPI读寄存器顺序是否正确,
2::345是如何放置的,可将芯片水平放置,X=0 ...

一次性的读写345多个寄存器,只能按从小到大相邻地址顺序读取,想把顺序搞错都难啊!
我已经说过,“并且通过对xyz偏移寄存器的写读操作,证明对345的读写程序完全正常”---方法是先往三个偏移寄存器写入数据,再读出出来,读出来的值与原来写入的值完全相同。因此不用怀疑我的读写子程序的正确性。
 楼主| 与时俱进 发表于 2013-7-13 20:55 | 显示全部楼层
ayb_ice 发表于 2013-7-12 14:15
仔细看手册吧

手册看得仔细呢。
“如果把 DATAx0(0x32)、 DATAx1(0x33)、DATAy0(0x34)、 DATAy1(0x35)、DATAz0(0x36)、 DATAz1(0x37)的顺序颠倒一下,即把寄存器0x37当做 DATAx0,0x36当做DATAX1......0X32当做DATAz1,三轴加速度就对了,这时为什么呀?!!”
我为什么下这个结论?因为我按照6个寄存器顺序颠倒的方式,计算加速度和倾斜角,得出的数值完全正常!因此“顺序颠倒”的结论不是空穴来风。我都怀疑我买到不完全兼容的山寨芯片。
long870912 发表于 2013-7-14 13:55 | 显示全部楼层
路过!
ayb_ice 发表于 2013-7-15 08:32 | 显示全部楼层
应该是大小端的问题吧
 楼主| 与时俱进 发表于 2013-7-15 08:50 | 显示全部楼层
ayb_ice 发表于 2013-7-15 08:32
应该是大小端的问题吧

除了大小端的问题,还有X轴数据变Z、Z变X的问题。
 楼主| 与时俱进 发表于 2013-7-15 09:09 | 显示全部楼层
当我用  ReadFromADXL345ViaSpi(0x32, 6 , BUF); //读0x32--0x37六个寄存器。
读出三轴加速度时,BUF[0]实际情况是Z轴高字节,BUF[1]是Z低字节,BUF[4]是X高字节,BUF[5]是X低字节,这跟手册上定义的三轴寄存器顺序刚好颠倒了。            
 楼主| 与时俱进 发表于 2013-8-21 12:44 | 显示全部楼层
用过的请说说。
 楼主| 与时俱进 发表于 2013-9-12 11:21 | 显示全部楼层
还是给大家汇报一下:最后通过IIC接口实验成功了!
myl593799546 发表于 2014-2-14 09:41 | 显示全部楼层
与时俱进 发表于 2013-9-12 11:21
还是给大家汇报一下:最后通过IIC接口实验成功了!

楼主怎么解决的啊,我的IIC读数不正确,ID读数正确
 楼主| 与时俱进 发表于 2014-2-14 10:23 | 显示全部楼层
本帖最后由 与时俱进 于 2014-2-14 16:20 编辑
myl593799546 发表于 2014-2-14 09:41
楼主怎么解决的啊,我的IIC读数不正确,ID读数正确

多字节数据读写的字节顺序搞错了。
guangbiao 发表于 2014-2-14 10:43 | 显示全部楼层
myl593799546 发表于 2014-2-14 16:44 | 显示全部楼层
与时俱进 发表于 2014-2-14 10:23
多字节数据读写的字节顺序搞错了。

能帮下忙吗?我用IIC读出来的数据:
静止在桌面上得读数是这样子的
x:ff9f
y:ffa3
z:0533
照道理应该是0,0,1才对吧,求指导下
myl593799546 发表于 2014-2-14 16:45 | 显示全部楼层
与时俱进 发表于 2014-2-14 10:23
多字节数据读写的字节顺序搞错了。

我怀疑是不是芯片坏了呢,如果可以的话,能贴出你的读数截图么
 楼主| 与时俱进 发表于 2014-2-14 18:37 来自手机 | 显示全部楼层
可以去AD论坛看看有关帖子http://ezchina.analog.com/community/mems
FAQ 发表于 2014-2-14 20:36 | 显示全部楼层
关注下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

75

主题

1290

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部