From d744cd4b0fc431f64bc4547e3cacdbc99e5704fd Mon Sep 17 00:00:00 2001 From: CTho9305 <44120853+CTho9305@users.noreply.github.com> Date: Sun, 26 Nov 2023 21:34:39 -0600 Subject: [PATCH 1/2] Fix https://github.com/adafruit/Adafruit_CircuitPython_BME680/issues/67 and allow for disabling gas sampling entirely --- adafruit_bme680.py | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/adafruit_bme680.py b/adafruit_bme680.py index 9facea6..3ac85d2 100644 --- a/adafruit_bme680.py +++ b/adafruit_bme680.py @@ -207,6 +207,9 @@ def __init__(self, *, refresh_rate: int = 10) -> None: self._humidity_oversample = 0b010 self._filter = 0b010 + # Gas measurements, as a mask applied to _BME680_RUNGAS + self._run_gas = 0xFF + self._adc_pres = None self._adc_temp = None self._adc_hum = None @@ -389,9 +392,9 @@ def _perform_reading(self) -> None: self._write(_BME680_REG_CTRL_HUM, [self._humidity_oversample]) # gas measurements enabled if self._chip_variant == 0x01: - self._write(_BME680_REG_CTRL_GAS, [_BME680_RUNGAS << 1]) + self._write(_BME680_REG_CTRL_GAS, [(self._run_gas & _BME680_RUNGAS) << 1]) else: - self._write(_BME680_REG_CTRL_GAS, [_BME680_RUNGAS]) + self._write(_BME680_REG_CTRL_GAS, [(self._run_gas & _BME680_RUNGAS)]) ctrl = self._read_byte(_BME680_REG_CTRL_MEAS) ctrl = (ctrl & 0xFC) | 0x01 # enable single shot! self._write(_BME680_REG_CTRL_MEAS, [ctrl]) @@ -492,6 +495,7 @@ def _set_heatr_conf( else: hctrl = _BME68X_DISABLE_HEATER run_gas = _BME68X_DISABLE_GAS_MEAS + self._run_gas = ~(run_gas - 1) ctrl_gas_data_0 = bme_set_bits( ctrl_gas_data_0, _BME68X_HCTRL_MSK, _BME68X_HCTRL_POS, hctrl @@ -598,7 +602,7 @@ def _calc_gas_wait(self, dur: int) -> int: factor: int = 0 durval: int = 0xFF # Max duration - if dur < 0xFC0: + if dur > 0xFC0: return durval while dur > 0x3F: dur = dur / 4 From 08cab898a869d6085023ba9fe05a1c119d2fbc74 Mon Sep 17 00:00:00 2001 From: CTho9305 <44120853+CTho9305@users.noreply.github.com> Date: Mon, 27 Nov 2023 21:39:32 -0600 Subject: [PATCH 2/2] fix review feedback from FoamyGuy - get code closer to Bosch reference. --- adafruit_bme680.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/adafruit_bme680.py b/adafruit_bme680.py index 3ac85d2..b3651e3 100644 --- a/adafruit_bme680.py +++ b/adafruit_bme680.py @@ -602,7 +602,7 @@ def _calc_gas_wait(self, dur: int) -> int: factor: int = 0 durval: int = 0xFF # Max duration - if dur > 0xFC0: + if dur >= 0xFC0: return durval while dur > 0x3F: dur = dur / 4