刚刚完成了一项工作,眼看着吃饭的时间就要到了,就写一篇最近在开发ADXl345中遇到的问题的博客吧!
应用的MCU是freescale的K60,为了节省开发时间,直接在网上买的核心板,这样正好应用他们写的固件库。因为之前有做8位和16位的MCU,所以直接用库写不是太难。可是……
问题就是出现在库的理解上。好像前面有点跑题(赶紧拉回来),转入正题。ADXL345的接口有两种:3线或者4线SPI、I2C。因为要根据ADXL345输出数据的频率确定通信的频率,所以通信的频率就不是很高,所以在此使用I2C开发,就相对简单。开发中遇到的问题主要有这样几个:
从机的地址问题。说起来就是伤呀!我使用的固件库,是应用7位的地址,也就是将一般的8位地址左移一位之后的值。而我看到ADXL345给的是8位的地址,这样去读,怎么也读不出数据。后来根据freescale发的最新的固件库里对于一个三轴加速度计操作,其中有一个将地址左移的操作,这才将数据读出来。希望看到文章的孩纸不要再犯同样的错误呀!55555……
读写数据延时问题。写数据延时的问题,在我之前转发的几篇博客中已经有介绍。接下来主要的问题就是读取数据的问题,根据adxl datasheet中的介绍,我尝试直接读取6个寄存器,只是在复位之后第一次能够读取,后面读到的就都是0了,看到网上有人说这个问题,但是没有解决。我在ADI的官方的论坛提了这个问题,还没有给出回复。希望谁知道告诉我,把我这疑问解决!每次只是读取一个数据之后也要加适当的延时,负责读取的数据不对(在这里我加的延时是100us,仅供参考,嘿嘿)。
还有一个问题就是校准的问题了,将器件平放(校准X、Y)、垂直立着(校准Z),根据读取的数据进行偏移补偿,这样就OK了。
嗯嗯,到了吃饭的时间了,餐厅的干活!