Skip to content

Commit d3f4f11

Browse files
committed
fix property-name (current_amps->current) and units
1 parent e3c73c6 commit d3f4f11

File tree

2 files changed

+65
-61
lines changed

2 files changed

+65
-61
lines changed

adafruit_ina3221.py

Lines changed: 62 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -66,31 +66,35 @@
6666
DEFAULT_SHUNT_RESISTANCE = 0.05
6767

6868
# Precision (LSB) of bus-voltage and shunt-voltage
69-
BUS_V_LSB = 0.008 # 8mV
70-
SHUNT_V_LSB = 0.000040 # 40µV
69+
BUS_V_LSB = 0.008 # 8mV
70+
SHUNT_V_LSB = 0.000040 # 40µV
71+
72+
73+
def _mask(offset, len, read=True):
74+
"""return mask for reading or writing"""
75+
if read:
76+
return ((1 << len) - 1) << offset
77+
else:
78+
return ~(((1 << len) - 1) << offset) & 0xFFFF
7179

72-
def _mask(offset,len,read=True):
73-
""" return mask for reading or writing """
74-
if read:
75-
return ((1<<len)-1)<<offset
76-
else:
77-
return ~(((1<<len)-1)<<offset) & 0xFFFF
7880

7981
def _to_signed(val: int, shift: int, bits: int):
80-
""" convert value to signed int and shift result """
82+
"""convert value to signed int and shift result"""
8183
if val & (1 << (bits - 1)):
82-
val -= 1 << (bits-1) # remove sign
83-
val = (1 << bits-1) - 1 - val # bitwise not
84-
return - (val >> shift)
84+
val -= 1 << (bits - 1) # remove sign
85+
val = (1 << bits - 1) - 1 - val # bitwise not
86+
return -(val >> shift)
8587
return val >> shift
8688

89+
8790
def _to_2comp(val: int, shift: int, bits: int):
88-
""" convert value to twos complement, shifting as necessary """
89-
if val > 0:
90-
return val << shift
91-
val = (-val) << shift
92-
val = (1 << bits-1) - val # bitwise not plus 1
93-
return val + (1 << (bits-1))
91+
"""convert value to twos complement, shifting as necessary"""
92+
if val > 0:
93+
return val << shift
94+
val = (-val) << shift
95+
val = (1 << bits - 1) - val # bitwise not plus 1
96+
return val + (1 << (bits - 1))
97+
9498

9599
class AVG_MODE:
96100
"""Enumeration for the averaging mode options in INA3221.
@@ -181,29 +185,28 @@ def __init__(self, device: Any, channel: int) -> None:
181185
def enable(self, flag: bool = True) -> None:
182186
"""Enable/disable this channel"""
183187
# enable bits in the configuration-register: 14-12
184-
self._device._set_register_bits(CONFIGURATION,
185-
14-self._channel,1,int(flag))
188+
self._device._set_register_bits(CONFIGURATION, 14 - self._channel, 1, int(flag))
186189
self._enabled = flag
187190

188191
@property
189192
def enabled(self) -> bool:
190-
"""return buffered enable-state """
193+
"""return buffered enable-state"""
191194
return self._enabled
192195

193196
@property
194197
def bus_voltage(self) -> float:
195198
"""Bus voltage in volts."""
196199
reg_addr = BUSVOLTAGE_REGS[self._channel]
197-
raw_value = self._device._get_register_bits(reg_addr,0,16)
198-
raw_value = _to_signed(raw_value,3,16)
200+
raw_value = self._device._get_register_bits(reg_addr, 0, 16)
201+
raw_value = _to_signed(raw_value, 3, 16)
199202
return raw_value * BUS_V_LSB
200203

201204
@property
202205
def shunt_voltage(self) -> float:
203206
"""Shunt voltage in millivolts."""
204207
reg_addr = SHUNTVOLTAGE_REGS[self._channel]
205-
raw_value = self._device._get_register_bits(reg_addr,0,16)
206-
raw_value = _to_signed(raw_value,3,16)
208+
raw_value = self._device._get_register_bits(reg_addr, 0, 16)
209+
raw_value = _to_signed(raw_value, 3, 16)
207210
return raw_value * SHUNT_V_LSB * 1000
208211

209212
@property
@@ -235,14 +238,14 @@ def critical_alert_threshold(self) -> float:
235238
float: The current critical alert threshold in amperes.
236239
"""
237240
reg_addr = CRITICAL_ALERT_LIMIT_REGS[self._channel]
238-
threshold = self._device._get_register_bits(reg_addr,3,13)
241+
threshold = self._device._get_register_bits(reg_addr, 3, 13)
239242
return threshold * SHUNT_V_LSB / self._shunt_resistance
240243

241244
@critical_alert_threshold.setter
242245
def critical_alert_threshold(self, current: float) -> None:
243246
threshold = int(current * self._shunt_resistance / SHUNT_V_LSB)
244247
reg_addr = CRITICAL_ALERT_LIMIT_REGS[self._channel]
245-
self._device._set_register_bits(reg_addr,3,13,threshold)
248+
self._device._set_register_bits(reg_addr, 3, 13, threshold)
246249

