MMA9553L 計步器快速使用指南

來源:互聯網
上載者:User

標籤: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 計步器快速使用指南

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.