Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: MMA8452_Test MMA8452_Demo Dualing_Tanks IMU-Controlled_MP3_Player ... more
Revision 6:f6bde04bf8be, committed 2013-10-17
- Comitter:
- ashleymills
- Date:
- Thu Oct 17 09:41:35 2013 +0000
- Parent:
- 5:b3d0abd97e55
- Child:
- 8:89272163f395
- Commit message:
- Cleaning some things.
Changed in this revision
| MMA8452.cpp | Show annotated file Show diff for this revision Revisions of this file |
| MMA8452.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/MMA8452.cpp Wed Oct 16 18:55:16 2013 +0000
+++ b/MMA8452.cpp Thu Oct 17 09:41:35 2013 +0000
@@ -19,20 +19,19 @@
# include "MMA8452.h"
-
-
-
-
-
// Connect module at I2C address using I2C port pins sda and scl
Accelerometer_MMA8452::Accelerometer_MMA8452(PinName sda, PinName scl,int frequency) : m_i2c(sda, scl) , m_frequency(frequency)
{
//m_i2c.frequency(m_frequency);
+
+ // setup read and write addresses to avoid duplication
+ _readAddress = (MMA8452_ADDRESS<<1) | 0x01;
+ _writeAddress = (MMA8452_ADDRESS<<1) & 0xFE;
}
// Destroys instance
-Accelerometer_MMA8452::~Accelerometer_MMA8452()
+Accelerometer_MMA8452::~Accelerometer_MMA8452()
{
}
@@ -40,32 +39,22 @@
// Setting the control register bit 1 to true to activate the MMA8452
int Accelerometer_MMA8452::activate()
{
- char mcu_address = (MMA8452_ADDRESS<<1);
- char init[2];
- init[0] = CTRL_REG_1; // control register 1
- init[1] = ACTIVE; // set to active
+ // set control register 1 to active
+ char init[2] = {CTRL_REG_1,ACTIVE};
- if(m_i2c.write(mcu_address,init,2) == 0)
- {
- return 0; // return 0 to indicate success
- }
- else
- {
- return 1; // crumbs it failed!!!
- }
-
+ // perform write and return error code
+ return m_i2c.write(_writeAddress,init,2);
}
// Get 'Fast Read Mode' called F_READ. If bit 1 is set '1' then F_READ is active. Fast read will skip LSB when reading xyz
// resisters from 0x01 to 0x06. When F_READ is '0' then all 6 registers will be read.
-int Accelerometer_MMA8452::get_CTRL_Reg1(int& CTRL_Reg)
-{
+int Accelerometer_MMA8452::get_CTRL_Reg1(int* CTRL_Reg)
{
char mcu_address = (MMA8452_ADDRESS<<1);
m_i2c.start();
- if( m_i2c.write( mcu_address & 0xFE) == 0) // just good practice to force bit 1 to a '0' by ANDing with 0xFE
+ if( m_i2c.write(_writeAddress) == 0)
{
return 1; // we failed to write the mcu address on the bus to initiate dialogue
}
@@ -78,16 +67,9 @@
{
return 1; // we failed to request a read from that mcu - this really is just writing the mcu vaule on the bus
}
- CTRL_Reg = m_i2c.read(0);
+ *CTRL_Reg = m_i2c.read(0);
m_i2c.stop();
return 0;
-
-
-}
-
-
-
-
}
// Setting the control register bit 1 to true to activate the MMA8452
--- a/MMA8452.h Wed Oct 16 18:55:16 2013 +0000
+++ b/MMA8452.h Thu Oct 17 09:41:35 2013 +0000
@@ -115,11 +115,6 @@
#define SR_STATUS 0x08 // Auto-Wake and Active Mode Portrait/Landscape Samples per Seconds Register (Read/Write)
#define PDET_STATUS 0x09 // Tap/Pulse Detection Register (Read/Write)
#define PD_STATUS 0xA // Tap/Pulse Debounce Count Register (Read/Write)
-
-
-
-
-
class Accelerometer_MMA8452
{
@@ -139,9 +134,7 @@
*
*/
~Accelerometer_MMA8452();
-
-
-
+
/** Get system mode of the MMA8452 (not required)
* returns 0 for success in reading the system mode of the chip
* returns 1 for failure in reading the system mode of the chip
@@ -152,7 +145,6 @@
int get_SystemMode(int& deviceSystemMode);
-
/** Get status of the MMA8452 (not required)
* returns 0 for success in reading the status of the chip
* returns 1 for failure in reading the status of the chip
@@ -163,7 +155,6 @@
*
*/
int get_Status(int& deviceStatus);
-
/** Activate the MMA8452 (required)
@@ -176,7 +167,6 @@
int activate();
-
/** Standby the MMA8452 (not required)
* returns 0 for success in activating the chip
* returns 1 for failure in activating the chip
@@ -195,7 +185,7 @@
* This will return the state of the control register 1. This holds and sets values for auto wake, sleep mode
* output data rate, fast read mode and active/standby. More info on 6.7 of pdf for MMA8452 Freescale doc.
*/
- int get_CTRL_Reg1(int& CTRL_Reg);
+ int get_CTRL_Reg1(int* CTRL_Reg);
/** Initialization of device MMA8452 (required)
@@ -259,6 +249,8 @@
private:
I2C m_i2c;
int m_frequency;
+ int _readAddress;
+ int _writeAddress;
};
MMA8452Q Triple Axis Accelerometer