Skip to content

Commit 1590999

Browse files
authored
Merge pull request #8 from BZab/main
Value scaling fixes, shunt voltage sum regs support
2 parents 033b873 + 5b7e212 commit 1590999

File tree

2 files changed

+44
-11
lines changed

2 files changed

+44
-11
lines changed

adafruit_ina3221.py

Lines changed: 41 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -256,11 +256,11 @@ def warning_alert_threshold(self) -> float:
256256
"""
257257
reg_addr = WARNING_ALERT_LIMIT_REGS[self._channel]
258258
threshold = self._device._get_register_bits(reg_addr, 3, 13)
259-
return threshold / self._shunt_resistance
259+
return threshold * SHUNT_V_LSB / self._shunt_resistance
260260

261261
@warning_alert_threshold.setter
262262
def warning_alert_threshold(self, current: float) -> None:
263-
threshold = int(current * self._shunt_resistance)
263+
threshold = int(current * self._shunt_resistance / SHUNT_V_LSB)
264264
reg_addr = WARNING_ALERT_LIMIT_REGS[self._channel]
265265
self._device._set_register_bits(reg_addr, 3, 13, threshold)
266266

@@ -427,21 +427,51 @@ def power_valid_limits(self) -> tuple:
427427
tuple: A tuple containing the lower and upper voltage limits
428428
in volts as (lower_limit, upper_limit).
429429
"""
430-
raw_value = self._get_register_bits(POWERVALID_LOWERLIMIT, 0, 16)
431-
lower_limit = _to_signed(raw_value, 3, 16) * 8e-3
432-
raw_value = self._get_register_bits(POWERVALID_UPPERLIMIT, 0, 16)
433-
upper_limit = _to_signed(raw_value, 3, 16) * 8e-3
430+
# LSB value is 8 mV -- Datasheet: 8.6.2.17/.18
431+
LSB = BUS_V_LSB
432+
lower_limit = self._register_value_getter(addr=POWERVALID_LOWERLIMIT, lsb=LSB, shift=3)
433+
upper_limit = self._register_value_getter(addr=POWERVALID_UPPERLIMIT, lsb=LSB, shift=3)
434434
return lower_limit, upper_limit
435435

436436
@power_valid_limits.setter
437437
def power_valid_limits(self, limits: tuple) -> None:
438438
if len(limits) != 2:
439439
raise ValueError("Must provide both lower and upper voltage limits.")
440-
# convert to mV and twos-complement
441-
lower_limit = _to_2comp(int(limits[0] * 1000), 3, 16)
442-
upper_limit = _to_2comp(int(limits[1] * 1000), 3, 16)
443-
self._set_register_bits(POWERVALID_LOWERLIMIT, 0, 16, lower_limit)
444-
self._set_register_bits(POWERVALID_UPPERLIMIT, 0, 16, upper_limit)
440+
# LSB value is 8 mV -- Datasheet: 8.6.2.17/.18
441+
LSB = BUS_V_LSB
442+
self._register_value_setter(addr=POWERVALID_LOWERLIMIT, value=limits[0], lsb=LSB, shift=3)
443+
self._register_value_setter(addr=POWERVALID_UPPERLIMIT, value=limits[1], lsb=LSB, shift=3)
444+
445+
@property
446+
def shunt_voltage_sum(self) -> float:
447+
LSB = SHUNT_V_LSB
448+
return self._register_value_getter(addr=SHUNTVOLTAGE_SUM, lsb=LSB, shift=1)
449+
450+
@property
451+
def shunt_voltage_sum_limit(self) -> float:
452+
LSB = SHUNT_V_LSB
453+
return self._register_value_getter(addr=SHUNTVOLTAGE_SUM_LIMIT, lsb=LSB, shift=1)
454+
455+
@shunt_voltage_sum_limit.setter
456+
def shunt_voltage_sum_limit(self, limit: float | int) -> None:
457+
LSB = SHUNT_V_LSB
458+
self._register_value_setter(addr=POWERVALID_UPPERLIMIT, value=limit, lsb=LSB, shift=1)
459+
460+
def _register_value_getter(
461+
self, addr: int, bits: int = 16, lsb: float = 1.0, shift: int = 0
462+
) -> float:
463+
offset = 0
464+
raw_value = self._get_register_bits(reg=addr, offset=offset, len=bits)
465+
value = _to_signed(raw_value, shift, bits) * lsb
466+
return value
467+
468+
def _register_value_setter(
469+
self, addr: int, value: float | int, bits: int = 16, lsb: float = 1.0, shift: int = 0
470+
) -> None:
471+
offset = 0
472+
# Convert the value into number of LSB-value steps and twos-complement
473+
bitval = _to_2comp(int(value / lsb), shift, bits)
474+
self._set_register_bits(reg=addr, offset=offset, len=bits, value=bitval)
445475

446476
def _get_register_bits(self, reg, offset, len):
447477
"""return given bits from register"""

ruff.toml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,5 +94,8 @@ ignore = [
9494
"PLR0124", # comparison-with-itself
9595
]
9696

97+
[lint.pylint]
98+
max-args = 7
99+
97100
[format]
98101
line-ending = "lf"

0 commit comments

Comments
 (0)