码迷,mamicode.com
首页 > 其他好文 > 详细

MMA9553L 计步器快速使用指南

时间:2015-03-01 15:45:48      阅读:325      评论:0      收藏:0      [点我收藏+]

标签:mma9553l

MMA9553L是飞思卡尔的一款计步传感器,本文就如何快速使用该传感器做一个简单介绍。
你可能还见到过MMA955xL, 它与MMA9553L是什么关系呢?简单的来说MMA955xL是一个统称,它包括MMA9550L、MMA9551L、MMA9553L和MMA9559L这几个具体型号,其实这四种传感器在硬件上都是一样的。其内部主要由ColdFire 内核、模拟前端、Flash、IIC和SPI接口等部分组成,原理框图如下图所示:
技术分享
它们的不同之处在于内部的Firmware不同,Firmware在芯片出厂时就已经固化在芯片里面了,不同的Firmware对于不同的功能。这里介绍的MMA9553L主要就用作计步器功能。
技术分享
MMA9553L和MCU之间可以通过IIC接口或者SPI接口通讯,所以使用MMA9553L的首要前提是把MCU的IIC或者SPI调通。接口调通之后就可以来操作此传感器了。
下面分析一下源代码:
首先是调用初始化函数pedometer_init(),此函数主要调用以下几个函数:

    pedometer_write_config();       // config
    pedometer_enable();         // enable pedometer
    pedometer_int0_enable();    // enable INT_O pin
    pedometer_active();         // active MMA9553
    pedometer_wakeup();   // wakeup

在此重点分析前两个函数。第一个函数 pedometer_write_config(),该函数的具体实现如下:

void pedometer_write_config(void)
{
    unsigned char Buf[]={0x15,0x20,0x00,0x10,
                           0x0C,0xE0,
                           0x13,0x20,
                           0x00,0x96,
                           0x60,0x50,
                           0xAF,0x50,
                           0x04,0x03,
                           0x05,0x01,
                           0x00,0x00};
   dvMMA9553_Write(MMA9553_Slave_Addr, MMA9553_Sub_Addr, Buf, 20);
}

此函数很简单,就是通过IIC给9553发送一条命令,命令的内容Buf数组中的20个字节 的数据。
dvMMA9553_Write()函数的第一个参数代表MMA9553L的地址,为0x4C。datasheet中有说明。
技术分享
dvMMA9553_Write()函数的第二个参数代表寄存器地址,为0x00。
发送的这一串命令:0x15,0x20,0x00,0x10,0x0C,0xE0,0x13,0x20,0x00,0x96,0x60,0x50,0xAF,0x50,0x04,0x03,0x05,0x01,0x00,0x00 具体是什么含义呢?
0x15:表示Application ID,计步器的Application ID就是0x15
技术分享
0x20:表示这条命令是Write Config command,即这条命令是用来写Configuration 寄存器的。
0x00:表示配置寄存器的偏移地址。
0x10:表示要写16字节的内容。
0x0C,0xE0,0x13,0x20,0x00,0x96,0x60,0x50,0xAF,0x50,0x04,0x03,0x05,0x01,0x00,0x00 这16字节就是写入配置寄存器中的具体内容。
配置寄存器共用8个,分别是Sleep Minimum register,Sleep Maximum register,Sleep Count Threshold register,Configuration/Step Length register,Height/Weight register,Filter register,Speed Period/Step Coalesce register,Activity Count Threshold register,每个寄存器为16 bit(2 字节),所以总共16字节。
技术分享
寄存器具体内容见《MMA9553LSWRM.pdf》文档
第二个函数 pedometer_enable(),该函数的具体实现如下:

void pedometer_enable(void)
{
    unsigned char Buf[]={0x17,0x20,0x05,0x01,0x00};
    dvMMA9553_Write(MMA9553_Slave_Addr, MMA9553_Sub_Addr, Buf, 5);
}

这次写入的命令是0x17,0x20,0x05,0x01,0x00
0x17:表示Application ID
技术分享
0x20:表示这条命令是Write Config command
0x05,0x01,0x00 这三个表示在偏移地址0x5处,写入一个字节的数据0x00
技术分享
其他几个函数也类似,都是写入一条命令,对某种Application的配置寄存进行设置。
初始化完了,现在就可以读取步数了。
通过调用pedometer_main() 函数就可以读取到步数。
该函数的实现如下:

void pedometer_main(void)
{
    unsigned char Buf[20];
    pedometer_cmd_readstatus(); // read  status
    while(1)
    {
      dvMMA9553_Read(MMA9553_Slave_Addr, MMA9553_Sub_Addr, Buf, 2);
      if(Buf[1]==0x80)
        {
        dvMMA9553_Read(MMA9553_Slave_Addr, MMA9553_Sub_Addr, Buf, 16);  
         break;
        }
    }
    m_status.StepCount = Buf[6] * 256 + Buf[7];
}

主要调用了两个函数,一是pedometer_cmd_readstatus(),这个函数的实现如下:

void pedometer_cmd_readstatus(void)
{
    unsigned char Buf[]={0x15,0x30,0x00,0x0C};
    dvMMA9553_Write(MMA9553_Slave_Addr, MMA9553_Sub_Addr, Buf, 4 );
}

}
它是发送了0x15,0x30,0x00,0x0C这条命令
0x15:表示Application ID
0x30:表示Read Status command
0x00:表示偏移地址
0x0C:表示需要读的字节数为12
之后调用dvMMA9553_Read()函数,通过IIC读取16字节的数据(4字节起始信息+12字节status register内容),读到的16字节数据如下:
技术分享

Step count register寄存器如下,通过其值可以算出步数来。
技术分享
另外还可以读取三轴加速度的值,过程与读取步数是类似的,也是先写配置寄存器,然后再读取状态寄存器。

总结如下:
操作MMA955L的关键搞清楚有两个重要的寄存器:配置寄存器状态寄存器。配置寄存器可读可写,状态寄存器只可读。
写配置寄存器,格式是:
APP_ID+20+offset+number+number字节的内容
读配置寄存器,格式为:
先发送:APP_ID+10+offset+number, 再通过IIC读number+4字节的内容,前4字节为起始信息。
读状态寄存器,格式为:
先发送:APP_ID+30+offset+number,再通过IIC读number+4字节的内容,前4字节为起始信息。
读Command 返回的内容如下:
技术分享
各个部分的含义如下:
技术分享
Error code的含义如下:
技术分享

这样分析下来操作MMA9553L还是很简单的,就是按照固定格式发送特定的命令就行了。

说明:
参考代码和使用过程中需要参考的相关文档的链接为:
MMA9553L 资料下载链接

例程的测试平台为:IAR7.2 + FRDM_KL25Z+FRDM-FXS-MULTI
FRDM-FXS-MULTI开发板上带有MMA9553L,将FRDM-FXS-MULTI开发板和FRDM_KL25Z连接在一起就可以使用了。
如果使用其他平台,只需要将dvMMA9553.c和dvMMA9553.h文件放到工程里,修改一下IIC读写函数就可以了。

MMA9553L 计步器快速使用指南

标签:mma9553l

原文地址:http://blog.csdn.net/wangwenxue1989/article/details/44002837

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!