@@ -256,11 +256,11 @@ def warning_alert_threshold(self) -> float:
256
256
"""
257
257
reg_addr = WARNING_ALERT_LIMIT_REGS [self ._channel ]
258
258
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
260
260
261
261
@warning_alert_threshold .setter
262
262
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 )
264
264
reg_addr = WARNING_ALERT_LIMIT_REGS [self ._channel ]
265
265
self ._device ._set_register_bits (reg_addr , 3 , 13 , threshold )
266
266
@@ -427,21 +427,51 @@ def power_valid_limits(self) -> tuple:
427
427
tuple: A tuple containing the lower and upper voltage limits
428
428
in volts as (lower_limit, upper_limit).
429
429
"""
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 )
434
434
return lower_limit , upper_limit
435
435
436
436
@power_valid_limits .setter
437
437
def power_valid_limits (self , limits : tuple ) -> None :
438
438
if len (limits ) != 2 :
439
439
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 )
445
475
446
476
def _get_register_bits (self , reg , offset , len ):
447
477
"""return given bits from register"""
0 commit comments