dumzair 发表于 2012-12-26 21:34

S3C2440+ADXL345(加速度传感器) IIC通信,求助。

开发板当主机,传感器模块为从机,标准速度1kbps。
问题描述:初始化ADXL345后再从被初始化的芯片寄存器读取数据,正确,但是读出的三轴测量数据却总是不正确。
程序是从网上的一个单片机模拟IIC读取芯片的程序和2440附带的ADS实验资料里的一个与AT24C02进行IIC通信改写的。
请教一下各位,问题出在哪里呢?

dumzair 发表于 2012-12-26 21:43

对了,补充一点:芯片是OK的,用单片机可以正确显示的。

阿南 发表于 2012-12-26 23:27

从描述看,IIC通信应该没问题了。可能是寄存器设置还是有些问题

xunchangreng 发表于 2012-12-27 08:00

你的IIC总线上SCL是多少KHz? 100,还是400? 还有设置的数据输出率是多少?

dumzair 发表于 2012-12-27 09:13

阿南 发表于 2012-12-26 23:27 static/image/common/back.gif
从描述看,IIC通信应该没问题了。可能是寄存器设置还是有些问题

完全按照单片机的程序设置,当然数据输出速率(DOR)比它大而已,但是SCL100KHz,DOR是200Hz,符合比例呢。。

dumzair 发表于 2012-12-27 09:14

xunchangreng 发表于 2012-12-27 08:00 static/image/common/back.gif
你的IIC总线上SCL是多少KHz? 100,还是400? 还有设置的数据输出率是多少?

100KHz,DOR是200Hz,我是用ADS编译好,生成.bin文件下载到SDRAM里跑的,串口打印数据。。

dumzair 发表于 2012-12-27 09:36

本帖最后由 dumzair 于 2012-12-27 09:40 编辑

我把源码附件了,大家帮忙看看吧,非常感谢~那个图片是Z轴向下,读出的数据(非常蛋疼的数据)。。

jlass 发表于 2012-12-27 12:57

从表述来看应该是ADXL345使用不当。
可惜我没用过这可料,只能帮顶了。

shell.albert 发表于 2012-12-27 13:13

感觉还是寄存器配置有问题。
使用单片机的话,你肯定使用的是I/O 模拟时序
而使用ARM就使用I2C控制器,需要操作的就只有寄存器了
实在不行就用示波器抓波形分析吧。

ymind 发表于 2012-12-27 13:28

软件应该没问题,速率这么低,访问ADXL345又不用repeat-start等特殊时序。看看原理图?

dumzair 发表于 2012-12-27 19:12

jlass 发表于 2012-12-27 12:57 static/image/common/back.gif
从表述来看应该是ADXL345使用不当。
可惜我没用过这可料,只能帮顶了。 ...

:) 哈哈,没关系的,谢谢~。。

dumzair 发表于 2012-12-28 10:09

哎。。还是不对。。算了,结贴了。。

清霜一梦 发表于 2013-9-2 17:43

你看参考程序:
dat <<= 1;
      SCL = 1;                //拉高时钟线
      Delay5us();             //延时
      dat |= SDA;             //读数据               
      SCL = 0;                //拉低时钟线
      Delay5us();   
也就是说这个时候的scl是100K hz
好,在看initial里面的设定:
Single_Write_ADXL345(0x2C,0x08);   //速率设定为12.5 参考pdf13页
这个设定对应的输出速率是25
这个参考程序在c52上正常显示了(没有验证显示是不是正确的)
好,问题来了
依据P17 里面table11上面几行里面说的scl为400K 对应的数据传输速率设定为800hz。那么以此类推参考程序中的scl是100K ,就应该是200hz。可是参考程序里的initial里设定却是50.让人费解啊。

清霜一梦 发表于 2013-9-2 17:45

参考程序里的initial里设定却是25.说错了一句
页: [1]
查看完整版本: S3C2440+ADXL345(加速度传感器) IIC通信,求助。