Skip to content

Commit b090b23

Browse files
committed
so many features!
1 parent 5f21bbd commit b090b23

File tree

2 files changed

+32
-5
lines changed

2 files changed

+32
-5
lines changed

adafruit_max1704x.py

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@
3131
from adafruit_bus_device import i2c_device
3232
from adafruit_register.i2c_struct import ROUnaryStruct, UnaryStruct
3333
from adafruit_register.i2c_bit import RWBit, ROBit
34+
from adafruit_register.i2c_bits import RWBits
3435

3536
__version__ = "0.0.0-auto.0"
3637
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_MAX1704x.git"
@@ -64,17 +65,22 @@ class MAX17048:
6465
"""
6566

6667
chip_version = ROUnaryStruct(_MAX1704X_VERSION_REG, ">H")
68+
chip_id = ROUnaryStruct(_MAX1704X_CHIPID_REG, ">B")
69+
6770
_config = ROUnaryStruct(_MAX1704X_CONFIG_REG, ">H")
6871
# expose the config bits
6972
sleep = RWBit(_MAX1704X_CONFIG_REG+1, 7, register_width=2, lsb_first=False)
7073
_alert_status = RWBit(_MAX1704X_CONFIG_REG+1, 5, register_width=2, lsb_first=False)
7174
enable_sleep = RWBit(_MAX1704X_MODE_REG, 5)
7275
hibernating = ROBit(_MAX1704X_MODE_REG, 4)
76+
quick_start = RWBit(_MAX1704X_MODE_REG, 6)
7377

7478
_cmd = UnaryStruct(_MAX1704X_CMD_REG, ">H")
7579
_status = ROUnaryStruct(_MAX1704X_STATUS_REG, ">B")
7680
_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")
7884
_hibrt_actthr = UnaryStruct(_MAX1704X_HIBRT_REG+1, ">B")
7985
_hibrt_hibthr = UnaryStruct(_MAX1704X_HIBRT_REG, ">B")
8086
_valrt_min = UnaryStruct(_MAX1704X_VALERT_REG, ">B")
@@ -88,8 +94,8 @@ class MAX17048:
8894
SOC_low_alert = RWBit(_MAX1704X_STATUS_REG, 4)
8995
SOC_change_alert = RWBit(_MAX1704X_STATUS_REG, 5)
9096

91-
chip_id = ROUnaryStruct(_MAX1704X_CHIPID_REG, ">B")
92-
97+
_reset_voltage = RWBits(7, _MAX1704X_VRESET_REG, 1)
98+
9399
def __init__(self, i2c_bus, address=MAX1704X_I2CADDR_DEFAULT):
94100
# pylint: disable=no-member
95101
self.i2c_device = i2c_device.I2CDevice(i2c_bus, address)
@@ -116,8 +122,22 @@ def cell_voltage(self):
116122

117123
@property
118124
def cell_percent(self):
119-
return self._cell_SOC
125+
return self._cell_SOC / 256.0
120126

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
121141

122142
@property
123143
def voltage_alert_min(self):

examples/max1704x_simpletest.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414
debug_i2c = DebugI2C(i2c)
1515
max17 = adafruit_max1704x.MAX17048(debug_i2c)
1616

17-
print("Found MAX1704x with chip version", hex(max17.chip_version))
17+
print("Found MAX1704x with chip version", hex(max17.chip_version), "and id", hex(max17.chip_id))
18+
19+
#max17.reset_voltage = 2.5
20+
print("MAX1704x reset voltage = %0.1f V" % max17.reset_voltage)
1821

1922
#max17.activity_threshold = 0.15
2023
#print("MAX1704x activity threshold = %0.2f V" % max17.activity_threshold)
@@ -27,6 +30,9 @@
2730
#max17.enable_sleep = True
2831
#max17.sleep = True
2932

33+
print("Quick starting")
34+
max17.quick_start = True
35+
3036
max17.voltage_alert_min = 3.7
3137
print("Voltage alert minimum = %0.2f V" % max17.voltage_alert_min)
3238
#max17.voltage_alert_max = 3.8
@@ -35,6 +41,7 @@
3541
while True:
3642
print("Battery voltage:", max17.cell_voltage, "V")
3743
print("Battery state :", max17.cell_percent, "%")
44+
print("Charge rate :", max17.charge_rate, "%/hr")
3845

3946
if max17.hibernating:
4047
print("Hibernating!")

0 commit comments

Comments
 (0)