acd52832 LSM9DS1 example

Dependencies:   ACD_ePaper aconno_bsp mbed

Files at this revision

API Documentation at this revision

Comitter:
jurica238814
Date:
Thu Sep 22 11:38:40 2016 +0000
Commit message:
acd52832 LSM9DS1 example

Changed in this revision

ACD_ePaper.lib Show annotated file Show diff for this revision Revisions of this file
LSM9DS1_defVals.h Show annotated file Show diff for this revision Revisions of this file
LSM9DS1_regs.h Show annotated file Show diff for this revision Revisions of this file
aconno_bsp.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /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
--- /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
--- /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
--- /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
--- /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
--- /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