debugging library
Fork of LIS3DH by
Diff: LIS3DH.cpp
- 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; }