Test the LSM6DS3 6-axis sensor

Dependencies:   mbed

Files at this revision

API Documentation at this revision

Comitter:
YCTung
Date:
Thu Feb 25 12:49:55 2016 +0000
Commit message:
Test the LSM6DS3 6-axis sensor

Changed in this revision

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/main.cpp	Thu Feb 25 12:49:55 2016 +0000
@@ -0,0 +1,143 @@
+#include "mbed.h"
+
+#define sensor_CTRL_REG_address 0x10
+#define sensorG_OUT_X_L_address 0x22
+#define sensorX_OUT_X_L_address 0x28
+ 
+SPI spi1(D4, D5, D3);
+DigitalOut sensor_CS(D6);
+
+DigitalOut myled(LED1);
+Serial pc(D1, D0);
+
+int16_t Gyro_axis_data[3];
+int16_t Acce_axis_data[3];
+
+void sensor_setup(void);
+void sensorG_read_3axis(void);
+void sensorX_read_3axis(void);
+ 
+int main() {
+        
+    sensor_CS = 1;
+    spi1.format(8, 0b11);
+    
+    sensor_setup();
+//    sensor_CS = 0;
+//    spi1.write(0x10 | 0x00);
+//    spi1.write(0x7C);
+//    sensor_CS = 1;
+    
+    while(1) {
+        myled = !myled;
+        
+//        sensor_CS = 0;
+//        spi1.write(0x0F00 | 0x8000);//read reg
+//        uint8_t c = spi1.write(0x00);
+//        uint8_t c = spi1.write(0x0F00 | 0x8000);
+//        spi1.write(0x22 | 0x80);
+//        uint8_t c = spi1.write(0x00);
+//        sensor_CS = 1;
+//        pc.printf("0x%d\r\n", c);
+        
+        sensorX_read_3axis();
+        pc.printf("%d\r\n", Acce_axis_data[1]);
+        
+        wait_us(100000);
+    }
+}
+
+void sensor_setup(void)
+{
+    static unsigned char sensor_CTRL_REG[11];
+
+    sensor_CTRL_REG[1] = 0b01111100; //(10h) XL_ODR = 833Hz, XL_FS = +-8g
+    sensor_CTRL_REG[2] = 0b01111100; //(11h) G_ODR = 833Hz, G_FS = 2000dps, LPfc = 110Hz
+    sensor_CTRL_REG[3] = 0b00000100; //(12h) register address automatically incremented
+    sensor_CTRL_REG[4] = 0b00000000; //(13h) 
+    sensor_CTRL_REG[5] = 0b00000000; //(14h) 
+    sensor_CTRL_REG[6] = 0b00000000; //(15h)
+    sensor_CTRL_REG[7] = 0b00000000; //(16h)
+    sensor_CTRL_REG[8] = 0b00000000; //(17h)
+    sensor_CTRL_REG[9] = 0b00111000; //(18h) XL_XYZ enable
+    sensor_CTRL_REG[10]= 0b00111000; //(19h) G_XYZ enable
+
+    // write mode (R/W = 0)
+    sensor_CTRL_REG[0] = sensor_CTRL_REG_address | 0x00; // (10h)
+
+// start
+    sensor_CS = 0;
+    
+    spi1.write(sensor_CTRL_REG[0]);
+    spi1.write(sensor_CTRL_REG[1]);
+    spi1.write(sensor_CTRL_REG[2]);
+    spi1.write(sensor_CTRL_REG[3]);
+    spi1.write(sensor_CTRL_REG[4]);
+    spi1.write(sensor_CTRL_REG[5]);
+    spi1.write(sensor_CTRL_REG[6]);
+    spi1.write(sensor_CTRL_REG[7]);
+    spi1.write(sensor_CTRL_REG[8]);
+    spi1.write(sensor_CTRL_REG[9]);
+    spi1.write(sensor_CTRL_REG[10]);
+    
+    sensor_CS = 1;
+// end
+}
+
+void sensorG_read_3axis(void)
+{
+    static unsigned char sensorG_data_write;
+    static int  sensorG_data_read[6];
+
+// read mode (R/W = 1)
+    sensorG_data_write = sensorG_OUT_X_L_address | 0x80; // write first bit
+
+// start
+    sensor_CS = 0;
+    
+    spi1.write(sensorG_data_write);
+    sensorG_data_read[0] = spi1.write(0x00); // XL
+    sensorG_data_read[1] = spi1.write(0x00); // XH
+    sensorG_data_read[2] = spi1.write(0x00); // YL
+    sensorG_data_read[3] = spi1.write(0x00); // YH
+    sensorG_data_read[4] = spi1.write(0x00); // ZL
+    sensorG_data_read[5] = spi1.write(0x00); // YH
+    
+    sensor_CS = 1;
+// end
+
+    // Data reconstruction  
+    Gyro_axis_data[0] = (sensorG_data_read[1]<<8) | sensorG_data_read[0];
+    Gyro_axis_data[1] = (sensorG_data_read[3]<<8) | sensorG_data_read[2]; 
+    Gyro_axis_data[2] = (sensorG_data_read[5]<<8) | sensorG_data_read[4]; 
+}
+
+void sensorX_read_3axis(void)
+{
+    static unsigned char sensorX_data_write;
+    static int  sensorX_data_read[6];
+
+    // read mode (R/W = 1)
+    sensorX_data_write = sensorX_OUT_X_L_address | 0x80; // write first bit
+    
+// start    
+    sensor_CS = 0;
+    
+    spi1.write(sensorX_data_write);
+    //accelerater outputs
+    sensorX_data_read[0] = spi1.write(0x00); // XL
+    sensorX_data_read[1] = spi1.write(0x00); // XH
+    sensorX_data_read[2] = spi1.write(0x00); // YL
+    sensorX_data_read[3] = spi1.write(0x00); // YH
+    sensorX_data_read[4] = spi1.write(0x00); // ZL
+    sensorX_data_read[5] = spi1.write(0x00); // ZH
+    
+    sensor_CS = 1;
+// end
+
+    // Data reconstruction
+    Acce_axis_data[0] = (sensorX_data_read[1]<<8) | sensorX_data_read[0]; // X
+    Acce_axis_data[1] = (sensorX_data_read[3]<<8) | sensorX_data_read[2]; // Y
+    Acce_axis_data[2] = (sensorX_data_read[5]<<8) | sensorX_data_read[4]; // Z
+    
+}
\ No newline at end of file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Feb 25 12:49:55 2016 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/252557024ec3
\ No newline at end of file