247250
@property
248251
def warning_alert_threshold(self) -> float:
@@ -252,24 +255,25 @@ def warning_alert_threshold(self) -> float:
252255
float: The current warning alert threshold in amperes.
253256
"""
254257
reg_addr = WARNING_ALERT_LIMIT_REGS[self._channel]
255-
threshold = self._device._get_register_bits(reg_addr,3,13)
258+
threshold = self._device._get_register_bits(reg_addr, 3, 13)
256259
return threshold / self._shunt_resistance
257260

258261
@warning_alert_threshold.setter
259262
def warning_alert_threshold(self, current: float) -> None:
260263
threshold = int(current * self._shunt_resistance)
261264
reg_addr = WARNING_ALERT_LIMIT_REGS[self._channel]
262-
self._device._set_register_bits(reg_addr,3,13,threshold)
265+
self._device._set_register_bits(reg_addr, 3, 13, threshold)
263266

264267
@property
265268
def summation_channel(self) -> bool:
266-
"""Status of summation channel """
267-
return self._device._get_register_bits(MASK_ENABLE,14-self._channel,1)
269+
"""Status of summation channel"""
270+
return self._device._get_register_bits(MASK_ENABLE, 14 - self._channel, 1)
268271

269272
@summation_channel.setter
270273
def summation_channel(self, value: bool) -> None:
271-
""" set value of summation control """
272-
self._device._set_register_bits(MASK_ENABLE,14-self._channel,1,int(value))
274+
"""set value of summation control"""
275+
self._device._set_register_bits(MASK_ENABLE, 14 - self._channel, 1, int(value))
276+
273277

274278
class INA3221:
275279
"""Driver for the INA3221 device with three channels."""
@@ -311,7 +315,7 @@ def reset(self) -> None:
311315
Returns:
312316
None
313317
"""
314-
self._set_register_bits(CONFIGURATION,15,1,1)
318+
self._set_register_bits(CONFIGURATION, 15, 1, 1)
315319

316320
@property
317321
def die_id(self) -> int:
@@ -342,13 +346,13 @@ def mode(self) -> int:
342346
4: Alternate power down mode, 5: Continuous shunt voltage measurement,
343347
6: Continuous bus voltage measurement, 7: Continuous shunt and bus voltage measurements
344348
"""
345-
return self._get_register_bits(CONFIGURATION,0,3)
349+
return self._get_register_bits(CONFIGURATION, 0, 3)
346350

347351
@mode.setter
348352
def mode(self, value: int) -> None:
349353
if not 0 <= value <= 7:
350354
raise ValueError("Mode must be a 3-bit value (0-7).")
351-
self._set_register_bits(CONFIGURATION,0,3,value)
355+
self._set_register_bits(CONFIGURATION, 0, 3, value)
352356

353357
@property
354358
def shunt_voltage_conv_time(self) -> int:
@@ -359,13 +363,13 @@ def shunt_voltage_conv_time(self) -> int:
359363
0: 140µs, 1: 204µs, 2: 332µs, 3: 588µs,
360364
4: 1ms, 5: 2ms, 6: 4ms, 7: 8ms
361365
"""
362-
return self._get_register_bits(CONFIGURATION,3,3)
366+
return self._get_register_bits(CONFIGURATION, 3, 3)
363367

364368
@shunt_voltage_conv_time.setter
365369
def shunt_voltage_conv_time(self, conv_time: int) -> None:
366370
if conv_time < 0 or conv_time > 7:
367371
raise ValueError("Conversion time must be between 0 and 7")
368-
self._set_register_bits(CONFIGURATION,3,3,int(conv_time))
372+
self._set_register_bits(CONFIGURATION, 3, 3, int(conv_time))
369373

370374
@property
371375
def bus_voltage_conv_time(self) -> int:
@@ -376,13 +380,13 @@ def bus_voltage_conv_time(self) -> int:
376380
0: 140µs, 1: 204µs, 2: 332µs, 3: 588µs,
377381
4: 1ms, 5: 2ms, 6: 4ms, 7: 8ms
378382
"""
379-
return self._get_register_bits(CONFIGURATION,6,3)
383+
return self._get_register_bits(CONFIGURATION, 6, 3)
380384

381385
@bus_voltage_conv_time.setter
382386
def bus_voltage_conv_time(self, conv_time: int) -> None:
383387
if conv_time < 0 or conv_time > 7:
384388
raise ValueError("Conversion time must be between 0 and 7")
385-
self._set_register_bits(CONFIGURATION,6,3,int(conv_time))
389+
self._set_register_bits(CONFIGURATION, 6, 3, int(conv_time))
386390

387391
@property
388392
def averaging_mode(self) -> int:
@@ -394,13 +398,13 @@ def averaging_mode(self) -> int:
394398
3: 64_SAMPLES, 4: 128_SAMPLES, 5: 256_SAMPLES,
395399
6: 512_SAMPLES, 7: 1024_SAMPLES
396400
"""
397-
return self._get_register_bits(CONFIGURATION,9,3)
401+
return self._get_register_bits(CONFIGURATION, 9, 3)
398402

