uint8_t loop = 0; uint16_t settings_sel; struct bmp3_settings settings = { 0 }; struct bmp3_status status = { { 0 } }; struct bmp3_data data = { 0 }; initI2C1(); bmp3_interface_init(&dev_bmp390,BMP3_I2C_INTF); bmp3_init(&dev_bmp390); bmp3_check_rslt("bmp3_init", rslt); /* Wake BMP from low power mode */ BMP388_setPowerMode(I2C1, 0xec, 0x1b, 0xff); Delay(2000); settings.int_settings.drdy_en = BMP3_ENABLE; settings.int_settings.latch = BMP3_INT_PIN_LATCH; settings.int_settings.level = BMP3_INT_PIN_ACTIVE_LOW; settings.int_settings.output_mode = BMP3_INT_PIN_OPEN_DRAIN; settings.press_en = BMP3_ENABLE; settings.temp_en = BMP3_ENABLE; settings.odr_filter.press_os = BMP3_OVERSAMPLING_2X; settings.odr_filter.temp_os = BMP3_OVERSAMPLING_2X; settings.odr_filter.odr = BMP3_ODR_0_05_HZ; // Slowed down to see if that helps. settings_sel = BMP3_SEL_PRESS_EN | BMP3_SEL_TEMP_EN | BMP3_SEL_PRESS_OS | BMP3_SEL_TEMP_OS | BMP3_SEL_ODR | BMP3_SEL_DRDY_EN | BMP3_SEL_OUTPUT_MODE | BMP3_SEL_LATCH | BMP3_SEL_LEVEL; rslt = bmp3_set_sensor_settings(settings_sel, &settings, &dev_bmp390); bmp3_check_rslt("sensors_settings",rslt); Delay(2000); settings.op_mode = BMP3_MODE_NORMAL; rslt = bmp3_set_op_mode(&settings, &dev_bmp390); bmp3_check_rslt("bmp3_set_op_mode", rslt); Delay(2000); while (loop < 100000) { rslt = bmp3_get_status(&status, &dev_bmp390); bmp3_check_rslt("bmp3_get_status", rslt); printf("Iterating\n"); /* Read temperature and pressure data iteratively based on data ready interrupt */ if ((rslt == BMP3_OK) && (status.intr.drdy == BMP3_ENABLE)) { printf("Reading\n"); /* * First parameter indicates the type of data to be read * BMP3_PRESS_TEMP : To read pressure and temperature data * BMP3_TEMP : To read only temperature data * BMP3_PRESS : To read only pressure data */ rslt = bmp3_get_sensor_data(BMP3_PRESS_TEMP, &data, &dev_bmp390); bmp3_check_rslt("bmp3_get_sensor_data", rslt); /* NOTE : Read status register again to clear data ready interrupt status */ rslt = bmp3_get_status(&status, &dev_bmp390); bmp3_check_rslt("bmp3_get_status", rslt); #ifdef BMP3_FLOAT_COMPENSATION printf("Data[%d] T: %.2f deg C, P: %.2f Pa\n", loop, (data.temperature), (data.pressure)); #else printf("Data[%d] T: %ld deg C, P: %lu Pa\n", loop, (long int)(int32_t)(data.temperature / 100), (long unsigned int)(uint32_t)(data.pressure / 100)); #endif loop = loop + 1; } }