26
26
* Adafruit's Register library: https://github.com/adafruit/Adafruit_CircuitPython_Register
27
27
"""
28
28
29
- # imports
30
-
31
29
__version__ = "0.0.0-auto.0"
32
30
__repo__ = "https://github.com/adafruit/Adafruit_CircuitPython_PCF8591.git"
33
31
# from time import sleep
39
37
_PCF8591_ENABLE_DAC = const (0x40 ) # control bit for having the DAC active
40
38
41
39
# Pin constants
42
- A0 = 0
43
- A1 = 1
44
- A2 = 2
45
- A3 = 3
46
-
47
- OUT = 0
40
+ A0 = const (0 )
41
+ A1 = const (1 )
42
+ A2 = const (2 )
43
+ A3 = const (3 )
48
44
45
+ OUT = const (0 )
49
46
50
47
class PCF8591 :
51
48
"""Driver for the PCF8591 DAC & ADC Combo breakout.
@@ -66,6 +63,8 @@ def __init__(self, i2c_bus, address=_PCF8591_DEFAULT_ADDR, reference_voltage=3.3
66
63
raise ValueError ("reference_voltage must be from 2.5 - 6.0" )
67
64
self ._buffer = bytearray (2 )
68
65
print ("self.reference_voltage = " , self .reference_voltage )
66
+ # possibly measure each channel here to prep readings for
67
+ # user calls to `read`
69
68
70
69
@property
71
70
def reference_voltage (self ):
@@ -78,20 +77,34 @@ def read(self, channel):
78
77
79
78
param: :adcnum The single-ended ADC to read from, 0 thru 3
80
79
"""
81
- self ._buffer = bytearray (2 )
82
80
if self ._dac_enabled :
83
81
self ._buffer [0 ] = _PCF8591_ENABLE_DAC
84
82
self ._buffer [1 ] = self ._dacval
83
+ else :
84
+ self ._buffer [0 ] = 0
85
+ self ._buffer [1 ] = 0
85
86
86
87
if channel < 0 or channel > 3 :
87
88
raise ValueError ("channel must be from 0-3" )
88
- # adc_channel cannot be larger than 3
89
- channel = min (channel , 3 )
89
+
90
+ self ._buffer [0 ] |= channel & 0x3
91
+
92
+ with self .i2c_device as i2c :
93
+ i2c .write_then_readinto (self ._buffer , self ._buffer )
94
+
95
+ if self ._dac_enabled :
96
+ self ._buffer [0 ] = _PCF8591_ENABLE_DAC
97
+ self ._buffer [1 ] = self ._dacval
98
+ else :
99
+ self ._buffer [0 ] = 0
100
+ self ._buffer [1 ] = 0
90
101
self ._buffer [0 ] |= channel & 0x3
91
- # TODO: Add an Argument error raise here
102
+
103
+ # final read before render
92
104
93
105
with self .i2c_device as i2c :
94
106
i2c .write_then_readinto (self ._buffer , self ._buffer )
107
+
95
108
return unpack_from (">B" , self ._buffer [1 :])[0 ]
96
109
97
110
@property
0 commit comments