1.前言
树莓派的GPIO端口数量有限,可通过IO扩展芯片增加GPIO的数量,使得树莓派可以适应更多的应用。PCF8574为一款通过I2C总线扩展IO的芯片,单个PCF8574可扩展8个IO,一个I2C总线最多可挂载8个PCF8574,所以树莓派最多可扩展64个IO。
树莓派扩展功能的开发方法有很多,例如wiringPi和bcm2835 C library都提供I2C API函数。如果使用python+SMBUS库开发的话,你会发现Linux应用开发原来如此简单。(注意SMBUS和I2C存在区别与联系,在本文中两者是相等的概念)
2.相关博文
3.PCF8574使用简述
PCF8574的采用7位I2C地址,7位I2C地址中的低3位从高到低分别为A2 A1和A0,该3位为地址选择位,若地址选择全部接GND,那么PCF8574的I2C从机地址为0x20。图1为PCF8574的基本信息,左侧为芯片内部结构示意图,其中A2 A1和A0决定从机地址而从机地址直接影响I2C总线控制器,右侧上部为PCF8574引脚图,右侧下部为I2C从机地址组成示意图,从机地址的高4位为0100,该4位数字固定不变。
图1 PCF8574基本信息
请注意I2C 7位从机地址和I2C 读控制字或i2C写控制器存在联系与区别,对于7位从机地址为0x20的PCF8574而言,读控制字为0x41,写控制字为0x40。若使用GPIO通过软件法模拟I2C时序时,通常把写控制字0x40定义为I2C从机地址,软件模拟时的I2C地址(0x40)和I2C 7位从机地址(0x41)存在区别。
PCF8574内部含有8个准双向IO,对PCF8574进行一次写操作可修改IO口的输出状态,对PCF8574进行一次读操作可获取IO口的输入状态。I2C总线的操作较为复杂,各芯片之间的差异较大,例如BH1750、AT24C04和ADXL345虽然均使用I2C接口,但是细节之处存在差异较大。
图2 PCF8574读写时序
4.代码实现——python
【安装python smbus】
sudo apt-get install python-smbus
新建一个名为pcf8574.py的文件
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import smbus
import time
# 打开 /dev/i2c-1
bus = smbus.SMBus(1)
while True:
for i in range(0,4):
# 向PCF8574写入一个字节
bus.write_byte( 0x20 , (1<<i) )
# 延时100ms
time.sleep(0.1)
【代码详解】
【1】#!/usr/bin/env python
定义python解析脚本的绝对路径。
【2】# -*- coding: utf-8 -*-
py文件为utf-8格式,否则无法写入中文注释。
【3】import smbus
导入smbus模块。
【4】bus = smbus.SMBus(1)
在树莓派版本2中,I2C设备位于I2C-1,所以此处的编号为1
【5】bus.write_byte( 0x20 , (1<<i) )
向PCF8574写入一个字节,注意PCF8574和其他I2C芯片不同,该芯片没有寄存器,发送写控制字之后可直接设置IO口输出状态。
【执行程序】
进入pcf8574.py所在目录,输入以下指令
sudo python pcf8574.py
【运行结果】
图3 运行结果
5.参考资料
分享到:
相关推荐
基于MPLAB IDE V8.30,使用PIC16F913通过I2C控制PCF8574参考例程 !注意硬件上输出灯亮度比较弱(仅靠8574引脚输出电流就几十uA吧),实际需要加上拉。
内含I2C驱动,PCF8574驱动,LCD1602液晶驱动,光标控制,背光控制。 先初始化。delay_init(168); 参数为主频LCD1602_Init(); LCD_Write_String(2,3,"HELLO");在第3行第2个字写字符串。 LcdCurMove(2,3,1); 在第3行...
stm32f103控制PCF8574的程序,加入代码修改IO可以直接使用。
最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574...
PCF8574 这是用于 I2C IO扩展器芯片的Python库。 它将8位IO端口抽象为Python列表...In [ 4 ]: pcf = PCF8574 ( i2c_port_num , pcf_address ) In [ 5 ]: pcf . port Out [ 5 ]: [ True , True , True , True , True ,
AT89C51利用PCF8574演示I2C的通信,并用了7SEG-MPX4-CC数码管的Keil uVision4 C语言代码,并用proteus演示成功。
STM32通过模拟IIC读PCF8574
单片机通过 PCF8574T 模块驱动 1602/2004 LCD,有需要的朋友看看。STC 89C52 、STC12C5A60S2 单片机均可使用。
Arduino-LiquidCrystal_PCF8574.zip,使用I2C总线和PCF8574 I2C适配器驱动液晶显示器(LCD)的库。带有I2C PCF8574适配器的液晶显示器的Arduino库,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,...
利用单片机IDE软件实现对I2C总线器件操作,包括AT24C01,PCF8563,LM75,PCF8574
介绍I_2C总线I_O器件PCF8574的原理与应用,内容不错。需要的请看看。
stm32硬件IIC连接PCF8574T,控制1602液晶屏。可以控制光标,采用简单延时函数。
PCF8574中文手册
PCF8574T-中文资料 I2C 总线8 位远程I/O 扩展口芯片PCF8574 的原理与应用
此pcf8563使用的是模拟的i2c来设置、读取rtc芯片,此程序可以在程序中直接使用,只需修改i2c的io接口就行了,也是经过摸索调试成功了
PCF8574中文手册
AT89C51+24C04A+PCF8574的数模转换源代码,含Proteus Pro 7.8 SP2模拟。
使用PCF8574 / PCF8574A I2C GPIO,仅使用2个Arduino引脚连接矩阵键盘-轻松快捷!
PCF8574_library:使用arduino,esp32和esp8266的i2c数字扩展器的库。 只需2根线即可读取写入数字值(对于ESP-01而言是完美的)
原本lcd1602需要占用十多个io口,通过pcf8574t可以大大节约占用的io口数量,实验平台是stc89c51,通过iic驱动pcf8574t控制1602A