1.、PCF8591是8位的数模\模数转换集成芯片,如图 1.(详细介绍可以点击参考)
图 1 PCF8591
2、AIN0-AIN3接模拟输入,比如气体传感器,能外接三个通道的模拟输入,AOUT是模拟输出。
SCL、SDA分别接树莓派引脚的2、3引脚,与树莓派进行I2C通信,VCC、GND接树莓派的5V,GND.
线路连接好后,树莓派命令行查看PCF8591的地址
sudo i2cdetect -y 1
3、读取PCF8591的值,注意它的地址值和控制字
import matplotlib.pyplot as plt
import RPi.GPIO as GPIO
import numpy as np
import smbus
address = 0x48 # PCF8591地址
ain_address = [0x40, 0x41, 0x42, 0x43] # 读取模拟输入,对应AIN0-AIN3
bus = smbus.SMBus(1)
bus.write_byte(address, ain_address[0]) # 0X40 AIN0
bus.read_byte(address) # 空读一下
value = bus.read_byte(address) # 0x40通道的值
树莓派外接多个PCF8591
树莓派和PCF8591AD模块采用I2C通信协议的方式,地址由A2A1A0决定(如图2),通过改变地址的组合方式,理论上树莓派可以外接2^3 = 8个AD模块,但是由于PCF8591硬件编程地址引脚A2A1A0默认接地(见原理图),PCF8591模块的默认地址是0x48(1001000),为了树莓派能外接多个AD模块,就需要改变模块的默认地址。
改变PCF8591AD模块地址的方法:本方法中采用的方式是破坏PCF8591芯片的A2A1A0引脚接地状态(也就是暴力挑开A2A1A0引脚,强行改变它的地址)。第一个AD模块不改变引脚状态,得到默认地址0x48(1001000);第二个AD模块的A0接高电平,A1和A2接低电平,得到地址0x49(1001001);第三个AD模块的A1接高电平,A0和A2接低电平,得到地址0x4a(1001010);第四个AD模块的A2接高电平,A0和A1接低电平,得到地址0x4c(1001100)。
图 2 PCF8591控制字