6666DEFAULT_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
7981def _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+
8790def _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
9599class 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
274278class 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 ):
0 commit comments