Hello! I'm currently working with a BMA423 (accelerometer) and I'm trying to get the interrupt working for the any motion configuration. I'm using the API from your github page and can read out the temperature or xyz values for example. I used the motion example as an example and read the post on the bosch community website to further enhance it. This is the code I'm using: --------------------- m_rslt = bma4_interface_selection(&m_bma, BMA42X_VARIANT, i2c); /* Sensor initialization */ m_rslt = bma423_init(&m_bma); /* Upload the configuration file to enable the features of the sensor. */ m_rslt = bma423_write_config_file(&m_bma); /* Enable the accelerometer */ m_rslt = bma4_set_accel_enable(BMA4_ENABLE, &m_bma); /* Accelerometer Configuration Setting */ /* Output data Rate */ m_accel_conf.odr = BMA4_OUTPUT_DATA_RATE_100HZ; /* Gravity range of the sensor (+/- 2G, 4G, 8G, 16G) */ m_accel_conf.range = BMA4_ACCEL_RANGE_16G; /* Bandwidth configure number of sensor samples required to average * if value = 2, then 4 samples are averaged * averaged samples = 2^(val(accel bandwidth)) * Note1 : More info refer datasheets * Note2 : A higher number of averaged samples will result in a lower noise level of the signal, but * since the performance power mode phase is increased, the power consumption will also rise. */ m_accel_conf.bandwidth = BMA4_ACCEL_NORMAL_AVG4; /* Enable the filter performance mode where averaging of samples * will be done based on above set bandwidth and ODR. * There are two modes * 0 -> Averaging samples (Default) * 1 -> No averaging * For more info on No Averaging mode refer datasheets. */ m_accel_conf.perf_mode = BMA4_CONTINUOUS_MODE;//BMA4_CIC_AVG_MODE; /* Set the accel configurations */ m_rslt = bma4_set_accel_config(&m_accel_conf, &m_bma); /* Select the axis for which any/no motion interrupt should be generated */ m_any_no_mot.axes_en = BMA423_EN_ALL_AXIS; /* * Set the slope threshold: * Interrupt will be generated if the slope of all the axis exceeds the threshold (1 bit = 0.48mG) */ m_any_no_mot.threshold = 1; <- I tried several options ranging from 1 to 10 /* * Set the duration for any/no motion interrupt: * Duration defines the number of consecutive data points for which threshold condition must be true(1 bit = 20ms) */ m_any_no_mot.duration = 1; <- I tried several options ranging from 1 to 4 /* Set the threshold, duration and axis enable configuration */ m_rslt = bma423_set_any_mot_config(&m_any_no_mot, &m_bma); /* Map the interrupt pin with that of any-motion and no-motion interrupts. * Interrupt will be generated when any or no-motion is recognized. * BMA423_ANY_MOT_INT seems to be defined incorrectly according to the datasheet. I tried BMA423_ANY_MOT_INT (0x20), but that did not work. * 0x40 sets the seventh bit on 1, which seems to be the correct value according to the datasheet. I also tried 0xFF to set it al to 1 and tried 0x00 to set it all to 0. */ m_rslt = bma423_map_interrupt(BMA4_INTR1_MAP, 0x40, BMA4_ENABLE, &m_bma); m_int_config.edge_ctrl = BMA4_LEVEL_TRIGGER; m_int_config.lvl = BMA4_ACTIVE_HIGH; m_int_config.od = BMA4_PUSH_PULL; m_int_config.output_en = BMA4_OUTPUT_ENABLE; m_int_config.input_en = BMA4_INPUT_DISABLE; m_rslt = bma4_set_int_pin_config(&m_int_config, BMA4_INTR1_MAP, &m_bma); m_rslt = bma4_set_interrupt_mode(BMA4_LATCH_MODE, &m_bma); # in a process function: bma4_read_accel_xyz(&m_sens_data, &m_bma); <- works! bma4_get_temperature(&temperature, BMA4_DEG, &m_bma); <- works! m_rslt = bma423_read_int_status(&m_int_status, &m_bma); <- does not work. m_rslt is always 0x00 and m_int_status is also always 0x00. I'm shaking it quite heavily and for several seconds. -------------------- I hope someone can help out! Thanks in advance.
... View more