Mems sensor

Committer:
Anunnaki
Date:
Fri Sep 23 12:15:01 2016 +0000
Revision:
1:45447b012eea
Parent:
0:da46ed0f1363
Changed faulty addresses

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Anunnaki 0:da46ed0f1363 1 #include "mbed.h"
Anunnaki 0:da46ed0f1363 2 #include "LSM9DS1.h"
Anunnaki 0:da46ed0f1363 3 #include "LSM9DS1_RegVals.h"
Anunnaki 1:45447b012eea 4 #include "acd52832_bsp.h"
Anunnaki 0:da46ed0f1363 5
Anunnaki 0:da46ed0f1363 6 LSM9DS1::LSM9DS1(I2C i2c) : _i2c(i2c){
Anunnaki 0:da46ed0f1363 7 startAcc();
Anunnaki 0:da46ed0f1363 8 startGyro();
Anunnaki 0:da46ed0f1363 9 startMag();
Anunnaki 0:da46ed0f1363 10 }
Anunnaki 0:da46ed0f1363 11
Anunnaki 0:da46ed0f1363 12 void LSM9DS1::startMag(){
Anunnaki 0:da46ed0f1363 13 char data[2];
Anunnaki 0:da46ed0f1363 14
Anunnaki 0:da46ed0f1363 15 data[0] = (char)CTRL_REG1_M; // Target register
Anunnaki 0:da46ed0f1363 16 data[1] = (char)0x7C; // Data to write
Anunnaki 0:da46ed0f1363 17 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 18
Anunnaki 0:da46ed0f1363 19 data[0] = (char)CTRL_REG2_M; // Target register
Anunnaki 1:45447b012eea 20 data[1] = (char)0x00; // Data to write
Anunnaki 0:da46ed0f1363 21 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 22
Anunnaki 0:da46ed0f1363 23 data[0] = (char)CTRL_REG3_M; // Target register
Anunnaki 0:da46ed0f1363 24 data[1] = (char)0x00; // Data to write
Anunnaki 0:da46ed0f1363 25 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 26
Anunnaki 0:da46ed0f1363 27 data[0] = (char)CTRL_REG4_M; // Target register
Anunnaki 1:45447b012eea 28 data[1] = (char)(3<<3); // Data to write
Anunnaki 0:da46ed0f1363 29 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 30
Anunnaki 0:da46ed0f1363 31 data[0] = (char)CTRL_REG5_M; // Target register
Anunnaki 0:da46ed0f1363 32 data[1] = (char)0x00; // Data to write
Anunnaki 0:da46ed0f1363 33 _i2c.write(TWI_MAG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 34 }
Anunnaki 0:da46ed0f1363 35
Anunnaki 1:45447b012eea 36 void LSM9DS1::readMag(int16_t *results){
Anunnaki 0:da46ed0f1363 37 char results_[6];
Anunnaki 1:45447b012eea 38 int16_t res_final[3];
Anunnaki 0:da46ed0f1363 39 char out_x_l_m = OUT_X_L_M;
Anunnaki 0:da46ed0f1363 40
Anunnaki 0:da46ed0f1363 41 _i2c.write(TWI_MAG_ADDR, &out_x_l_m, 1, true);
Anunnaki 0:da46ed0f1363 42 _i2c.read(TWI_MAG_ADDR, results_, 6, 0);
Anunnaki 0:da46ed0f1363 43 res_final[0] = ((results_[1]<<8) | results_[0]);
Anunnaki 0:da46ed0f1363 44 res_final[1] = ((results_[3]<<8) | results_[2]);
Anunnaki 0:da46ed0f1363 45 res_final[2] = ((results_[5]<<8) | results_[4]);
Anunnaki 0:da46ed0f1363 46
Anunnaki 0:da46ed0f1363 47 *(results) = res_final[0];
Anunnaki 0:da46ed0f1363 48 *(results + 1) = res_final[1];
Anunnaki 0:da46ed0f1363 49 *(results + 2) = res_final[2];
Anunnaki 0:da46ed0f1363 50 }
Anunnaki 0:da46ed0f1363 51
Anunnaki 0:da46ed0f1363 52 void LSM9DS1::startAcc(){
Anunnaki 0:da46ed0f1363 53 char data[2];
Anunnaki 0:da46ed0f1363 54
Anunnaki 0:da46ed0f1363 55 data[0] = (char)CTRL_REG5_XL; // Target register
Anunnaki 0:da46ed0f1363 56 data[1] = (char)0x38; // Data to write
Anunnaki 1:45447b012eea 57 _i2c.write(TWI_AG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 58
Anunnaki 0:da46ed0f1363 59
Anunnaki 0:da46ed0f1363 60 data[0] = (char)CTRL_REG6_XL; // Target register
Anunnaki 0:da46ed0f1363 61 data[1] = (char)0xC7; // Data to write
Anunnaki 1:45447b012eea 62 _i2c.write(TWI_AG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 63 }
Anunnaki 0:da46ed0f1363 64
Anunnaki 1:45447b012eea 65 void LSM9DS1::readAcc(int16_t *results){
Anunnaki 0:da46ed0f1363 66 char results_[6];
Anunnaki 1:45447b012eea 67 int16_t res_final[3];
Anunnaki 0:da46ed0f1363 68 char out_x_l_xl = OUT_X_L_XL;
Anunnaki 0:da46ed0f1363 69
Anunnaki 1:45447b012eea 70 _i2c.write(TWI_AG_ADDR, &out_x_l_xl, 1, true);
Anunnaki 1:45447b012eea 71 _i2c.read(TWI_AG_ADDR, results_, 6, 0);
Anunnaki 0:da46ed0f1363 72 res_final[0] = ((results_[1]<<8) | results_[0]);
Anunnaki 0:da46ed0f1363 73 res_final[1] = ((results_[3]<<8) | results_[2]);
Anunnaki 0:da46ed0f1363 74 res_final[2] = ((results_[5]<<8) | results_[4]);
Anunnaki 0:da46ed0f1363 75
Anunnaki 0:da46ed0f1363 76 *(results) = res_final[0];
Anunnaki 0:da46ed0f1363 77 *(results + 1) = res_final[1];
Anunnaki 0:da46ed0f1363 78 *(results + 2) = res_final[2];
Anunnaki 0:da46ed0f1363 79 }
Anunnaki 0:da46ed0f1363 80
Anunnaki 0:da46ed0f1363 81 void LSM9DS1::startGyro(){
Anunnaki 0:da46ed0f1363 82 char data[2];
Anunnaki 0:da46ed0f1363 83
Anunnaki 1:45447b012eea 84 data[0] = (char)CTRL_REG6_XL; // Target register
Anunnaki 1:45447b012eea 85 data[1] = (char)0xC7 & (char)0x1F; // Data to write
Anunnaki 1:45447b012eea 86 _i2c.write(TWI_AG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 87
Anunnaki 0:da46ed0f1363 88 data[0] = (char)CTRL_REG1_G; // Target register
Anunnaki 0:da46ed0f1363 89 data[1] = (char)0xC0; // Data to write
Anunnaki 1:45447b012eea 90 _i2c.write(TWI_AG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 91
Anunnaki 0:da46ed0f1363 92
Anunnaki 0:da46ed0f1363 93 data[0] = (char)CTRL_REG2_G; // Target register
Anunnaki 0:da46ed0f1363 94 data[1] = (char)0x00; // Data to write
Anunnaki 1:45447b012eea 95 _i2c.write(TWI_AG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 96
Anunnaki 0:da46ed0f1363 97
Anunnaki 0:da46ed0f1363 98 data[0] = (char)CTRL_REG3_G; // Target register
Anunnaki 0:da46ed0f1363 99 data[1] = (char)0x00; // Data to write
Anunnaki 1:45447b012eea 100 _i2c.write(TWI_AG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 101
Anunnaki 0:da46ed0f1363 102
Anunnaki 0:da46ed0f1363 103 data[0] = (char)CTRL_REG4; // Target register
Anunnaki 0:da46ed0f1363 104 data[1] = (char)0x3A; // Data to write
Anunnaki 1:45447b012eea 105 _i2c.write(TWI_AG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 106
Anunnaki 0:da46ed0f1363 107
Anunnaki 0:da46ed0f1363 108 data[0] = (char)ORIENT_CFG_G; // Target register
Anunnaki 0:da46ed0f1363 109 data[1] = (char)0x00; // Data to write
Anunnaki 1:45447b012eea 110 _i2c.write(TWI_AG_ADDR, data, 0x02,0);
Anunnaki 0:da46ed0f1363 111
Anunnaki 0:da46ed0f1363 112 }
Anunnaki 0:da46ed0f1363 113
Anunnaki 1:45447b012eea 114 void LSM9DS1::readGyro(int16_t *results){
Anunnaki 0:da46ed0f1363 115 char results_[6];
Anunnaki 1:45447b012eea 116 int16_t res_final[3];
Anunnaki 0:da46ed0f1363 117 char out_x_l_g = OUT_X_L_G;
Anunnaki 0:da46ed0f1363 118
Anunnaki 1:45447b012eea 119 _i2c.write(TWI_AG_ADDR, &out_x_l_g, 1, true);
Anunnaki 1:45447b012eea 120 _i2c.read(TWI_AG_ADDR, results_, 6, 0);
Anunnaki 0:da46ed0f1363 121 res_final[0] = ((results_[1]<<8) | results_[0]);
Anunnaki 0:da46ed0f1363 122 res_final[1] = ((results_[3]<<8) | results_[2]);
Anunnaki 0:da46ed0f1363 123 res_final[2] = ((results_[5]<<8) | results_[4]);
Anunnaki 0:da46ed0f1363 124
Anunnaki 0:da46ed0f1363 125 *(results) = res_final[0];
Anunnaki 0:da46ed0f1363 126 *(results + 1) = res_final[1];
Anunnaki 0:da46ed0f1363 127 *(results + 2) = res_final[2];
Anunnaki 0:da46ed0f1363 128 }