399403
@averaging_mode.setter
400404
def averaging_mode(self, mode: int) -> None:
401405
if mode < 0 or mode > 7:
402406
raise ValueError("Averaging mode must be between 0 and 7")
403-
self._set_register_bits(CONFIGURATION,9,3,int(mode))
407+
self._set_register_bits(CONFIGURATION, 9, 3, int(mode))
404408

405409
@property
406410
def flags(self) -> int:
@@ -410,7 +414,7 @@ def flags(self) -> int:
410414
int: The current flag indicators from the Mask/Enable register,
411415
masked for relevant flag bits.
412416
"""
413-
return self._read_register_bits(MASK_ENABLE,0,10)
417+
return self._read_register_bits(MASK_ENABLE, 0, 10)
414418

415419
@property
416420
def power_valid_limits(self) -> tuple:
@@ -420,37 +424,37 @@ def power_valid_limits(self) -> tuple:
420424
tuple: A tuple containing the lower and upper voltage limits
421425
in volts as (lower_limit, upper_limit).
422426
"""
423-
raw_value = self._device._get_register_bits(POWERVALID_LOWERLIMIT,0,16)
424-
lower_limit = _to_signed(raw_value,3,16) * 8e-3
425-
raw_value = self._device._get_register_bits(POWERVALID_UPPERLIMIT,0,16)
426-
upper_limit = _to_signed(raw_value,3,16) * 8e-3
427+
raw_value = self._device._get_register_bits(POWERVALID_LOWERLIMIT, 0, 16)
428+
lower_limit = _to_signed(raw_value, 3, 16) * 8e-3
429+
raw_value = self._device._get_register_bits(POWERVALID_UPPERLIMIT, 0, 16)
430+
upper_limit = _to_signed(raw_value, 3, 16) * 8e-3
427431
return lower_limit, upper_limit
428432

429433
@power_valid_limits.setter
430434
def power_valid_limits(self, limits: tuple) -> None:
431435
if len(limits) != 2:
432436
raise ValueError("Must provide both lower and upper voltage limits.")
433437
# convert to mV and twos-complement
434-
lower_limit = _to_2comp(int(limits[0] * 1000),3,16)
435-
upper_limit = _to_2comp(int(limits[1] * 1000),3,16)
436-
self._device._set_register_bits(POWERVALID_LOWERLIMIT,0,16,lower_limit)
437-
self._device._set_register_bits(POWERVALID_UPPERLIMIT,0,16,upper_limit)
438+
lower_limit = _to_2comp(int(limits[0] * 1000), 3, 16)
439+
upper_limit = _to_2comp(int(limits[1] * 1000), 3, 16)
440+
self._device._set_register_bits(POWERVALID_LOWERLIMIT, 0, 16, lower_limit)
441+
self._device._set_register_bits(POWERVALID_UPPERLIMIT, 0, 16, upper_limit)
438442

439-
def _get_register_bits(self,reg,offset,len):
440-
""" return given bits from register """
443+
def _get_register_bits(self, reg, offset, len):
444+
"""return given bits from register"""
441445
value = self._read_register(reg, 2)
442446
value = (value[0] << 8) | value[1] # swap bytes
443-
mask = _mask(offset,len,read=True)
447+
mask = _mask(offset, len, read=True)
444448
return (value & mask) >> offset
445449

446-
def _set_register_bits(self,reg,offset,len,value):
447-
""" set given bits of register """
450+
def _set_register_bits(self, reg, offset, len, value):
451+
"""set given bits of register"""
448452
old = self._read_register(reg, 2)
449453
old = (old[0] << 8) | old[1] # swap bytes
450-
mask = _mask(offset,len,read=False)
454+
mask = _mask(offset, len, read=False)
451455
new = (old & mask) | value << offset
452456
high_byte = (new >> 8) & 0xFF
453-
low_byte = new & 0xFF
457+
low_byte = new & 0xFF
454458
self._write_register(reg, bytes([high_byte, low_byte]))
455459

456460
def _write_register(self, reg, data):

examples/ina3221_simpletest.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,17 @@
88
from adafruit_ina3221 import INA3221
99

1010
i2c = board.I2C()
11-
ina = INA3221(i2c)
11+
ina = INA3221(i2c, enable=[0, 1, 2])
1212

1313
while True:
1414
for i in range(3):
1515
bus_voltage = ina[i].bus_voltage
1616
shunt_voltage = ina[i].shunt_voltage
17-
current = ina[i].current_amps * 1000
17+
current = ina[i].current
1818

1919
print(f"Channel {i + 1}:")
2020
print(f" Bus Voltage: {bus_voltage:.6f} V")
21-
print(f" Shunt Voltage: {shunt_voltage:.6f} V")
21+
print(f" Shunt Voltage: {shunt_voltage:.6f} mV")
2222
print(f" Current: {current:.6f} mA")
2323
print("-" * 30)
2424

0 commit comments

Comments
 (0)