Faccio ordine per risoluzione:

tempo fa ho comprato da waveshare un moduletto ADC i2c  basato sul pcf8591, ma non ho mai avuto il tempo di utilizzarlo.

Ho trovato un interessante spunto per puntare al PCF8591, semplice adc 8bit.

http://www.bristolwatch.com/rpi/PCF8591.pdf

http://www.bristolwatch.com/rpi/pcf8591.html

 

Di seguito il listato di esempio, l’unica accortezza è adattare l’indirizzo, che nel mio caso è 0x49:

# must use Python 2.7
import smbus
import time
from Tkinter import *
#import Tkinter must start with capital 'T'
# for RPI version 1, use "bus = smbus.SMBus(0)"
bus = smbus.SMBus(1)

# This is the address we setup in the PCF8591
address = 0x48
# 0x00 - 0x03 is AIN0 - AIN3
# bus.write_byte(address,0x00)



class App:
        
        def __init__(self, master):
            frame = Frame(master)
            frame.pack()
            Label(frame, text="Analog Value = ").grid(row=0, columnspan=2)

            self.result_var = DoubleVar()
            # location to display data in result_var
            Label(frame, textvariable=self.result_var).grid(row=0, column=2)

            button0 = Button(frame, text="AIN0", command=self.read_AIN0)
            button0.grid(row=1, column=0)

            button1 = Button(frame, text="AIN1", command=self.read_AIN1)
            button1.grid(row=1, column=1)

            button2 = Button(frame, text="AIN2", command=self.read_AIN2)
            button2.grid(row=1, column=2)

            button3 = Button(frame, text="AIN3", command=self.read_AIN3)
            button3.grid(row=1, column=3)

            # get value for DA converter
            self.aout_var = DoubleVar()

            Entry(frame, textvariable=self.aout_var).grid(row=2, columnspan=4)
            button4 = Button(frame, text="AOUT", command=self.writeAOUT)
            button4.grid(row=3, columnspan=4)

            
        def read_AIN0(self):
            bus.write_byte(address,0x40)
            bus.read_byte(address) # dummy read to start conversion
            temp = bus.read_byte(address)
            self.result_var.set(temp)
            
            
        def read_AIN1(self):
            bus.write_byte(address,0x41)
            bus.read_byte(address) # dummy read to start conversion
            temp = bus.read_byte(address)
            self.result_var.set(temp)

        def read_AIN2(self):
            bus.write_byte(address,0x42)
            bus.read_byte(address) # dummy read to start conversion
            temp = bus.read_byte(address)
            self.result_var.set(temp)
            

        def read_AIN3(self):
            bus.write_byte(address,0x43)
            bus.read_byte(address) # dummy read to start conversion
            temp = bus.read_byte(address)
            self.result_var.set(temp)


        def writeAOUT(self):
            temp = self.aout_var.get() # move string value to temp
            temp = int(temp) # change string to integer
            # print temp to see on terminal else comment out
            bus.write_byte_data(address, 0x40, temp)
            
      
root = Tk()
root.wm_title("PCF8591T Demo")
app = App(root)
root.geometry("300x120+0+0")
root.mainloop()

 

 

All’opposto, ho collaudato il MCP3422, ADC di tipo DELTA con risoluzione di ben 18 bit.

Anche per questo chip esiste una grande bibliografia.

Cito ad esempio:

http://www.raspibo.org/wiki/index.php/Input_analogico_I2C:_MCP3424

 

Annunci