![](/media/cache/profiles/b5c4ec91390a6fbccf8d918d443563ed.jpg.50x50_q85.jpg)
acd52832 LSM9DS1 example
Dependencies: ACD_ePaper aconno_bsp mbed
Revision 0:940647793667, committed 2016-09-22
- Comitter:
- jurica238814
- Date:
- Thu Sep 22 11:38:40 2016 +0000
- Commit message:
- acd52832 LSM9DS1 example
Changed in this revision
diff -r 000000000000 -r 940647793667 ACD_ePaper.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/ACD_ePaper.lib Thu Sep 22 11:38:40 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/Anunnaki/code/ACD_ePaper/#dc7b794b59b7
diff -r 000000000000 -r 940647793667 LSM9DS1_defVals.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LSM9DS1_defVals.h Thu Sep 22 11:38:40 2016 +0000 @@ -0,0 +1,21 @@ +/* Copyright (c) 2016 Aconno. All Rights Reserved. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + + + #define M_SCALE16GS 3 + #define M_ODR_80 7 + + #define M_ENABLE 1 // True + #define M_SCALE M_SCALE_16GS + #define M_SAMPLE_RATE M_ODR_80 + #define M_XY_PERFORMANCE 3 + #define M_Z_PERFORMANCE 3 + #define M_LOW_POWER_ENABLE 0 // False + #define M_OPERATING_MODE 0 + + \ No newline at end of file
diff -r 000000000000 -r 940647793667 LSM9DS1_regs.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/LSM9DS1_regs.h Thu Sep 22 11:38:40 2016 +0000 @@ -0,0 +1,87 @@ +/* Copyright (c) 2016 Aconno. All Rights Reserved. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + + //Magnetometer I2C address + #define TWI_MAG_ADDR (0x1C << 1) + +//Accelerometer and Gyroscope registars addresses +#define ACT_THS 0x04 +#define ACT_DUR 0x05 +#define INT_GEN_CFG_XL 0x06 +#define INT_GEN_THS_X_XL 0x07 +#define INT_GEN_THS_Y_XL 0x08 +#define INT_GEN_THS_Z_XL 0x09 +#define INT_GEN_DUR_XL 0x0A +#define REFERENCE_G 0x0B +#define INT1_CTRL 0x0C +#define INT2_CTRL 0x0D +#define WHO_AM_I_XG 0x0F +#define CTRL_REG1_G 0x10 +#define CTRL_REG2_G 0x11 +#define CTRL_REG3_G 0x12 +#define ORIENT_CFG_G 0x13 +#define INT_GEN_SRC_G 0x14 +#define OUT_TEMP_L 0x15 +#define OUT_TEMP_H 0x16 +#define STATUS_REG_0 0x17 +#define OUT_X_L_G 0x18 +#define OUT_X_H_G 0x19 +#define OUT_Y_L_G 0x1A +#define OUT_Y_H_G 0x1B +#define OUT_Z_L_G 0x1C +#define OUT_Z_H_G 0x1D +#define CTRL_REG4 0x1E +#define CTRL_REG5_XL 0x1F +#define CTRL_REG6_XL 0x20 +#define CTRL_REG7_XL 0x21 +#define CTRL_REG8 0x22 +#define CTRL_REG9 0x23 +#define CTRL_REG10 0x24 +#define INT_GEN_SRC_XL 0x26 +#define STATUS_REG_1 0x27 +#define OUT_X_L_XL 0x28 +#define OUT_X_H_XL 0x29 +#define OUT_Y_L_XL 0x2A +#define OUT_Y_H_XL 0x2B +#define OUT_Z_L_XL 0x2C +#define OUT_Z_H_XL 0x2D +#define FIFO_CTRL 0x2E +#define FIFO_SRC 0x2F +#define INT_GEN_CFG_G 0x30 +#define INT_GEN_THS_XH_G 0x31 +#define INT_GEN_THS_XL_G 0x32 +#define INT_GEN_THS_YH_G 0x33 +#define INT_GEN_THS_YL_G 0x34 +#define INT_GEN_THS_ZH_G 0x35 +#define INT_GEN_THS_ZL_G 0x36 +#define INT_GEN_DUR_G 0x37 + +//Magnetometer registers addresses +#define OFFSET_X_REG_L_M 0x05 +#define OFFSET_X_REG_H_M 0x06 +#define OFFSET_Y_REG_L_M 0x07 +#define OFFSET_Y_REG_H_M 0x08 +#define OFFSET_Z_REG_L_M 0x09 +#define OFFSET_Z_REG_H_M 0x0A +#define WHO_AM_I_M 0x0F +#define CTRL_REG1_M 0x20 +#define CTRL_REG2_M 0x21 +#define CTRL_REG3_M 0x22 +#define CTRL_REG4_M 0x23 +#define CTRL_REG5_M 0x24 +#define STATUS_REG_M 0x27 +#define OUT_X_L_M 0x28 +#define OUT_X_H_M 0x29 +#define OUT_Y_L_M 0x2A +#define OUT_Y_H_M 0x2B +#define OUT_Z_L_M 0x2C +#define OUT_Z_H_M 0x2D +#define INT_CFG_M 0x30 +#define INT_SRC_M 0x30 +#define INT_THS_L_M 0x32 +#define INT_THS_H_M 0x33
diff -r 000000000000 -r 940647793667 aconno_bsp.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/aconno_bsp.lib Thu Sep 22 11:38:40 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/jurica238814/code/aconno_bsp/#6d9c6c231034
diff -r 000000000000 -r 940647793667 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 22 11:38:40 2016 +0000 @@ -0,0 +1,234 @@ +/* Copyright (c) 2016 Aconno. All Rights Reserved. + * + * Licensees are granted free, non-transferable use of the information. NO + * WARRANTY of ANY KIND is provided. This heading must NOT be removed from + * the file. + * + */ + + +#include "mbed.h" +#include "acd52832_bsp.h" +#include "LSM9DS1_regs.h" +#include "LSM9DS1_defVals.h" +#include "GDEP015OC1.h" + +// #define GYRO + +SPI spi(p3, NC, p4); +GDEP015OC1 epd = GDEP015OC1(spi, p5, p6, p7, p8); + +// Initialize I2C protocol +I2C mems(PIN_EXP_SDA, PIN_EXP_SCL); + +DigitalOut RED(PIN_LED_RED); +DigitalOut GREEN(PIN_LED_GREEN); +DigitalOut BLUE(PIN_LED_BLUE); +DigitalOut LEDD(PIN_LED); + + +void check(bool success) +{ + if(!success) { + // serial.printf("Success.\n"); + RED = 1; + GREEN = 0; + } else { + // serial.printf("Unsuccess!\n"); + RED = 0; + GREEN = 1; + wait(2); + } + wait (0.05); + RED = 1; + GREEN = 1; +} + + + +void start_mag() +{ + char data[2]; + bool success; + + data[0] = (char)CTRL_REG1_M; // Target register + data[1] = (char)0x7C; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)CTRL_REG2_M; // Target register + data[1] = (char)0x60; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)CTRL_REG3_M; // Target register + data[1] = (char)0x00; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)CTRL_REG4_M; // Target register + data[1] = (char)0x0C; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)CTRL_REG5_M; // Target register + data[1] = (char)0x00; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); +} + +void read_mag(float *results){ + char results_[6]; + float res_final[3]; + char out_x_l_m = OUT_X_L_M; + + check (mems.write(TWI_MAG_ADDR, &out_x_l_m, 1, true)); + check (mems.read(TWI_MAG_ADDR, results_, 6, 0)); + res_final[0] = ((results_[1]<<8) | results_[0]); + res_final[1] = ((results_[3]<<8) | results_[2]); + res_final[2] = ((results_[5]<<8) | results_[4]); + + *(results) = res_final[0]; + *(results + 1) = res_final[1]; + *(results + 2) = res_final[2]; +} + +void start_acc() +{ + char data[2]; + bool success; + + data[0] = (char)CTRL_REG5_XL; // Target register + data[1] = (char)0x38; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)CTRL_REG6_XL; // Target register + data[1] = (char)0xC7; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + +} + +void read_acc(float *results){ + char results_[6]; + float res_final[3]; + char out_x_l_xl = OUT_X_L_XL; + + check (mems.write(TWI_MAG_ADDR, &out_x_l_xl, 1, true)); + check (mems.read(TWI_MAG_ADDR, results_, 6, 0)); + res_final[0] = ((results_[1]<<8) | results_[0]); + res_final[1] = ((results_[3]<<8) | results_[2]); + res_final[2] = ((results_[5]<<8) | results_[4]); + + *(results) = res_final[0]; + *(results + 1) = res_final[1]; + *(results + 2) = res_final[2]; +} + +void start_gyro(){ + char data[2]; + bool success; + + // If GYRO is defines (gyro enabled) + #ifdef GYRO + data[0] = (char)CTRL_REG6_XL; // Target register + data[1] = (char)0xC7 & (char)0x1F; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + #endif + + data[0] = (char)CTRL_REG1_G; // Target register + data[1] = (char)0xC0; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)CTRL_REG2_G; // Target register + data[1] = (char)0x00; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)CTRL_REG3_G; // Target register + data[1] = (char)0x00; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)CTRL_REG4; // Target register + data[1] = (char)0x3A; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); + + data[0] = (char)ORIENT_CFG_G; // Target register + data[1] = (char)0x00; // Data to write + success = mems.write(TWI_MAG_ADDR, data, 0x02,0); + check(success); +} + +void read_gyro(float *results){ + char results_[6]; + float res_final[3]; + char out_x_l_g = OUT_X_L_G; + + check (mems.write(TWI_MAG_ADDR, &out_x_l_g, 1, true)); + check (mems.read(TWI_MAG_ADDR, results_, 6, 0)); + res_final[0] = ((results_[1]<<8) | results_[0]); + res_final[1] = ((results_[3]<<8) | results_[2]); + res_final[2] = ((results_[5]<<8) | results_[4]); + + *(results) = res_final[0]; + *(results + 1) = res_final[1]; + *(results + 2) = res_final[2]; +} + + +int main() +{ + float old_res = 0; + float results[3]; + char buffer[6]; + + // Clear LEDs + RED = 1; + GREEN = 1; + + // Start acceleration sensor + start_acc(); + + while (1) { + // Get data from mag sensor + read_acc(results); + + if (*results != old_res) { + // Write new value on display + epd.empty(); + epd.write(); + + // Write mag_x + sprintf(buffer, "%+2.1f", *results); //Create a string + epd.writeString(buffer,85,70,0); //Write new data to the buffer + epd.write(); + + // Write mag_y + sprintf(buffer, "%+2.1f", *(results+1)); //Create a string + epd.writeString(buffer,85,80,0); //Write new data to the buffer + epd.write(); + + // Write mag_z + sprintf(buffer, "%+2.1f", *(results+2)); //Create a string + epd.writeString(buffer,85,90,0); //Write new data to the buffer + epd.write(); + + old_res = *results; + BLUE = 0; + wait (1); + BLUE = 1; + wait(1); + } + LEDD = 0; + wait(1); + LEDD = 1; + wait(1); + } + + +} \ No newline at end of file
diff -r 000000000000 -r 940647793667 mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Thu Sep 22 11:38:40 2016 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed/builds/abea610beb85 \ No newline at end of file