Attempt to run BME280 in default 'Android' mode -- See datasheet para 3.5.3

This commit is contained in:
Pim van Pelt
2018-04-22 10:23:05 +02:00
parent 498d2d8e03
commit e7367d1cec
2 changed files with 15 additions and 15 deletions

View File

@ -37,21 +37,22 @@ bool mgos_barometer_bme280_create(struct mgos_barometer *dev) {
if (!bme280_data) return false; if (!bme280_data) return false;
dev->user_data=bme280_data; dev->user_data=bme280_data;
// Reset device
if (!mgos_i2c_write_reg_b(dev->i2c, dev->i2caddr, BME280_REG_RESET, 0xB6))
return false;
mgos_usleep(10000);
// Read calibration data
if (!mgos_i2c_read_reg_n(dev->i2c, dev->i2caddr, BME280_REG_TEMPERATURE_CALIB_DIG_T1_LSB, 24, (uint8_t *)bme280_data)) if (!mgos_i2c_read_reg_n(dev->i2c, dev->i2caddr, BME280_REG_TEMPERATURE_CALIB_DIG_T1_LSB, 24, (uint8_t *)bme280_data))
return false; return false;
// Mode | Pressure OS | Temp OS // SPI | 0.5ms period | 16X IIR filter
if (!mgos_i2c_write_reg_b(dev->i2c, dev->i2caddr, BME280_REG_CTRL_MEAS, BME280_MODE_SLEEP | BME280_OVERSAMP_1X << 2 | BME280_OVERSAMP_1X << 5)) if (!mgos_i2c_write_reg_b(dev->i2c, dev->i2caddr, BME280_REG_CONFIG, 0x00 | BME280_STANDBY_500us << 2 | BME280_FILTER_16X << 5))
return false;
mgos_usleep(10000);
// SPI | 250ms period | no filter
if (!mgos_i2c_write_reg_b(dev->i2c, dev->i2caddr, BME280_REG_CONFIG, 0x00 | 0x04 << 2 | 0x00 << 5))
return false; return false;
mgos_usleep(10000); mgos_usleep(10000);
// Mode | Pressure OS | Temp OS // Mode | Pressure OS | Temp OS
if (!mgos_i2c_write_reg_b(dev->i2c, dev->i2caddr, BME280_REG_CTRL_MEAS, BME280_MODE_NORMAL | BME280_OVERSAMP_1X << 2 | BME280_OVERSAMP_1X << 5)) if (!mgos_i2c_write_reg_b(dev->i2c, dev->i2caddr, BME280_REG_CTRL_MEAS, BME280_MODE_NORMAL | BME280_OVERSAMP_16X << 2 | BME280_OVERSAMP_2X << 5))
return false; return false;
dev->capabilities|=MGOS_BAROMETER_CAP_BAROMETER; dev->capabilities|=MGOS_BAROMETER_CAP_BAROMETER;
@ -76,12 +77,6 @@ bool mgos_barometer_bme280_read(struct mgos_barometer *dev) {
bme280_data=(struct mgos_barometer_bme280_data *) dev->user_data; bme280_data=(struct mgos_barometer_bme280_data *) dev->user_data;
if (!bme280_data) return false; if (!bme280_data) return false;
// Forced Mode | 8x OS Pressure | 1x OS Temp
// 0x01 | 0x04 << 2 | 0x01 << 5
if (!mgos_i2c_write_reg_b(dev->i2c, dev->i2caddr, BME280_REG_CTRL_MEAS, 0x01 | 0x04 << 2 | 0x01 << 5))
return false;
mgos_usleep(10000);
// read data from sensor // read data from sensor
uint8_t data[6]; uint8_t data[6];
if (!mgos_i2c_read_reg_n(dev->i2c, dev->i2caddr, BME280_REG_PRESSURE_MSB, 6, data)) if (!mgos_i2c_read_reg_n(dev->i2c, dev->i2caddr, BME280_REG_PRESSURE_MSB, 6, data))

View File

@ -23,7 +23,7 @@
#define BME280_REG_TEMPERATURE_CALIB_DIG_T1_LSB (0x88) #define BME280_REG_TEMPERATURE_CALIB_DIG_T1_LSB (0x88)
#define BME280_OVERSAMP_NONE (0x00) #define BME280_OVERSAMP_SKIPPED (0x00)
#define BME280_OVERSAMP_1X (0x01) #define BME280_OVERSAMP_1X (0x01)
#define BME280_OVERSAMP_2X (0x02) #define BME280_OVERSAMP_2X (0x02)
#define BME280_OVERSAMP_4X (0x03) #define BME280_OVERSAMP_4X (0x03)
@ -38,6 +38,11 @@
#define BME280_STANDBY_1000ms (0x05) #define BME280_STANDBY_1000ms (0x05)
// Note: Datasheet defines 110 == 10ms, 111 == 20ms, but BME280 and BMP280 // Note: Datasheet defines 110 == 10ms, 111 == 20ms, but BME280 and BMP280
// implement this differently. // implement this differently.
#define BME280_FILTER_OFF (0x00)
#define BME280_FILTER_2X (0x01)
#define BME280_FILTER_4X (0x02)
#define BME280_FILTER_8X (0x03)
#define BME280_FILTER_16X (0x04)
struct mgos_barometer_bme280_calib_data { struct mgos_barometer_bme280_calib_data {