I am developing a project where I need the BNO055 chip to work in low power mode consuming 0.5mA as the datasheet says. I am using and Arduino UNO which will be in a sleep mode. The task is to wake up the Arduino UNO when the BNO055 wake up inside the low power mode by the interrupt pin. I managed to configure and read the interrupt pin with all the possible motion interrupts in normal power mode. The problem comes in low power mode when the BNO055 goes to sleep after the 5 (default configuration) seconds, at this moment the interrupt pin is set to HIGH, although I only configured the INT_MSK register for any motion interrupts. I readed the register INT_STA to see which kind of interrupt was, only the bit 7 was 1, so it was a no motion interrupt(In the INT_MSK register this interrupt is disabled, so the PIN shouldn't be set to HIGH). Reading the current consumption with a multimeter, the interrupt PIN is set to HIGH at the moment when the current changes to 0.5mA. Once the interrupt PIN is set to HIGH i will not detect the new interrupt signal of waking up, as I need to reset de PIN. Can I reset the PIN while the BNO055 chip is sleeping inside the low power mode? All my attempts to reset the PIN wake up the chip.
I would like to know if it's possible to achieve this task with the BNO055 chip, only set the interrupt PIN to HIGH when the BNO055 chip wakes up inside the low power mode.
Solved! Go to Solution.
Thanks for your inquiry.
BNO055 can be configured to enter low power mode automatically when there is no motion and enter normal mode when any motion interrupt is triggered. Please refer to table 3-2 on page of BNO055 datasheet at https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bno055-ds000.pdf for the settings.
This means that when there is no motion for 5 seconds, BNO055 will enter low power mode automatically consuming 0.5mA. At this time the INT line will stay high. Whenever any motion is detected, INT line will go low immediately and BNO055 will enter normal mode automatically. If your Arduino UNO can capture the falling edge of the INT line, then Arduino UNO can wake up and do something.
When there is no motion for 5 seconds again, BNO055 will enter low power mode again and INT line will become high. So if your Arduino UNO can capture the rising edge of the INT line, then your Arduino UNO can go to sleep mode.
Thanks for your answer!
I tried again, this time reading the voltage of the INT line, as you mentioned, it goes HIGH when the BNO055 enter the low power mode and starts to consum 0.5mA. When the BNO055 detects movement it enters in normal power mode, I am sure because i am reading the consumption with the multimeter and it changes from 0.5mA to 4mA, but the INT line does not go LOW, it keeps on HIGH. So there is no falling edge that I can capture. Should I configure something else in any register?
Thanks for your time.
There is a falling edge on the BNO055 INT pin, but the duration when low is only 1us as shown in the attached JPG file. That is the reason why you don't see the falling edge. If you use a logic analyzer or oscilloscope on the BNO055 INT pin, then you should be able to see the pulse.
Thanks for your answer! I was not able to detect the falling edge in the INT Pin, I guess my problem lies in the configuration of the registers. The attached file shows the register I am modifying. Could you tell me if my configuration is correct? Should I write any other register?
Thank you in advance!