Hi, We are having problems with significant motion interrupt triggering. It behaves really flaky. On some program run, interrupt behaves as it should, and sometimes, it cannot be triggered, no matter what motion you do . My opinion is that BMI isn't configured properly every time, altough bmi160_set_int_config function returns that is executed properly. Flow in program is: Initialize sensor through bmi160_init Configure sensor with these parameters: _bmi160_sensor.accel_cfg.odr = BMI160_ACCEL_ODR_1600HZ;
_bmi160_sensor.accel_cfg.range = BMI160_ACCEL_RANGE_2G;
_bmi160_sensor.accel_cfg.bw = BMI160_ACCEL_BW_NORMAL_AVG4;
_bmi160_sensor.accel_cfg.power = BMI160_ACCEL_NORMAL_MODE;
_bmi160_sensor.gyro_cfg.odr = BMI160_GYRO_ODR_3200HZ;
_bmi160_sensor.gyro_cfg.range = BMI160_GYRO_RANGE_2000_DPS;
_bmi160_sensor.gyro_cfg.bw = BMI160_GYRO_BW_NORMAL_MODE;
_bmi160_sensor.gyro_cfg.power = BMI160_GYRO_NORMAL_MODE; Configure sensor interrupt with these parameters: interrupt_config.int_channel = BMI160_INT_CHANNEL_1;
interrupt_config.int_type = BMI160_ACC_SIG_MOTION_INT;
interrupt_config.int_pin_settg.output_en = BMI160_ENABLE;
interrupt_config.int_pin_settg.output_mode = BMI160_DISABLE;
interrupt_config.int_pin_settg.output_type = BMI160_DISABLE;
interrupt_config.int_pin_settg.edge_ctrl = BMI160_ENABLE;
interrupt_config.int_pin_settg.input_en = BMI160_DISABLE;
interrupt_config.int_pin_settg.latch_dur = BMI160_LATCH_DUR_NONE;
// Proof time of motion detection. 0=0.24s, 1=0.48s, 2=0.96s, 3=1.92s
interrupt_config.int_type_cfg.acc_sig_motion_int.sig_mot_proof = sig_mot_proof;
// Time to skip between two motion detect check. 0=1.28s, 1=2.56s, 2=5.12s,
// 3=10.24s
interrupt_config.int_type_cfg.acc_sig_motion_int.sig_mot_skip = sig_mot_skip;
/* Threshold value. (2-g range) -> Threshold * 3.91 mg
(4-g range) -> Threshold * 7.81 mg
(8-g range) -> Threshold * 15.63 mg
(16-g range) -> Threshold * 31.25 mg */
interrupt_config.int_type_cfg.acc_sig_motion_int.sig_mot_thres = sig_mot_thres;
int8_t result = bmi160_set_int_config(&interrupt_config, &_bmi160_sensor); Reading data and interrupt data in separate thread Data from accelerometer works fine no matter what, but interrupt isn't. Do you have any clue what can be problem here? Do I need to change some values in configuration? Do I need to change an order of execution, so set interrupt configuration before sensor configuration? Looking forward for your answer. Best regards, Josip
... View more