|
@@ -27,21 +27,28 @@ GAIN = {
|
|
|
MCP3428_CMD_READ_CNVRSN = 0x00 # Read Conversion Result Data
|
|
MCP3428_CMD_READ_CNVRSN = 0x00 # Read Conversion Result Data
|
|
|
|
|
|
|
|
import smbus2 as smbus
|
|
import smbus2 as smbus
|
|
|
|
|
+from ..api.i2c_handler import I2CDevice
|
|
|
|
|
|
|
|
-class MCP3428:
|
|
|
|
|
|
|
+class MCP3428(I2CDevice):
|
|
|
|
|
+ default_address = MCP3428_DEFAULT_ADDRESS
|
|
|
|
|
|
|
|
- def __init__(self, bus:smbus.SMBus, address):
|
|
|
|
|
|
|
+ def initialize(self, bus: smbus.SMBus, address: int):
|
|
|
self.bus = bus
|
|
self.bus = bus
|
|
|
self.address = address
|
|
self.address = address
|
|
|
|
|
|
|
|
- def config_command(self, channel, gain=1, resolution=12):
|
|
|
|
|
|
|
+ def config_channel(self, channel: int, gain=1, resolution=12):
|
|
|
"""Select the Configuration Command from the given provided values"""
|
|
"""Select the Configuration Command from the given provided values"""
|
|
|
self.gain = gain
|
|
self.gain = gain
|
|
|
self.resolution = resolution
|
|
self.resolution = resolution
|
|
|
CONFIG_CMD = (MCP3428_CMD_MODE_CONT | RESOLUTION[resolution] | GAIN[gain] | CHANNEL[channel])
|
|
CONFIG_CMD = (MCP3428_CMD_MODE_CONT | RESOLUTION[resolution] | GAIN[gain] | CHANNEL[channel])
|
|
|
self.bus.write_byte(self.address, CONFIG_CMD)
|
|
self.bus.write_byte(self.address, CONFIG_CMD)
|
|
|
|
|
|
|
|
- def read_adc(self):
|
|
|
|
|
|
|
+ def read_value(self) -> float:
|
|
|
|
|
+ raw_adc = self._read_adc()
|
|
|
|
|
+ res_per_bit = 2.048/2**(self.resolution-1)
|
|
|
|
|
+ return raw_adc*res_per_bit/self.gain
|
|
|
|
|
+
|
|
|
|
|
+ def _read_adc(self):
|
|
|
"""Read data back from MCP3428_CMD_READ_CNVRSN(0x00), 2 bytes
|
|
"""Read data back from MCP3428_CMD_READ_CNVRSN(0x00), 2 bytes
|
|
|
raw_adc MSB, raw_adc LSB"""
|
|
raw_adc MSB, raw_adc LSB"""
|
|
|
read = smbus.i2c_msg.read(self.address, 2)
|
|
read = smbus.i2c_msg.read(self.address, 2)
|
|
@@ -49,12 +56,6 @@ class MCP3428:
|
|
|
data = list(read)
|
|
data = list(read)
|
|
|
# Convert the data to 12-bits
|
|
# Convert the data to 12-bits
|
|
|
raw_adc = ((data[0] & 0x0F) * 256) + data[1]
|
|
raw_adc = ((data[0] & 0x0F) * 256) + data[1]
|
|
|
- if raw_adc > 2047 :
|
|
|
|
|
|
|
+ if raw_adc > 2047:
|
|
|
raw_adc -= 4095
|
|
raw_adc -= 4095
|
|
|
return raw_adc
|
|
return raw_adc
|
|
|
-
|
|
|
|
|
- def read_value(self):
|
|
|
|
|
- raw_adc = self.read_adc()
|
|
|
|
|
- res_per_bit = 2.048/2**(self.resolution-1)
|
|
|
|
|
- # ensure this works!
|
|
|
|
|
- return raw_adc*res_per_bit/self.gain
|
|
|