PCF8591使用及Python控制
INTRODUCTION
大家一定对于PCF8591芯片,对于其中的A0、A1、A2、channel0-channel3、AIN0-AIN3、AOUT、SCL、SDA等等以及I2C协议有着很大的困惑。同时也没有完全理解Python代码中的0x40、0x41、0x42、0x43、0x48到底是什么,bus.write_byte(0x48, 0x40) bus.write_byte(0x48, 0x40, value) bus.read_byte(0x48)这些代码到底控制什么。
这篇文章将帮助大家理清以上内容。
一、PCF8591与Raspberry Pi的关系
做一个很简单的形象化,将整个系统看作一个进水/出水装置。
装置有四根进水管,分别命名为AIN0, AIN1, AIN2, AIN3,还有唯一一根出水管,命名为AOUT。还有四个中转通道,分别命名为channel0, channel1, channel2, channel3,从四根进水管进来的水可以受控制地从某一个通道中流出,进入总管道,之后通过两根出水管道——SDA和SCL,进入一个水的加工处理储存设备。
Raspberry PI是“MASTER”,PCF是“SLAVER”,他们之间是主从关系。如果主器件要发送数据给从器件,则会启动数据传输,并发送数据至从器件,最后终止数据传输;如果主器件想要接受从器件发来的数据,同样也是发出命令启动数据传输,接收从器件发来的数据,最后终止接收过程。
强调一点:每次数据传输都是由“MASTER”主动开启的。
是否清晰了一些?理清总的关系以后我们再来看具体细节。
二、PCF的地址与A0-A2引脚
一个“MASTER”不可能只有一个“SLAVER”。所以对于“MASTER”来说,需要给“SLAVERS”编号,以便控制、命令。这个编号也就是PCF地址。地址的编码规则如下图:
可以看出,这是一个七位二进制数,前四位是fixed number,后三位分别对应PCF的三个引脚——A0, A1, A2。每一个引脚的值都可以是0或1,