06-02-2020 10:53 AM
Hello
I am using a BNO055 as a compass. This is my process:
- Initialisation (Power Mode Normal, Operation Mode NDOF, external Clock source)
- get calibration register (system, gyro, accel, mag) until they reach "3"
- get the euler heading angle
- go to suspend mode (first go to Config mode, then set Suspend Mode)
Now, what is the correct approach to wakeup the BNO from suspend mode? When I go to the Config mode first and change to Normal mode after, my calibration registers say "0" for all three sensors and the euler heading ist random... After a reset, the calibration registers instantly have a "3" again until I wake the BNO up again.
The BNO is always powered and not turned off.
And by the way whats the sys calib register? sometims all 3 sensors are fully calibrated and the system register says "0".
Thanks for your help
Kind regards
Michael
06-08-2020 06:59 PM
I will suggest to check the proper delay inside the code for each steps since you are able to achive correct output with step by step running.
06-10-2020 03:48 PM
Hello again
the procedure to wake up the bno: Suspend Mode --> Config Mode --> NDOF Mode doesnt work in my case. I always have to do Suspend --> Config --> Normal Power Mode --> NDOF. Is this normal? It seems like the error comes from the wake up function but im struggling to find the reason.
this is my function:
void wakeup_bno(void){
/* _First set Config Mode! */
uint8_t reg[2] = {BNO055_OPR_MODE_ADDR, BNO055_OPERATION_MODE_CONFIG};
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);
/* Enter Normal Mode to wake up*/
reg[0] = BNO055_PWR_MODE_ADDR; reg[1] = BNO055_POWER_MODE_NORMAL;
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);
/* Operation Mode */
reg[0] = BNO055_OPR_MODE_ADDR; reg[1] = BNO055_OPERATION_MODE_NDOF;
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);
}
06-16-2020 01:05 AM
I will suggest you to have only two write of register in the wake up function:
/* Enter Normal Mode to wake up*/
reg[0] = BNO055_PWR_MODE_ADDR; reg[1] = BNO055_POWER_MODE_NORMAL;
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);
/* Operation Mode */
reg[0] = BNO055_OPR_MODE_ADDR; reg[1] = BNO055_OPERATION_MODE_NDOF;
m_xfer_done = false;
twi_reg_write(BNO055_I2C_ADDR1, reg, 2);
nrf_delay_ms(650);