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.参考资料
分享到:
相关推荐
在这个"I2C控制PCF8574参考例程.zip"的压缩包中,我们主要涉及到了几个关键的IT知识点,这些知识点对于嵌入式系统设计和开发人员来说非常重要。让我们逐一深入探讨。 首先,I2C(Inter-Integrated Circuit)是一种...
PCF8574是一款由德州仪器(TI)制造的I²C接口扩展器,它能将单个I/O线扩展为8个双向数字输入/输出(I/O)线,常用于STM32微控制器系统中以增加GPIO口的数量。 描述中提到的“stm32f103控制PCF8574的程序”,意味着...
内含I2C驱动,PCF8574驱动,LCD1602液晶驱动,光标控制,背光控制。 先初始化。delay_init(168); 参数为主频LCD1602_Init(); LCD_Write_String(2,3,"HELLO");在第3行第2个字写字符串。 LcdCurMove(2,3,1); 在第3行...
标题中的"I2C.zip_PCF8574_Proteus使用8574_c51 i2c通信_c语言i2c通信_proteus 7se"表明了这个压缩包内容是关于I2C通信协议的实践教程,具体是通过AT89C51微控制器与PCF8574扩展I/O接口芯片之间的交互。这里我们将...
PCF8574T是NXP生产的一款I2C/IIC接口的8位并行输入/输出扩展器。它通过IIC接口将单片机的两线数据传输扩展为8条数字输入/输出线。在本项目中,它作为1602A液晶屏的接口,将STM32的串行数据转换为并行数据,以便驱动...
最新单片机仿真 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 ,
PCF8574是一款低功耗、8位并行I/O扩展器,它通过IIC接口与主控器进行通信,可以将STM32的GPIO引脚数量扩展到更多的数字输入/输出。 首先,理解IIC协议至关重要。IIC是一种两线制串行通信协议,由数据线SDA(Serial ...
总结,使用Arduino的`LiquidCrystal_I2C`库和PCF8574 I2C扩展器,我们可以方便地与LCD1602进行通信,同时通过Proteus仿真验证代码的正确性,从而在不实际搭建硬件的情况下优化设计。这个方法对于学习和开发基于LCD...
标题"I2C.zip_PCF8574_i2c"涉及的是一个与I2C通信协议相关的项目,其中主要使用了PCF8574扩展IO芯片。这个压缩包包含了实现AT89C51微控制器与24C04A EEPROM及PCF8574之间的数模转换的源代码,并提供了Proteus Pro ...
通过理解I2C协议、LCD1602的工作原理和PCF8574T的使用,开发者可以构建出高效且简洁的显示系统。在压缩包中的“test”文件可能是相关的代码示例或者实验资料,可以帮助进一步理解和实践这一技术。
### PCF8574T I2C总线8位远程I/O扩展口芯片的知识点 #### 一、概述 PCF8574是一款由PHILIPS公司推出的I/O扩展口芯片,其核心特点在于支持I2C总线协议,并能够实现远程I/O口的扩展。这款芯片内置了一个8位的准双向I...
标题 "基于模拟i2c使用pcf8563" 涉及到的是在嵌入式系统或微控制器环境中,如何通过模拟I2C通信协议与PCF8563实时时钟(RTC)芯片进行交互。PCF8563是一款低功耗、高精度的RTC芯片,常用于各种电子设备中以保持准确...
【基于I2C的PCF8563 RTC C程序】是关于在嵌入式系统中使用PCF8563实时时钟芯片的编程实践。这个程序利用了I2C(Inter-Integrated Circuit)通信协议,使得微控制器能够与PCF8563进行数据交换,以获取和设置时间日期...
Arduino-LiquidCrystal_PCF8574.zip,使用I2C总线和PCF8574 I2C适配器驱动液晶显示器(LCD)的库。带有I2C PCF8574适配器的液晶显示器的Arduino库,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,...
在本项目"IIC.rar_ PCF8574_I2C LM75_PCF8574_lm75_lm75 iic"中,我们将深入探讨如何使用单片机IDE软件来操作几种特定的I2C器件:AT24C01 EEPROM、PCF8563实时时钟、LM75温度传感器以及PCF8574通用输入输出扩展器。...
### I2C总线器件PCF8574的原理与应用 #### 概述 本文旨在详细介绍I²C(Inter-Integrated Circuit)总线I/O器件PCF8574的工作原理及其广泛应用。PCF8574作为一种低功耗、体积小巧的通用I/O扩展芯片,在嵌入式系统...
PCF8574和PCF8575是I2C总线扩展器,常用于增加Arduino板的数字输入/输出引脚。 **PCF8574** 是一款8位并行输入/输出(I/O)扩展器,通过I2C串行接口与主控器(如Arduino)通信。它允许用户利用较少的I/O引脚控制更多...
PCF8574中文手册