31
31
from adafruit_bus_device import i2c_device
32
32
from adafruit_register .i2c_struct import ROUnaryStruct , UnaryStruct
33
33
from adafruit_register .i2c_bit import RWBit , ROBit
34
+ from adafruit_register .i2c_bits import RWBits
34
35
35
36
__version__ = "0.0.0-auto.0"
36
37
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MAX1704x.git"
@@ -64,17 +65,22 @@ class MAX17048:
64
65
"""
65
66
66
67
chip_version = ROUnaryStruct (_MAX1704X_VERSION_REG , ">H" )
68
+ chip_id = ROUnaryStruct (_MAX1704X_CHIPID_REG , ">B" )
69
+
67
70
_config = ROUnaryStruct (_MAX1704X_CONFIG_REG , ">H" )
68
71
# expose the config bits
69
72
sleep = RWBit (_MAX1704X_CONFIG_REG + 1 , 7 , register_width = 2 , lsb_first = False )
70
73
_alert_status = RWBit (_MAX1704X_CONFIG_REG + 1 , 5 , register_width = 2 , lsb_first = False )
71
74
enable_sleep = RWBit (_MAX1704X_MODE_REG , 5 )
72
75
hibernating = ROBit (_MAX1704X_MODE_REG , 4 )
76
+ quick_start = RWBit (_MAX1704X_MODE_REG , 6 )
73
77
74
78
_cmd = UnaryStruct (_MAX1704X_CMD_REG , ">H" )
75
79
_status = ROUnaryStruct (_MAX1704X_STATUS_REG , ">B" )
76
80
_cell_voltage = ROUnaryStruct (_MAX1704X_VCELL_REG , ">H" )
77
- _cell_SOC = ROUnaryStruct (_MAX1704X_SOC_REG , ">B" )
81
+ _cell_SOC = ROUnaryStruct (_MAX1704X_SOC_REG , ">H" )
82
+ _cell_crate = ROUnaryStruct (_MAX1704X_CRATE_REG , ">h" )
83
+ _vreset = ROUnaryStruct (_MAX1704X_VRESET_REG , ">B" )
78
84
_hibrt_actthr = UnaryStruct (_MAX1704X_HIBRT_REG + 1 , ">B" )
79
85
_hibrt_hibthr = UnaryStruct (_MAX1704X_HIBRT_REG , ">B" )
80
86
_valrt_min = UnaryStruct (_MAX1704X_VALERT_REG , ">B" )
@@ -88,8 +94,8 @@ class MAX17048:
88
94
SOC_low_alert = RWBit (_MAX1704X_STATUS_REG , 4 )
89
95
SOC_change_alert = RWBit (_MAX1704X_STATUS_REG , 5 )
90
96
91
- chip_id = ROUnaryStruct ( _MAX1704X_CHIPID_REG , ">B" )
92
-
97
+ _reset_voltage = RWBits ( 7 , _MAX1704X_VRESET_REG , 1 )
98
+
93
99
def __init__ (self , i2c_bus , address = MAX1704X_I2CADDR_DEFAULT ):
94
100
# pylint: disable=no-member
95
101
self .i2c_device = i2c_device .I2CDevice (i2c_bus , address )
@@ -116,8 +122,22 @@ def cell_voltage(self):
116
122
117
123
@property
118
124
def cell_percent (self ):
119
- return self ._cell_SOC
125
+ return self ._cell_SOC / 256.0
120
126
127
+ @property
128
+ def charge_rate (self ):
129
+ """Charge or discharge rate of the battery in percent/hour"""
130
+ return self ._cell_crate * 0.208
131
+
132
+ @property
133
+ def reset_voltage (self ):
134
+ return self ._reset_voltage * .04 # 40mV / LSB
135
+
136
+ @reset_voltage .setter
137
+ def reset_voltage (self , reset_v ):
138
+ if (not 0 <= reset_v <= (127 * 0.04 )):
139
+ raise ValueError ("Reset voltage must be between 0 and 5.1 Volts" )
140
+ self ._reset_voltage = int (reset_v / .04 ) # 40mV / LSB
121
141
122
142
@property
123
143
def voltage_alert_min (self ):
0 commit comments