基于mc3253加速度的调试

1.调试的芯片是mc3253

2.通过i2c配置寄存器

3.调试过程

(1)初始化i2c,i2c的读写速率

(2)i2c的读写函数,读写函数基本相同,设备从地址不同

(3)从设备的地址。

(4)先读取芯片的id,看i2c是否能通讯,从设备的地址是否正常,芯片的焊接是否有问题。

(5)开始调试值,这个寄存器的值,一般会有,主要调试阈值,采样的频率,工作模式,中断等。

 

8.24-------------------------------------------------------------------------------------------------------------

附一张初始化的图片:

现在调试的过程就是,用的在nordic上的已经调试好的加速度的代码,移植到emf32这个单片机平台上。然后设置寄存器,当发生敲击事件触发中断。

 

敲击加速度传感器,发现未发生中断。

问题分析:

基本情况是:muc + acc,通过i2c进行通信。

 

一开始测试通信是否可行,发现通过i2c可以发送数据,读取数据。i2c ok,

再读取xyz的数值,发现没有数据。

开始觉得是芯片坏了,或者寄存器的值没有设置对。然后开始扒芯片手册,一个一个对寄存器。

 

1.首先是芯片的寄存器,为了兼容别的芯片,这个寄存器的值是一定需要的。

mc3256_read_byte2(0x32, &reg);,//寄存器0x32,读取的值放入reg中

 

2,.然后是设置芯片的模式设置,要修改寄存器的值,芯片的状态一定要是standby,否则修改不成功。

reg=(0x43);

mc3256_write_byte2(0x07, reg);

 

注意:如果要芯片工作且能触发中断,则模式要修改为wake

reg=0x41; //该值将中断脚拉高

//reg=0xC1; //该值可以将中断脚拉低

mc3256_write_byte2(0x07, reg);

注:通过i2c修改这两个寄存器的值,来确定中断脚是否有焊接问题,如果中断脚能被拉高拉低,则确定焊接无关,最后测试该脚一直是低状态。

 

3.修改要触发的中断种类,这个寄存器表示,设置为什么中断,当达到条件时就会触发,相当于使能某个种类的中断,比如敲击中断,摇晃中断,跌落中断等。

reg=0x04;//(reg|0x10); // use tap int type

mc3256_write_byte2(0x06, reg);

 

4.设置xyz探测的使能,此处表示xyz轴有变化的检测

//tap dected on x y and z-axis

reg=0xE0;

mc3256_write_byte2(0x09, reg);//

 

5.阈值的设置,对中断产生的一个阈值,一般通过调节这个值来

//set tap threshold

reg=0x11;///0-ff

mc3256_write_byte2(0x32, reg);//

 

6.然后读取一次中断标志寄存器,清一下中断。

//mdelay(100);

mc3256_read_byte2(0x03, &reg);// read 0x03 once ,avoiding register value is not 0x0

 

7.再最后将芯片的工作模式由standby修改为wakeup

//wake mode

reg=0x41;

//reg=0xC1;

mc3256_write_byte2(0x07, reg);

 

8.对完这些寄存器后,发现有个寄存器设置的不对,就是检测这个xyz的,修改完之后,读取xyz轴的坐标,发现果然可以读取到值,然后在翻转芯片等,发现数值都是正确的,满心以为调试ok

reg=0x02; -》修改为0x03

mc3256_write_byte2(0x20, reg);//8bit 2g

发现敲击还是没有中断,整个人都不好了。

 

开始将mcu和加速度芯片连接的中断脚分开,分别测量装填,mcu中断脚高电平,加速度中断脚低电平,(此处测量的是引到mcu的线路上,并不是直接连接acc芯片的引脚)

 

通过i2c发送数据,将中断脚拉低,发现问题,中断脚未焊好。这里就是往上述的0x07里面写入不同的值。

 

从新焊接后,敲击,发生中断事件,muc这边中断设置为下降沿触发。每次触发后,清除中断。

 

一切都写好之后,发现只有在初始化的时候,才会触动中断,接着又不行了,发现acc的中断标志位已经被清除了,但是事实上就是中断未清除,后来打印这个中断状态寄存器的值(0x03)发现中断时是被清楚的,但是就是不触发中断,后来将读取中断寄存器的值读取时间太快了(每次触发中断之后都去读取这个中断标志,这个时间太短,后来改为定时器3秒后去读取),后来发现一切都可以了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值