MMA8452Q, 3-axis, 12-bit/8-bit digital accelerometer library. Developed by aconno dev team. For example program with the library, contact us.

Dependents:   acd52832_BLE_VF_GeoBeacon

Committer:
jurica238814
Date:
Mon Sep 18 10:08:51 2017 +0000
Revision:
2:ba3e65007adf
Parent:
0:65b19bf1382a
Some small changes.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jurica238814 0:65b19bf1382a 1 /*
jurica238814 0:65b19bf1382a 2 * Library for mma8452 3-Axis, 12-bit/8-bit, Digital Accelerometer
jurica238814 0:65b19bf1382a 3 * Made by Jurica Resetar
jurica238814 0:65b19bf1382a 4 * jurica_resetar@yahoo.com
jurica238814 0:65b19bf1382a 5 *
jurica238814 0:65b19bf1382a 6 * All rights reserved
jurica238814 0:65b19bf1382a 7 */
jurica238814 0:65b19bf1382a 8
jurica238814 0:65b19bf1382a 9
jurica238814 0:65b19bf1382a 10 #include "mma8452.h"
jurica238814 0:65b19bf1382a 11
jurica238814 0:65b19bf1382a 12 Acc_MMA8452::Acc_MMA8452(PinName sda, PinName scl, char address): i2c(sda, scl), acc_address(address){
jurica238814 0:65b19bf1382a 13 }
jurica238814 0:65b19bf1382a 14
jurica238814 0:65b19bf1382a 15 Acc_MMA8452::~Acc_MMA8452(){
jurica238814 0:65b19bf1382a 16 }
jurica238814 0:65b19bf1382a 17
jurica238814 0:65b19bf1382a 18 uint8_t Acc_MMA8452::set_register(char reg, char data){
jurica238814 0:65b19bf1382a 19 char cmd[2] = {0, 0};
jurica238814 0:65b19bf1382a 20 i2c.start();
jurica238814 0:65b19bf1382a 21 cmd[0] = MODE_STATUS;
jurica238814 0:65b19bf1382a 22 cmd[1] = 0x00; // Standby Mode on
jurica238814 0:65b19bf1382a 23 i2c.write(acc_address, cmd, 2);
jurica238814 0:65b19bf1382a 24
jurica238814 0:65b19bf1382a 25 cmd[0] = reg;
jurica238814 0:65b19bf1382a 26 cmd[1] = data; // New value of the register
jurica238814 0:65b19bf1382a 27 i2c.write(acc_address, cmd, 2);
jurica238814 0:65b19bf1382a 28
jurica238814 0:65b19bf1382a 29 cmd[0] = MODE_STATUS;
jurica238814 0:65b19bf1382a 30 cmd[1] = 0x01; // Active Mode on
jurica238814 0:65b19bf1382a 31 i2c.write(acc_address, cmd, 2);
jurica238814 0:65b19bf1382a 32 i2c.stop();
jurica238814 0:65b19bf1382a 33 return 0; // Success
jurica238814 0:65b19bf1382a 34 }
jurica238814 0:65b19bf1382a 35
jurica238814 0:65b19bf1382a 36 uint8_t Acc_MMA8452::get_register(char reg, char *data){
jurica238814 0:65b19bf1382a 37 char temp_read = 2;
jurica238814 0:65b19bf1382a 38 i2c.start();
jurica238814 0:65b19bf1382a 39 if(i2c.write(acc_address & 0xFE) == 0){ // just good practice to force bit 1 to a '0' by ANDing with 0xFE
jurica238814 0:65b19bf1382a 40 return 1; // we failed to write the mcu address on the bus to initiate dialogue
jurica238814 0:65b19bf1382a 41 }
jurica238814 0:65b19bf1382a 42 if(i2c.write(reg) == 0){
jurica238814 0:65b19bf1382a 43 return 1; // we failed to write 'who am i' to the chip
jurica238814 0:65b19bf1382a 44 }
jurica238814 0:65b19bf1382a 45 i2c.start();
jurica238814 0:65b19bf1382a 46 if(i2c.write(acc_address | 0x01) == 0){ // this is asking to read the slave mcu address - even though it's a 'write' method!!! Crap API...
jurica238814 0:65b19bf1382a 47 return 1; // we failed to request a read from that mcu - this really is just writing the mcu vaule on the bus
jurica238814 0:65b19bf1382a 48 }
jurica238814 0:65b19bf1382a 49 temp_read = i2c.read(0);
jurica238814 0:65b19bf1382a 50 i2c.stop();
jurica238814 0:65b19bf1382a 51 *data = temp_read;
jurica238814 0:65b19bf1382a 52
jurica238814 0:65b19bf1382a 53 return 0; // Success
jurica238814 0:65b19bf1382a 54 }
jurica238814 0:65b19bf1382a 55
jurica238814 0:65b19bf1382a 56 uint8_t Acc_MMA8452::get_x_acc(char *data){
jurica238814 0:65b19bf1382a 57 get_register(OUT_X_MSB, data);
jurica238814 0:65b19bf1382a 58 return 0;
jurica238814 0:65b19bf1382a 59 }
jurica238814 0:65b19bf1382a 60 uint8_t Acc_MMA8452::get_y_acc(char *data){
jurica238814 0:65b19bf1382a 61 get_register(OUT_Y_MSB, data);
jurica238814 0:65b19bf1382a 62 return 0;
jurica238814 0:65b19bf1382a 63 }
jurica238814 0:65b19bf1382a 64 uint8_t Acc_MMA8452::get_z_acc(char *data){
jurica238814 0:65b19bf1382a 65 get_register(OUT_Z_MSB, data);
jurica238814 0:65b19bf1382a 66 return 0;
jurica238814 0:65b19bf1382a 67 }