Bosch Sensortec Community

    cancel
    Showing results for 
    Search instead for 
    Did you mean: 

    Wakeup BNO055 from suspend mode

    Wakeup BNO055 from suspend mode

    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

    7 REPLIES 7

    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.

    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);
    }

    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);

    Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist