MMA8452Q Triple Axis Accelerometer

The MMA8452Q is a low-power, three-axis, capacitive MEMS accelerometer with 8 or 12 bits of resolution. The surface mount chip is located on a break out board with inputs to ground, power, I2C, and two external interrupts pins.

Hello World

Import programMMA8452_Demo

The main.cpp program below demonstrates a simple way to interface with the MMA8452 accelerometer. The function reads in the acceleration data in the X, Y, and Z directions and displays them through a serial com port on a PC. The Putty Output figure below shows the output of the accelerometer using Putty. The program also dims or brightens the mbed LEDs 1-3 based on whether or not they are at 'level'( 0 Gs) or above respectively. The video below previews the code in action.

Library

Import libraryMMA8452

Library for driving the MMA8452 accelerometer over I2C

Datasheet

http://www.freescale.com/files/sensors/doc/data_sheet/MMA8452Q.pdf

Notes

Wiring

MMA8452Q attached to mbed on a breadboard.
mbed-triple

MMA8452Q schematic.
Schematic

Pinout Table

MMA8452Q pinsMbed pins
1 VccVout (3.3V)
2 SDAP28 (SDA)
3 SCLP27 (SCL)
4 I1Any DigitalOut Pins
5 I2Any DigitalOut Pins
6 GNDGND

API Documentation

Import library

Public Member Functions

MMA8452 (PinName sda, PinName scl, int frequency)
Create an accelerometer object connected to the specified I2C pins.
~MMA8452 ()
Destructor.
int activate ()
Puts the MMA8452 in active mode.
int standby ()
Puts the MMA8452 in standby.
int getDeviceID (char *dst)
Read the device ID from the accelerometer (should be 0x2a)
int getStatus (char *dst)
Read the MMA8452 status register.
int readXYZRaw (char *dst)
Read the raw x, y, an z registers of the MMA8452 in one operation.
int readXRaw (char *dst)
Read the raw x register into the provided buffer.
int readYRaw (char *dst)
Read the raw y register into the provided buffer.
int readZRaw (char *dst)
Read the raw z register into the provided buffer.
int readXYZCounts (int *x, int *y, int *z)
Read the x, y, and z signed counts of the MMA8452 axes.
int readXCount (int *x)
Read the x axes signed count.
int readYCount (int *y)
Read the y axes signed count.
int readZCount (int *z)
Read the z axes signed count.
int readXYZGravity (double *x, double *y, double *z)
Read the x, y, and z accelerations measured in G.
int readXGravity (double *x)
Read the x gravity in G into the provided double pointer.
int readYGravity (double *y)
Read the y gravity in G into the provided double pointer.
int readZGravity (double *z)
Read the z gravity in G into the provided double pointer.
int isXYZReady ()
Returns 1 if data has been internally sampled (is available) for all axes since last read, 0 otherwise.
int isXReady ()
Returns 1 if data has been internally sampled (is available) for the x-axis since last read, 0 otherwise.
int isYReady ()
Returns 1 if data has been internally sampled (is available) for the y-axis since last read, 0 otherwise.
int isZReady ()
Returns 1 if data has been internally sampled (is available) for the z-axis since last read, 0 otherwise.
int readRegister (char addr, char *dst)
Reads a single byte from the specified MMA8452 register.
int readRegister (char addr, char *dst, int nbytes)
Reads n bytes from the specified MMA8452 register.
int writeRegister (char addr, char data)
Write to the specified MMA8452 register.
int writeRegister (char addr, char *data, int nbytes)
Write a data buffer to the specified MMA8452 register.

You need to log in to post a discussion