This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

About energy-saving point of view, and the most optimal way to proceed in

Hello Nordic Team,

I have a question about energy conservation that we want to implement and how we want to make it as optimal as possible.

For our application and its use, we would like our Bluetooth module to be activated only for 1 minutes (Period during which, our object is connectable from the smartphone and once connected the interaction is possible). After our connected object detects a Shake, Bluetooth is broadcasted and at the end of this minute the connected device is disconnected and the Bluetooth will be muted and the object enters standby.

To do so I saw the existence of the primitives given by the SoftDevice: sd_ble_gap_disconnect, sd_ble_gap_adv_stop, sd_power_system_off, …

In order to detect this Shake we have implemented a MEMS Accelerometers and our choice is stopped for our PCB on a LIS2DH12.

Now with acceleration library we are able to detect a shake event, by what, able to call a method movementDetected() for example. And put in this function the primitives that will wake up the BT and the escape the power_manage()

So my question is from an energy-saving point of view, is this the most optimal way to proceed?

Because with what is described above, the Nordic will have to continuously scrutinize values extracted from the MEMS and I imagine, it expensive in resources per cycle. Would not there be a better way to do since the MEMS is directly connected with the Interrupts, INT1, INT2 on the NRF52?

Can MEMS not be programmed, alone, to detect the Shake and wake the Nordic in the most optimal way?

Thank you for your best advice,

Parents
  • As you suggested, the best way is to connect INT1 output of LIS2DH12 to nRF52 input. Program LIS2DH12 so that signal will be generated on INT1 as soon as shake event recognised by LIS2DH12. Program nRF52 input to wake CPU from deep sleep on level change on that input. We did the same on our product. Works fine. To save you time here is data we program to LIS2DH12 addr<-value: 0x20<-0x4F,0x21<-0x01,0x22<-0x40,0x23<-0x00,0x24<-0x0A,0x25<-0x20,0x30<-0xAA,0x32<-0x02,0x33<-0x01

Reply
  • As you suggested, the best way is to connect INT1 output of LIS2DH12 to nRF52 input. Program LIS2DH12 so that signal will be generated on INT1 as soon as shake event recognised by LIS2DH12. Program nRF52 input to wake CPU from deep sleep on level change on that input. We did the same on our product. Works fine. To save you time here is data we program to LIS2DH12 addr<-value: 0x20<-0x4F,0x21<-0x01,0x22<-0x40,0x23<-0x00,0x24<-0x0A,0x25<-0x20,0x30<-0xAA,0x32<-0x02,0x33<-0x01

Children
No Data
Related