From 84aa87ab14d05ed42c7e15f00494f390f969f7a6 Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Thu, 1 Aug 2024 09:51:08 -0500 Subject: [PATCH 01/12] add support to modify gain/integration for SI1145 --- adafruit_si1145.py | 75 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 75 insertions(+) diff --git a/adafruit_si1145.py b/adafruit_si1145.py index 18448a0..2690d96 100644 --- a/adafruit_si1145.py +++ b/adafruit_si1145.py @@ -66,6 +66,46 @@ _RAM_CHLIST = const(0x01) +# Gain Parameters +_ALS_VIS_ADC_GAIN = const(0x11) +_ALS_VIS_ADC_MISC = const(0x12) +_ALS_IR_ADC_GAIN = const(0x1E) +_ALS_IR_ADC_MISC = const(0x1F) + + +# Gain technically increases integration time +ALS_GAIN_DIV1 = const(0x00) +ALS_GAIN_DIV2 = const(0x01) +ALS_GAIN_DIV4 = const(0x02) +ALS_GAIN_DIV8 = const(0x03) +ALS_GAIN_DIV16 = const(0x04) +ALS_GAIN_DIV32 = const(0x05) +ALS_GAIN_DIV64 = const(0x06) +ALS_GAIN_DIV128 = const(0x07) + +ALS_GAIN_VAL_MAP = { + 1: ALS_GAIN_DIV1, + 2: ALS_GAIN_DIV2, + 4: ALS_GAIN_DIV4, + 8: ALS_GAIN_DIV8, + 16: ALS_GAIN_DIV16, + 32: ALS_GAIN_DIV32, + 64: ALS_GAIN_DIV64, + 128: ALS_GAIN_DIV128, +} + +ALS_GAIN_DIV_MAP = { + ALS_GAIN_DIV1: 1, + ALS_GAIN_DIV2: 2, + ALS_GAIN_DIV4: 4, + ALS_GAIN_DIV8: 8, + ALS_GAIN_DIV16: 16, + ALS_GAIN_DIV32: 32, + ALS_GAIN_DIV64: 64, + ALS_GAIN_DIV128: 128, +} + + class SI1145: """Driver for the SI1145 UV, IR, Visible Light Sensor.""" @@ -143,6 +183,41 @@ def uv_index(self) -> float: self._send_command(_CMD_ALS_FORCE) return self._aux_data[0] / 100 + + @property + def vis_gain(self) -> int: + div = self._param_query(_ALS_VIS_ADC_GAIN) + return ALS_GAIN_DIV_MAP[div] + + @vis_gain.setter + def vis_gain(self, value: int) -> None: + assert value in ALS_GAIN_VAL_MAP.keys() + self._param_set(_ALS_VIS_ADC_GAIN, ALS_GAIN_VAL_MAP[value]) + + + @property + def ir_gain(self) -> int: + div = self._param_query(_ALS_IR_ADC_GAIN) + return ALS_GAIN_DIV_MAP[div] + + @ir_gain.setter + def ir_gain(self, value: int) -> None: + assert value in ALS_GAIN_VAL_MAP.keys() + self._param_set(_ALS_IR_ADC_GAIN, ALS_GAIN_VAL_MAP[value]) + + + @property + def gain(self) -> Tuple[int, int]: + # return both vis and ir gains + return self.vis_gain, self.ir_gain + + @gain.setter + def gain(self, value: int) -> None: + # set both vis and ir gains + self.vis_gain = value + self.ir_gain = value + + def reset(self) -> None: """Perform a software reset of the firmware.""" self._send_command(_CMD_RESET) From faf208d2f61b7bacf92cc2674580fc920fb23154 Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Thu, 1 Aug 2024 10:13:35 -0500 Subject: [PATCH 02/12] update example with gain settings --- examples/si1145_simpletest.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/examples/si1145_simpletest.py b/examples/si1145_simpletest.py index 77e459d..e7c2542 100644 --- a/examples/si1145_simpletest.py +++ b/examples/si1145_simpletest.py @@ -15,6 +15,10 @@ # setup sensor si1145 = adafruit_si1145.SI1145(i2c) +# set gains (1, 2, 4, 8, 16, 32, 64, 128) +si1145.vis_gain = 16 +si1145.ir_gain = 16 + # loop forever printing values while True: vis, ir = si1145.als From 474cdb4cce079af6a0e5402f189f041657d75257 Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Fri, 2 Aug 2024 13:02:50 -0500 Subject: [PATCH 03/12] add properties to enable high range modes --- adafruit_si1145.py | 47 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/adafruit_si1145.py b/adafruit_si1145.py index 2690d96..9147b94 100644 --- a/adafruit_si1145.py +++ b/adafruit_si1145.py @@ -126,8 +126,13 @@ def __init__(self, i2c: I2C, address: int = _DEFAULT_ADDRESS) -> None: self._write_register(_HW_KEY, 0x17) self._als_enabled = True self._uv_index_enabled = True + self._als_vis_range_high = False + self._als_ir_range_high = False + self.als_enabled = self._als_enabled self.uv_index_enabled = self._uv_index_enabled + self.als_vis_range_high = self._als_vis_range_high + self.als_ir_range_high = self._als_ir_range_high @property def device_info(self) -> Tuple[int, int, int]: @@ -218,6 +223,48 @@ def gain(self, value: int) -> None: self.ir_gain = value + @property + def als_vis_range_high(self) -> bool: + return self._als_vis_range_high + + @als_vis_range_high.setter + def als_vis_range_high(self, enable: bool) -> None: + vis_adc_misc = self._param_query(_ALS_VIS_ADC_MISC) + if enable: + vis_adc_misc |= 0b00100000 + else: + vis_adc_misc &= ~0b00100000 + self._param_set(_ALS_VIS_ADC_MISC, vis_adc_misc) + self._als_vis_range_high = enable + + + @property + def als_ir_range_high(self) -> bool: + return self._als_ir_range_high + + @als_ir_range_high.setter + def als_ir_range_high(self, enable: bool) -> None: + ir_adc_misc = self._param_query(_ALS_IR_ADC_MISC) + if enable: + ir_adc_misc |= 0b00100000 + else: + ir_adc_misc &= ~0b00100000 + self._param_set(_ALS_IR_ADC_MISC, ir_adc_misc) + self._als_ir_range_high = enable + + + @property + def als_range_high(self) -> Tuple[bool, bool]: + # return both vis and ir range + return self._als_vis_range_high, self._als_ir_range_high + + @als_range_high.setter + def als_range_high(self, enable: bool) -> None: + # set both vis and ir ranges + self.als_vis_range_high = enable + self.als_ir_range_high = enable + + def reset(self) -> None: """Perform a software reset of the firmware.""" self._send_command(_CMD_RESET) From 05fdadec778695de2083d023f78516c0b3ccaef5 Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Mon, 5 Aug 2024 17:17:27 -0500 Subject: [PATCH 04/12] mask gain bits on read --- adafruit_si1145.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/adafruit_si1145.py b/adafruit_si1145.py index 9147b94..21fa1c9 100644 --- a/adafruit_si1145.py +++ b/adafruit_si1145.py @@ -192,6 +192,7 @@ def uv_index(self) -> float: @property def vis_gain(self) -> int: div = self._param_query(_ALS_VIS_ADC_GAIN) + div &= ~0b11111000 return ALS_GAIN_DIV_MAP[div] @vis_gain.setter @@ -203,6 +204,7 @@ def vis_gain(self, value: int) -> None: @property def ir_gain(self) -> int: div = self._param_query(_ALS_IR_ADC_GAIN) + div &= ~0b11111000 return ALS_GAIN_DIV_MAP[div] @ir_gain.setter From c4e301e8994cd1a4e77dcb31edd2a2dc95454343 Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Mon, 5 Aug 2024 17:39:53 -0500 Subject: [PATCH 05/12] read high range setting directly --- adafruit_si1145.py | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/adafruit_si1145.py b/adafruit_si1145.py index 21fa1c9..6628f29 100644 --- a/adafruit_si1145.py +++ b/adafruit_si1145.py @@ -126,13 +126,9 @@ def __init__(self, i2c: I2C, address: int = _DEFAULT_ADDRESS) -> None: self._write_register(_HW_KEY, 0x17) self._als_enabled = True self._uv_index_enabled = True - self._als_vis_range_high = False - self._als_ir_range_high = False self.als_enabled = self._als_enabled self.uv_index_enabled = self._uv_index_enabled - self.als_vis_range_high = self._als_vis_range_high - self.als_ir_range_high = self._als_ir_range_high @property def device_info(self) -> Tuple[int, int, int]: @@ -227,7 +223,8 @@ def gain(self, value: int) -> None: @property def als_vis_range_high(self) -> bool: - return self._als_vis_range_high + vis_adc_misc = self._param_query(_ALS_VIS_ADC_MISC) + return bool((vis_adc_misc & ~0b11011111) >> 5) @als_vis_range_high.setter def als_vis_range_high(self, enable: bool) -> None: @@ -237,12 +234,12 @@ def als_vis_range_high(self, enable: bool) -> None: else: vis_adc_misc &= ~0b00100000 self._param_set(_ALS_VIS_ADC_MISC, vis_adc_misc) - self._als_vis_range_high = enable @property def als_ir_range_high(self) -> bool: - return self._als_ir_range_high + ir_adc_misc = self._param_query(_ALS_IR_ADC_MISC) + return bool((ir_adc_misc & ~0b11011111) >> 5) @als_ir_range_high.setter def als_ir_range_high(self, enable: bool) -> None: @@ -252,7 +249,6 @@ def als_ir_range_high(self, enable: bool) -> None: else: ir_adc_misc &= ~0b00100000 self._param_set(_ALS_IR_ADC_MISC, ir_adc_misc) - self._als_ir_range_high = enable @property From b83d0302912dafe93e157394fe03f108d44352ab Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Tue, 6 Aug 2024 13:13:06 -0500 Subject: [PATCH 06/12] update example with high signal range --- examples/si1145_simpletest.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/examples/si1145_simpletest.py b/examples/si1145_simpletest.py index e7c2542..9cf25cb 100644 --- a/examples/si1145_simpletest.py +++ b/examples/si1145_simpletest.py @@ -15,10 +15,18 @@ # setup sensor si1145 = adafruit_si1145.SI1145(i2c) + +# High Signal Range mode divides gain by 14.5 +# Useful for direct sunlight operation +#si1145.als_vis_range_high = True +#si1145.als_ir_range_high = True + + # set gains (1, 2, 4, 8, 16, 32, 64, 128) si1145.vis_gain = 16 si1145.ir_gain = 16 + # loop forever printing values while True: vis, ir = si1145.als From e9fddfd756ee88c48b7d0f9d9397774dcf7710fb Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Thu, 29 Aug 2024 16:31:58 -0500 Subject: [PATCH 07/12] script to test various ranges --- examples/si1145_test_gains.py | 70 +++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 examples/si1145_test_gains.py diff --git a/examples/si1145_test_gains.py b/examples/si1145_test_gains.py new file mode 100644 index 0000000..104878b --- /dev/null +++ b/examples/si1145_test_gains.py @@ -0,0 +1,70 @@ +# SPDX-FileCopyrightText: 2017 Scott Shawcroft, written for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2022 Carter Nelson for Adafruit Industries +# +# SPDX-License-Identifier: Unlicense + +import time +import board +import adafruit_si1145 + +# setup I2C bus using board default +# change as needed for specific boards +i2c = board.I2C() # uses board.SCL and board.SDA +# i2c = board.STEMMA_I2C() # For using the built-in STEMMA QT connector on a microcontroller + +# setup sensor +si1145 = adafruit_si1145.SI1145(i2c) + + +print('Default Vis Gain: {}'.format(si1145.vis_gain)) +print('Default IR Gain: {}'.format(si1145.ir_gain)) +print('Default Vis High range: {}'.format(str(si1145.als_vis_range_high))) +print('Default IR High range: {}'.format(str(si1145.als_ir_range_high))) +print() + + +### Low range +si1145.als_range_high = False # both settings +#si1145.als_vis_range_high = False +#si1145.als_ir_range_high = False +time.sleep(0.5) + +# test reading attributes +print('Vis High range: {}'.format(str(si1145.als_vis_range_high))) +print('IR High range: {}'.format(str(si1145.als_ir_range_high))) +print() + + +for gain in (1, 2, 4, 8, 16, 32, 64, 128): + si1145.gain = gain # both gains + #si1145.vis_gain = gain + #si1145.ir_gain = gain + + # test reading attributes + print('Vis Gain: {}'.format(si1145.vis_gain)) + print('IR Gain: {}'.format(si1145.ir_gain)) + + vis, ir = si1145.als + uv_index = si1145.uv_index + print("Visible = {}, Infrared = {}, UV Index = {}".format(vis, ir, uv_index)) + print() + time.sleep(0.5) + + +### High range +# In high range mode, sensor gain should be ~14.5 +si1145.als_range_high = True # both settings +#si1145.als_vis_range_high = True +#si1145.als_ir_range_high = True +time.sleep(0.5) + + +# test reading attributes +print('Vis High range: {}'.format(str(si1145.als_vis_range_high))) +print('IR High range: {}'.format(str(si1145.als_ir_range_high))) +print() + + +vis, ir = si1145.als +uv_index = si1145.uv_index +print("Visible = {}, Infrared = {}, UV Index = {}".format(vis, ir, uv_index)) From 62d7dfb91daa39b472e8596a2f96d6d87b5559c1 Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Fri, 30 Aug 2024 10:52:48 -0500 Subject: [PATCH 08/12] simplify settings --- adafruit_si1145.py | 50 +++++++++-------------------------- examples/si1145_simpletest.py | 17 +++++++++--- examples/si1145_test_gains.py | 14 +++++++++- 3 files changed, 39 insertions(+), 42 deletions(-) diff --git a/adafruit_si1145.py b/adafruit_si1145.py index 6628f29..a2b7414 100644 --- a/adafruit_si1145.py +++ b/adafruit_si1145.py @@ -74,36 +74,14 @@ # Gain technically increases integration time -ALS_GAIN_DIV1 = const(0x00) -ALS_GAIN_DIV2 = const(0x01) -ALS_GAIN_DIV4 = const(0x02) -ALS_GAIN_DIV8 = const(0x03) -ALS_GAIN_DIV16 = const(0x04) -ALS_GAIN_DIV32 = const(0x05) -ALS_GAIN_DIV64 = const(0x06) -ALS_GAIN_DIV128 = const(0x07) - -ALS_GAIN_VAL_MAP = { - 1: ALS_GAIN_DIV1, - 2: ALS_GAIN_DIV2, - 4: ALS_GAIN_DIV4, - 8: ALS_GAIN_DIV8, - 16: ALS_GAIN_DIV16, - 32: ALS_GAIN_DIV32, - 64: ALS_GAIN_DIV64, - 128: ALS_GAIN_DIV128, -} - -ALS_GAIN_DIV_MAP = { - ALS_GAIN_DIV1: 1, - ALS_GAIN_DIV2: 2, - ALS_GAIN_DIV4: 4, - ALS_GAIN_DIV8: 8, - ALS_GAIN_DIV16: 16, - ALS_GAIN_DIV32: 32, - ALS_GAIN_DIV64: 64, - ALS_GAIN_DIV128: 128, -} +GAIN_ADC_CLOCK_DIV_1 = const(0x00) +GAIN_ADC_CLOCK_DIV_2 = const(0x01) +GAIN_ADC_CLOCK_DIV_4 = const(0x02) +GAIN_ADC_CLOCK_DIV_8 = const(0x03) +GAIN_ADC_CLOCK_DIV_16 = const(0x04) +GAIN_ADC_CLOCK_DIV_32 = const(0x05) +GAIN_ADC_CLOCK_DIV_64 = const(0x06) +GAIN_ADC_CLOCK_DIV_128 = const(0x07) class SI1145: @@ -188,25 +166,21 @@ def uv_index(self) -> float: @property def vis_gain(self) -> int: div = self._param_query(_ALS_VIS_ADC_GAIN) - div &= ~0b11111000 - return ALS_GAIN_DIV_MAP[div] + return div & ~0b11111000 @vis_gain.setter def vis_gain(self, value: int) -> None: - assert value in ALS_GAIN_VAL_MAP.keys() - self._param_set(_ALS_VIS_ADC_GAIN, ALS_GAIN_VAL_MAP[value]) + self._param_set(_ALS_VIS_ADC_GAIN, value) @property def ir_gain(self) -> int: div = self._param_query(_ALS_IR_ADC_GAIN) - div &= ~0b11111000 - return ALS_GAIN_DIV_MAP[div] + return div & ~0b11111000 @ir_gain.setter def ir_gain(self, value: int) -> None: - assert value in ALS_GAIN_VAL_MAP.keys() - self._param_set(_ALS_IR_ADC_GAIN, ALS_GAIN_VAL_MAP[value]) + self._param_set(_ALS_IR_ADC_GAIN, value) @property diff --git a/examples/si1145_simpletest.py b/examples/si1145_simpletest.py index 9cf25cb..94b248d 100644 --- a/examples/si1145_simpletest.py +++ b/examples/si1145_simpletest.py @@ -22,9 +22,20 @@ #si1145.als_ir_range_high = True -# set gains (1, 2, 4, 8, 16, 32, 64, 128) -si1145.vis_gain = 16 -si1145.ir_gain = 16 +# Gain technically increases integration time +# si1145.GAIN_ADC_CLOCK_DIV_1 (1x gain, default) +# si1145.GAIN_ADC_CLOCK_DIV_2 (2x gain) +# si1145.GAIN_ADC_CLOCK_DIV_4 (4x gain) +# si1145.GAIN_ADC_CLOCK_DIV_8 (8x gain) +# si1145.GAIN_ADC_CLOCK_DIV_16 (16x gain) +# si1145.GAIN_ADC_CLOCK_DIV_32 (32x gain) +# si1145.GAIN_ADC_CLOCK_DIV_64 (64x gain) +# si1145.GAIN_ADC_CLOCK_DIV_128 (128x gain) + + +si1145.gain = si1145.GAIN_ADC_CLOCK_DIV_16 # changes vis and ir gains +#si1145.vis_gain = si1145.GAIN_ADC_CLOCK_DIV_16 +#si1145.ir_gain = si1145.GAIN_ADC_CLOCK_DIV_16 # loop forever printing values diff --git a/examples/si1145_test_gains.py b/examples/si1145_test_gains.py index 104878b..e7bb02c 100644 --- a/examples/si1145_test_gains.py +++ b/examples/si1145_test_gains.py @@ -35,7 +35,19 @@ print() -for gain in (1, 2, 4, 8, 16, 32, 64, 128): +gain_list = ( + si1145.GAIN_ADC_CLOCK_DIV_1, + si1145.GAIN_ADC_CLOCK_DIV_2, + si1145.GAIN_ADC_CLOCK_DIV_4, + si1145.GAIN_ADC_CLOCK_DIV_8, + si1145.GAIN_ADC_CLOCK_DIV_16, + si1145.GAIN_ADC_CLOCK_DIV_32, + si1145.GAIN_ADC_CLOCK_DIV_64, + si1145.GAIN_ADC_CLOCK_DIV_128, +) + + +for gain in gain_list: si1145.gain = gain # both gains #si1145.vis_gain = gain #si1145.ir_gain = gain From 6affa746cd4b0f1861c0c0a7155aa54d89b28574 Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Fri, 30 Aug 2024 11:01:38 -0500 Subject: [PATCH 09/12] typo --- examples/si1145_simpletest.py | 26 +++++++++++++------------- examples/si1145_test_gains.py | 16 ++++++++-------- 2 files changed, 21 insertions(+), 21 deletions(-) diff --git a/examples/si1145_simpletest.py b/examples/si1145_simpletest.py index 94b248d..05b10f5 100644 --- a/examples/si1145_simpletest.py +++ b/examples/si1145_simpletest.py @@ -23,19 +23,19 @@ # Gain technically increases integration time -# si1145.GAIN_ADC_CLOCK_DIV_1 (1x gain, default) -# si1145.GAIN_ADC_CLOCK_DIV_2 (2x gain) -# si1145.GAIN_ADC_CLOCK_DIV_4 (4x gain) -# si1145.GAIN_ADC_CLOCK_DIV_8 (8x gain) -# si1145.GAIN_ADC_CLOCK_DIV_16 (16x gain) -# si1145.GAIN_ADC_CLOCK_DIV_32 (32x gain) -# si1145.GAIN_ADC_CLOCK_DIV_64 (64x gain) -# si1145.GAIN_ADC_CLOCK_DIV_128 (128x gain) - - -si1145.gain = si1145.GAIN_ADC_CLOCK_DIV_16 # changes vis and ir gains -#si1145.vis_gain = si1145.GAIN_ADC_CLOCK_DIV_16 -#si1145.ir_gain = si1145.GAIN_ADC_CLOCK_DIV_16 +# adafruit_si1145.GAIN_ADC_CLOCK_DIV_1 (1x gain, default) +# adafruit_si1145.GAIN_ADC_CLOCK_DIV_2 (2x gain) +# adafruit_si1145.GAIN_ADC_CLOCK_DIV_4 (4x gain) +# adafruit_si1145.GAIN_ADC_CLOCK_DIV_8 (8x gain) +# adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 (16x gain) +# adafruit_si1145.GAIN_ADC_CLOCK_DIV_32 (32x gain) +# adafruit_si1145.GAIN_ADC_CLOCK_DIV_64 (64x gain) +# adafruit_si1145.GAIN_ADC_CLOCK_DIV_128 (128x gain) + + +si1145.gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 # changes vis and ir gains +#si1145.vis_gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 +#si1145.ir_gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 # loop forever printing values diff --git a/examples/si1145_test_gains.py b/examples/si1145_test_gains.py index e7bb02c..b21107a 100644 --- a/examples/si1145_test_gains.py +++ b/examples/si1145_test_gains.py @@ -36,14 +36,14 @@ gain_list = ( - si1145.GAIN_ADC_CLOCK_DIV_1, - si1145.GAIN_ADC_CLOCK_DIV_2, - si1145.GAIN_ADC_CLOCK_DIV_4, - si1145.GAIN_ADC_CLOCK_DIV_8, - si1145.GAIN_ADC_CLOCK_DIV_16, - si1145.GAIN_ADC_CLOCK_DIV_32, - si1145.GAIN_ADC_CLOCK_DIV_64, - si1145.GAIN_ADC_CLOCK_DIV_128, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_1, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_2, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_4, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_8, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_16, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_32, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_64, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_128, ) From 024cbd3142a2c97a987d57722933c46d75a84891 Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Thu, 12 Sep 2024 14:15:31 -0500 Subject: [PATCH 10/12] pylint updates --- adafruit_si1145.py | 15 ++++++++------- examples/si1145_simpletest.py | 8 ++++---- examples/si1145_test_gains.py | 32 ++++++++++++++++---------------- 3 files changed, 28 insertions(+), 27 deletions(-) diff --git a/adafruit_si1145.py b/adafruit_si1145.py index a2b7414..99ad31d 100644 --- a/adafruit_si1145.py +++ b/adafruit_si1145.py @@ -87,6 +87,8 @@ class SI1145: """Driver for the SI1145 UV, IR, Visible Light Sensor.""" + # pylint: disable=too-many-instance-attributes, maybe-no-member + _device_info = Struct(_PART_ID, " float: self._send_command(_CMD_ALS_FORCE) return self._aux_data[0] / 100 - @property def vis_gain(self) -> int: + """Visible gain value""" div = self._param_query(_ALS_VIS_ADC_GAIN) return div & ~0b11111000 @@ -172,9 +174,9 @@ def vis_gain(self) -> int: def vis_gain(self, value: int) -> None: self._param_set(_ALS_VIS_ADC_GAIN, value) - @property def ir_gain(self) -> int: + """IR gain value""" div = self._param_query(_ALS_IR_ADC_GAIN) return div & ~0b11111000 @@ -182,9 +184,9 @@ def ir_gain(self) -> int: def ir_gain(self, value: int) -> None: self._param_set(_ALS_IR_ADC_GAIN, value) - @property def gain(self) -> Tuple[int, int]: + """Visble and IR gain values""" # return both vis and ir gains return self.vis_gain, self.ir_gain @@ -194,9 +196,9 @@ def gain(self, value: int) -> None: self.vis_gain = value self.ir_gain = value - @property def als_vis_range_high(self) -> bool: + """Visible high range value""" vis_adc_misc = self._param_query(_ALS_VIS_ADC_MISC) return bool((vis_adc_misc & ~0b11011111) >> 5) @@ -209,9 +211,9 @@ def als_vis_range_high(self, enable: bool) -> None: vis_adc_misc &= ~0b00100000 self._param_set(_ALS_VIS_ADC_MISC, vis_adc_misc) - @property def als_ir_range_high(self) -> bool: + """IR high range value""" ir_adc_misc = self._param_query(_ALS_IR_ADC_MISC) return bool((ir_adc_misc & ~0b11011111) >> 5) @@ -224,9 +226,9 @@ def als_ir_range_high(self, enable: bool) -> None: ir_adc_misc &= ~0b00100000 self._param_set(_ALS_IR_ADC_MISC, ir_adc_misc) - @property def als_range_high(self) -> Tuple[bool, bool]: + """Visbile and IR high range values""" # return both vis and ir range return self._als_vis_range_high, self._als_ir_range_high @@ -236,7 +238,6 @@ def als_range_high(self, enable: bool) -> None: self.als_vis_range_high = enable self.als_ir_range_high = enable - def reset(self) -> None: """Perform a software reset of the firmware.""" self._send_command(_CMD_RESET) diff --git a/examples/si1145_simpletest.py b/examples/si1145_simpletest.py index 05b10f5..0be78f5 100644 --- a/examples/si1145_simpletest.py +++ b/examples/si1145_simpletest.py @@ -18,8 +18,8 @@ # High Signal Range mode divides gain by 14.5 # Useful for direct sunlight operation -#si1145.als_vis_range_high = True -#si1145.als_ir_range_high = True +# si1145.als_vis_range_high = True +# si1145.als_ir_range_high = True # Gain technically increases integration time @@ -34,8 +34,8 @@ si1145.gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 # changes vis and ir gains -#si1145.vis_gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 -#si1145.ir_gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 +# si1145.vis_gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 +# si1145.ir_gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 # loop forever printing values diff --git a/examples/si1145_test_gains.py b/examples/si1145_test_gains.py index b21107a..4cc4ce1 100644 --- a/examples/si1145_test_gains.py +++ b/examples/si1145_test_gains.py @@ -16,22 +16,22 @@ si1145 = adafruit_si1145.SI1145(i2c) -print('Default Vis Gain: {}'.format(si1145.vis_gain)) -print('Default IR Gain: {}'.format(si1145.ir_gain)) -print('Default Vis High range: {}'.format(str(si1145.als_vis_range_high))) -print('Default IR High range: {}'.format(str(si1145.als_ir_range_high))) +print("Default Vis Gain: {}".format(si1145.vis_gain)) +print("Default IR Gain: {}".format(si1145.ir_gain)) +print("Default Vis High range: {}".format(str(si1145.als_vis_range_high))) +print("Default IR High range: {}".format(str(si1145.als_ir_range_high))) print() ### Low range si1145.als_range_high = False # both settings -#si1145.als_vis_range_high = False -#si1145.als_ir_range_high = False +# si1145.als_vis_range_high = False +# si1145.als_ir_range_high = False time.sleep(0.5) # test reading attributes -print('Vis High range: {}'.format(str(si1145.als_vis_range_high))) -print('IR High range: {}'.format(str(si1145.als_ir_range_high))) +print("Vis High range: {}".format(str(si1145.als_vis_range_high))) +print("IR High range: {}".format(str(si1145.als_ir_range_high))) print() @@ -49,12 +49,12 @@ for gain in gain_list: si1145.gain = gain # both gains - #si1145.vis_gain = gain - #si1145.ir_gain = gain + # si1145.vis_gain = gain + # si1145.ir_gain = gain # test reading attributes - print('Vis Gain: {}'.format(si1145.vis_gain)) - print('IR Gain: {}'.format(si1145.ir_gain)) + print("Vis Gain: {}".format(si1145.vis_gain)) + print("IR Gain: {}".format(si1145.ir_gain)) vis, ir = si1145.als uv_index = si1145.uv_index @@ -66,14 +66,14 @@ ### High range # In high range mode, sensor gain should be ~14.5 si1145.als_range_high = True # both settings -#si1145.als_vis_range_high = True -#si1145.als_ir_range_high = True +# si1145.als_vis_range_high = True +# si1145.als_ir_range_high = True time.sleep(0.5) # test reading attributes -print('Vis High range: {}'.format(str(si1145.als_vis_range_high))) -print('IR High range: {}'.format(str(si1145.als_ir_range_high))) +print("Vis High range: {}".format(str(si1145.als_vis_range_high))) +print("IR High range: {}".format(str(si1145.als_ir_range_high))) print() From dbf0d97aa941482c841bd297f1ee92b103fc57cb Mon Sep 17 00:00:00 2001 From: Aaron W Morris Date: Tue, 17 Sep 2024 10:10:00 -0500 Subject: [PATCH 11/12] update copyright notices --- adafruit_si1145.py | 1 + examples/si1145_test_gains.py | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/adafruit_si1145.py b/adafruit_si1145.py index 99ad31d..1e2eca7 100644 --- a/adafruit_si1145.py +++ b/adafruit_si1145.py @@ -1,5 +1,6 @@ # SPDX-FileCopyrightText: 2017 Scott Shawcroft, written for Adafruit Industries # SPDX-FileCopyrightText: Copyright (c) 2022 Carter Nelson for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2024 Aaron W Morris (aaronwmorris) # # SPDX-License-Identifier: MIT """ diff --git a/examples/si1145_test_gains.py b/examples/si1145_test_gains.py index 4cc4ce1..db0b374 100644 --- a/examples/si1145_test_gains.py +++ b/examples/si1145_test_gains.py @@ -1,5 +1,4 @@ -# SPDX-FileCopyrightText: 2017 Scott Shawcroft, written for Adafruit Industries -# SPDX-FileCopyrightText: Copyright (c) 2022 Carter Nelson for Adafruit Industries +# SPDX-FileCopyrightText: Copyright (c) 2024 Aaron W Morris (aaronwmorris) # # SPDX-License-Identifier: Unlicense From 20befa7643fd5ec0a3d77d138a9a2623787db0e3 Mon Sep 17 00:00:00 2001 From: foamyguy Date: Sat, 21 Sep 2024 10:18:42 -0500 Subject: [PATCH 12/12] remove gain from simpletest. Add comments to gain test --- examples/si1145_simpletest.py | 23 ----------------------- examples/si1145_test_gains.py | 21 +++++++++++++-------- 2 files changed, 13 insertions(+), 31 deletions(-) diff --git a/examples/si1145_simpletest.py b/examples/si1145_simpletest.py index 0be78f5..77e459d 100644 --- a/examples/si1145_simpletest.py +++ b/examples/si1145_simpletest.py @@ -15,29 +15,6 @@ # setup sensor si1145 = adafruit_si1145.SI1145(i2c) - -# High Signal Range mode divides gain by 14.5 -# Useful for direct sunlight operation -# si1145.als_vis_range_high = True -# si1145.als_ir_range_high = True - - -# Gain technically increases integration time -# adafruit_si1145.GAIN_ADC_CLOCK_DIV_1 (1x gain, default) -# adafruit_si1145.GAIN_ADC_CLOCK_DIV_2 (2x gain) -# adafruit_si1145.GAIN_ADC_CLOCK_DIV_4 (4x gain) -# adafruit_si1145.GAIN_ADC_CLOCK_DIV_8 (8x gain) -# adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 (16x gain) -# adafruit_si1145.GAIN_ADC_CLOCK_DIV_32 (32x gain) -# adafruit_si1145.GAIN_ADC_CLOCK_DIV_64 (64x gain) -# adafruit_si1145.GAIN_ADC_CLOCK_DIV_128 (128x gain) - - -si1145.gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 # changes vis and ir gains -# si1145.vis_gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 -# si1145.ir_gain = adafruit_si1145.GAIN_ADC_CLOCK_DIV_16 - - # loop forever printing values while True: vis, ir = si1145.als diff --git a/examples/si1145_test_gains.py b/examples/si1145_test_gains.py index db0b374..a78b7c0 100644 --- a/examples/si1145_test_gains.py +++ b/examples/si1145_test_gains.py @@ -26,6 +26,11 @@ si1145.als_range_high = False # both settings # si1145.als_vis_range_high = False # si1145.als_ir_range_high = False + +# Change above to True for High Signal Range mode. +# High Signal Range mode divides gain by 14.5 +# Useful for direct sunlight operation + time.sleep(0.5) # test reading attributes @@ -35,14 +40,14 @@ gain_list = ( - adafruit_si1145.GAIN_ADC_CLOCK_DIV_1, - adafruit_si1145.GAIN_ADC_CLOCK_DIV_2, - adafruit_si1145.GAIN_ADC_CLOCK_DIV_4, - adafruit_si1145.GAIN_ADC_CLOCK_DIV_8, - adafruit_si1145.GAIN_ADC_CLOCK_DIV_16, - adafruit_si1145.GAIN_ADC_CLOCK_DIV_32, - adafruit_si1145.GAIN_ADC_CLOCK_DIV_64, - adafruit_si1145.GAIN_ADC_CLOCK_DIV_128, + adafruit_si1145.GAIN_ADC_CLOCK_DIV_1, # (1x gain, default) + adafruit_si1145.GAIN_ADC_CLOCK_DIV_2, # (2x gain) + adafruit_si1145.GAIN_ADC_CLOCK_DIV_4, # (4x gain) + adafruit_si1145.GAIN_ADC_CLOCK_DIV_8, # (8x gain) + adafruit_si1145.GAIN_ADC_CLOCK_DIV_16, # (16x gain) + adafruit_si1145.GAIN_ADC_CLOCK_DIV_32, # (32x gain) + adafruit_si1145.GAIN_ADC_CLOCK_DIV_64, # (64x gain) + adafruit_si1145.GAIN_ADC_CLOCK_DIV_128, # (128x gain) )