MMA7455 accelerometer and micro:bit example

The MMA7455L is a Digital Output (I2C/SPI), low power, low profile capacitive micromachined accelerometer featuring signal conditioning, a low pass filter, temperature compensation, self-test, configurable to detect 0g through interrupt pins (INT1 or INT2), and pulse detect for quick motion detection. 0g offset and sensitivity are factory set and require no external devices. The 0g offset can be customer calibrated using assigned 0g registers and g-Select which allows for command selection for 3 acceleration ranges (2g/4g/8g). The MMA7455L includes a Standby Mode that makes it ideal for handheld battery powered electronics.

 

Features
• Digital Output (I2C/SPI)
• 3mm x 5mm x 1mm LGA-14 Package
• Self-Test for Z-Axis
• Low Voltage Operation: 2.4 V – 3.6 V
• User Assigned Registers for Offset Calibration
• Programmable Threshold Interrupt Output
• Level Detection for Motion Recognition (Shock, Vibration, Freefall)
• Pulse Detection for Single or Double Pulse Recognition
• Sensitivity (64 LSB/g @ 2g and @ 8g in 10-Bit Mode)
• Selectable Sensitivity (±2g, ±4g, ±8g) for 8-bit Mode
• Robust Design, High Shocks Survivability (5,000g)
• RoHS Compliant
• Environmentally Preferred Product
• Low Cost

 

Layout

 

Code

 

// Distributed with a free-will license.
// Use it any way you want, profit or free, provided it fits in the licenses of its associated works.
// MMA7455
// This code is designed to work with the MMA7455_I2CS I2C Mini Module available from ControlEverything.com.
// https://www.controleverything.com/content/Accelorometer?sku=MMA7455_I2CS#tabs-0-product_tabset-2
 
#include<Wire.h>
 
// MMA7455 I2C address is 0x1D(29)
#define Addr 0x1D
 
void setup()
{
// Initialise I2C communication as MASTER
Wire.begin();
// Initialise Serial Communication, set baud rate = 9600
Serial.begin(9600);
 
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select Mode control register
Wire.write(0x16);
// Measurement mode, +/- 8g
Wire.write(0x01);
// Stop I2C Transmission
Wire.endTransmission();
delay(300);
}
 
void loop()
{
unsigned int data[6];
 
// Start I2C Transmission
Wire.beginTransmission(Addr);
// Select data register
Wire.write((byte)0x00);
// Stop I2C Transmission
Wire.endTransmission();
 
// Request 6 bytes
Wire.requestFrom(Addr, 6);
 
// Read 6 bytes of data
// xAccl lsb, xAccl msb, yAccl lsb, yAccl msb, zAccl lsb, zAccl msb
if(Wire.available() == 6)
{
data[0] = Wire.read();
data[1] = Wire.read();
data[2] = Wire.read();
data[3] = Wire.read(); 
data[4] = Wire.read();
data[5] = Wire.read(); 
}
 
// Convert the data to 10-bits
int xAccl = (((data[1] & 0x03) * 256) + data[0]);
if (xAccl > 511)
{ 
xAccl -= 1024;
}
 
int yAccl = (((data[2] & 0x03)* 256) + data[2]);
if (yAccl > 511)
{
yAccl -= 1024;
}
 
int zAccl = (((data[5] & 0x03) * 256) + data[4]);
if (zAccl > 511)
{ 
zAccl -= 1024;
}
 
// Output data to serial monitor
Serial.print(" Acceleration in X-Axis is : ");
Serial.println(xAccl); 
Serial.print(" Acceleration in Y-Axis is : ");
Serial.println(yAccl); 
Serial.print(" Acceleration in Z-Axis is : ");
Serial.println(zAccl); 
delay(500); 
}

 

 

Output

Open the serial monitor window

Acceleration in X-Axis is : 256
Acceleration in Y-Axis is : 164
Acceleration in Z-Axis is : 0
Acceleration in X-Axis is : 0
Acceleration in Y-Axis is : 144
Acceleration in Z-Axis is : 20
Acceleration in X-Axis is : 256
Acceleration in Y-Axis is : 204
Acceleration in Z-Axis is : -296

 

Link

Freescal MMA7455 Three Axis Digital Tilt Sensor Acceleration Module,Multi-copter

Leave a Reply