debugging library

Fork of LIS3DH by Kenji Arai

Revision:
11:972c166f654b
Parent:
10:18b993cca7ab
--- a/LIS3DH.cpp	Sat Jun 09 09:35:25 2018 +0000
+++ b/LIS3DH.cpp	Tue Jun 19 03:37:58 2018 +0000
@@ -1,4 +1,8 @@
 /*
+ * 2018:  Eric Tsai's Modifications of Kenji Arai's original LIS3DH library 
+ * modified <initialize> and added threshold <setAct> call
+ *
+ *
  * mbed library program
  *  LIS3DH MEMS motion sensor: 3-axis "nano" accelerometer, made by STMicroelectronics
  *      http://www.st-japan.co.jp/web/jp/catalog/sense_power/FM89/SC444/PF250725
@@ -24,8 +28,10 @@
  : _i2c_p(new I2C(p_sda, p_scl)), _i2c(*_i2c_p)
 {
     _i2c.frequency(400000);
-    initialize (addr, LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_8G);  //tsai:  change this to 10Hz, 16uA to 8uA.
-    //initialize (addr, LIS3DH_DR_NR_LP_10HZ, LIS3DH_FS_8G);  //8uA consumption at 10Hz
+    //initialize (addr, LIS3DH_DR_NR_LP_50HZ, LIS3DH_FS_8G);  //tsai:  change this to 10Hz, 16uA to 8uA.
+    //itialize (addr, LIS3DH_DR_NR_LP_10HZ, LIS3DH_FS_8G);  //8uA consumption at 10Hz
+    
+    initialize (addr, LIS3DH_DR_NR_LP_10HZ, LIS3DH_FS_2G); //8uA @ 10Hz, 2G scale, really sensitive.
     // LIS3DH_DR_NR_LP_10HZ = 2
     // LIS3DH_FS_8G = 2, full scale
 }
@@ -215,6 +221,10 @@
     }
 }
 
+// Tsai
+// See ST app note AN3308
+// Add interrupt output from motion.
+// Should parameterize threshold, latch, etc... 
 uint8_t LIS3DH::setAct(uint8_t addr)
 {
     uint8_t ret_val;
@@ -233,17 +243,30 @@
         return ret_val;     // acc chip is NOT on I2C line then terminate
     }
     
-    //Tsai:  add INT
-    //tsai:  reg. INT1_CFG
+    //tsai:  set CTRL_REG2, high pass filter, 
+    // value = 0100 0000
+    dt[0] = LIS3DH_CTRL_REG2;
+    dt[1] = 0x09;  // 0000 1001, enable filter, on IA1
+    _i2c.write(acc_addr, dt, 2, false);
+    
+
+    //Tsai:  set CTRL_REG3, 
+    //value = 0100 0000
+    dt[0] = LIS3DH_CTRL_REG3;
+    dt[1] = 0x40;  // 0100 0000, enable I1_IA1 INT1
+    _i2c.write(acc_addr, dt, 2, false);
+
+
+    //Tsai:  reg. INT1_CFG
     dt[0] = LIS3DH_INT1_CFG;
     dt[1] = 0x7f;  // 0111 1111 = movement in all xyz
     _i2c.write(acc_addr, dt, 2, false);
     
     
-    //tsai:  reg. LIS3DH_INT1_THS
+    //tsai:  reg. LIS3DH_INT1_THS, threshold for activity
     dt[0] = LIS3DH_INT1_THS;
     //0-127;  I was at 10 out of 127 @ 16mg LSB;  
-    dt[1] = 0x02;  // 0000 0010 //62mg @ 8g full scale;  want 38 == 
+    dt[1] = 0x03;  // 0000 0010 //@2G scale-> 16mg*3 = 48mg motion
     _i2c.write(acc_addr, dt, 2, false);
     
     /*
@@ -252,5 +275,16 @@
     dt[1] = 0x01;  // short?
     _i2c.write(acc_addr, dt, 2, false);
     */
+    
+    //tsai:  reg. LIS3DH_CTRL_REG5, latching interrupt?
+    dt[0] = LIS3DH_CTRL_REG5;
+    //0-127;  I was at 10 out of 127 @ 16mg LSB;  
+    //dt[1] = 0x00;  // 0000 0000, don't latch interrupt 
+    //dt[1] = 0x08;  // 0000 1000, latch int1
+    dt[1] = 0x0C;  // 0000 1100, latch int1, enable 4D
+    //dt[1] = 0x04;  // 0000 0100, dont latch int1, enable 4D
+    _i2c.write(acc_addr, dt, 2, false);
+    
+    
     return ret_val;
 }