initial commit
This commit is contained in:
commit
5942c13721
10 changed files with 462 additions and 0 deletions
94
compLIB/ADC.py
Normal file
94
compLIB/ADC.py
Normal file
|
@ -0,0 +1,94 @@
|
|||
import smbus
|
||||
import time
|
||||
|
||||
|
||||
class Adc:
|
||||
def __init__(self):
|
||||
# Get I2C bus
|
||||
self.bus = smbus.SMBus(1)
|
||||
|
||||
# I2C address of the device
|
||||
self.ADDRESS = 0x48
|
||||
|
||||
# PCF8591 Command
|
||||
self.PCF8591_CMD = 0x40 # Command
|
||||
|
||||
# ADS7830 Command
|
||||
self.ADS7830_CMD = 0x84 # Single-Ended Inputs
|
||||
|
||||
for i in range(3):
|
||||
aa = self.bus.read_byte_data(self.ADDRESS, 0xf4)
|
||||
if aa < 150:
|
||||
self.Index = "PCF8591"
|
||||
else:
|
||||
self.Index = "ADS7830"
|
||||
|
||||
def analogReadPCF8591(self, chn): # PCF8591 read ADC value,chn:0,1,2,3
|
||||
value = [0, 0, 0, 0, 0, 0, 0, 0, 0]
|
||||
for i in range(9):
|
||||
value[i] = self.bus.read_byte_data(self.ADDRESS, self.PCF8591_CMD + chn)
|
||||
value = sorted(value)
|
||||
return value[4]
|
||||
|
||||
# TODO: bug in original code???
|
||||
#def analogWritePCF8591(self, value): # PCF8591 write DAC value
|
||||
# self.bus.write_byte_data(self.ADDRESS, cmd, value)
|
||||
|
||||
def recvPCF8591(self, channel): # PCF8591 write DAC value
|
||||
while (1):
|
||||
value1 = self.analogReadPCF8591(channel) # read the ADC value of channel 0,1,2,
|
||||
value2 = self.analogReadPCF8591(channel)
|
||||
if value1 == value2:
|
||||
break;
|
||||
voltage = value1 / 256.0 * 3.3 # calculate the voltage value
|
||||
voltage = round(voltage, 2)
|
||||
return voltage
|
||||
|
||||
def recvADS7830(self, channel):
|
||||
"""Select the Command data from the given provided value above"""
|
||||
COMMAND_SET = self.ADS7830_CMD | ((((channel << 2) | (channel >> 1)) & 0x07) << 4)
|
||||
self.bus.write_byte(self.ADDRESS, COMMAND_SET)
|
||||
while (1):
|
||||
value1 = self.bus.read_byte(self.ADDRESS)
|
||||
value2 = self.bus.read_byte(self.ADDRESS)
|
||||
if value1 == value2:
|
||||
break;
|
||||
voltage = value1 / 255.0 * 3.3 # calculate the voltage value
|
||||
voltage = round(voltage, 2)
|
||||
return voltage
|
||||
|
||||
def recvADC(self, channel):
|
||||
if self.Index == "PCF8591":
|
||||
data = self.recvPCF8591(channel)
|
||||
elif self.Index == "ADS7830":
|
||||
data = self.recvADS7830(channel)
|
||||
return data
|
||||
|
||||
def i2cClose(self):
|
||||
self.bus.close()
|
||||
|
||||
|
||||
def loop():
|
||||
adc = Adc()
|
||||
while True:
|
||||
Left_IDR = adc.recvADC(0)
|
||||
print(Left_IDR)
|
||||
Right_IDR = adc.recvADC(1)
|
||||
print(Right_IDR)
|
||||
Power = adc.recvADC(2) * 3
|
||||
print(Power)
|
||||
time.sleep(1)
|
||||
print('----')
|
||||
|
||||
|
||||
def destroy():
|
||||
pass
|
||||
|
||||
|
||||
# Main program logic follows:
|
||||
if __name__ == '__main__':
|
||||
print('Program is starting ... ')
|
||||
try:
|
||||
loop()
|
||||
except KeyboardInterrupt: # When 'Ctrl+C' is pressed, the child program destroy() will be executed.
|
||||
destroy()
|
Reference in a new issue