From db8689bd9a0d08631e7faa8d18d1d3855be079f8 Mon Sep 17 00:00:00 2001 From: hh Date: Mon, 19 Nov 2018 21:47:38 +0100 Subject: [PATCH] bme280_xxx: Check the status register for completion Instead of just waiting a safe time, check the status register for completion of the measurement. The drawback is a slightly increased power consumption. --- bme280_float.py | 8 ++++---- bme280_int.py | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bme280_float.py b/bme280_float.py index 9102b73..957f149 100644 --- a/bme280_float.py +++ b/bme280_float.py @@ -47,6 +47,7 @@ BME280_OSAMPLE_8 = 4 BME280_OSAMPLE_16 = 5 BME280_REGISTER_CONTROL_HUM = 0xF2 +BME280_REGISTER_STATUS = 0xF3 BME280_REGISTER_CONTROL = 0xF4 @@ -115,10 +116,9 @@ class BME280: self.i2c.writeto_mem(self.address, BME280_REGISTER_CONTROL, self._l1_barray) - sleep_time = 1250 + 2300 * (1 << self._mode) - sleep_time = sleep_time + 2300 * (1 << self._mode) + 575 - sleep_time = sleep_time + 2300 * (1 << self._mode) + 575 - time.sleep_us(sleep_time) # Wait the required time + # Wait for conversion to complete + while self.i2c.readfrom_mem(self.address, BME280_REGISTER_STATUS, 1)[0] & 0x08: + time.sleep_ms(10) # burst readout from 0xF7 to 0xFE, recommended by datasheet self.i2c.readfrom_mem_into(self.address, 0xF7, self._l8_barray) diff --git a/bme280_int.py b/bme280_int.py index a23876e..b2427a0 100644 --- a/bme280_int.py +++ b/bme280_int.py @@ -47,6 +47,7 @@ BME280_OSAMPLE_8 = 4 BME280_OSAMPLE_16 = 5 BME280_REGISTER_CONTROL_HUM = 0xF2 +BME280_REGISTER_STATUS = 0xF3 BME280_REGISTER_CONTROL = 0xF4 @@ -114,10 +115,9 @@ class BME280: self.i2c.writeto_mem(self.address, BME280_REGISTER_CONTROL, self._l1_barray) - sleep_time = 1250 + 2300 * (1 << self._mode) - sleep_time = sleep_time + 2300 * (1 << self._mode) + 575 - sleep_time = sleep_time + 2300 * (1 << self._mode) + 575 - time.sleep_us(sleep_time) # Wait the required time + # Wait for conversion to complete + while self.i2c.readfrom_mem(self.address, BME280_REGISTER_STATUS, 1)[0] & 0x08: + time.sleep_ms(10) # burst readout from 0xF7 to 0xFE, recommended by datasheet self.i2c.readfrom_mem_into(self.address, 0xF7, self._l8_barray)