cpubbs论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

LabVIEW+单片机学习套件全套教程资料下载[免费]LabVIEW论坛精华列表贴USB0816数据采集卡《LabVIEW宝典》
LabWindows/CVI论坛精华贴NET0816以太网数据采集卡RC0210远程设备授权系统 关闭关停锁定打开设备 户外分布式数据采集
NET1624低速高精度以太网数据采集卡WIFI0824SD无线WIFI网络数据采集卡脱机运行 SD存储 小尺寸微型 串口采集远程采集 安卓 手持移动采集 纪录仪
查看: 1764|回复: 1

用I2C总线扩展I/O

[复制链接]
发表于 2004-12-4 17:30:29 | 显示全部楼层 |阅读模式
<>在系统应用中,需监控不同的输入信号或控制几个输出信号,有时把这些信号线直接连接到微处理器引脚。这些监控和控制用软件来做。然而,这种技术需要很多微处理器引脚。

为了节省微处理器引脚,另一种可采用的方法是通过胶合逻辑接口实现监控和控制线与微处理器的通信。采用这种方法,连接到微处理器引脚的连线较少。而开发这样的系统比较麻烦和费时,因为需要更多的器件、更多的连线路由或更复杂的码开发。

本文给出监控和控制几个外设信号的良好方案,为接入并行总线提供一简单经济的方法,为接口不同的电子器件提供方便的途径。此方案是基于标准PCF8574和PCF8574A器件基础上的。这些器件的I2C地址是不同的。在此把这两种器件当做扩展器。

这种扩展器具有1个2线I2C通信总线,可与双向数据传输的I2C主机接口。I2C总线由2条信号线和1条地线组成。信号线是双向串行数据(SDA)线和双向串行时钟(SCL)线(见图1)。SDA和SCL线经上拉电阻连接正电源电压。在总线闲置时,这两条信号线上拉为高态。
<img src="attachments/dvbbs/2004-12/200412492819479.jpg" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt=\'Click here to open new window\nCTRL+Mouse wheel to zoom in/out\';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor=\'hand\'; this.alt=\'Click here to open new window\nCTRL+Mouse wheel to zoom in/out\';}" onclick="if(!this.resized) {return true;} else {window.open(\'attachments/dvbbs/2004-12/200412492819479.jpg\');}" onmousewheel="return imgzoom(this);" alt="" /></P>
<>图1  I2C总线器件通过双向SDA和SCL线连接到I2C总线上</P>
<>
</P>
<P><img src="attachments/dvbbs/2004-12/20041249306975.jpg" border="0" onload="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt=\'Click here to open new window\nCTRL+Mouse wheel to zoom in/out\';}" onmouseover="if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor=\'hand\'; this.alt=\'Click here to open new window\nCTRL+Mouse wheel to zoom in/out\';}" onclick="if(!this.resized) {return true;} else {window.open(\'attachments/dvbbs/2004-12/20041249306975.jpg\');}" onmousewheel="return imgzoom(this);" alt="" /></P>
<P>图2  用PCF8574和PCF8574A实现I/O扩展的电路
连接到I2C总线上的每个器件,根据其功能都具有自己的专门地址,每个器件可做为接收器或发送器。可配置扩展器具有专门的7位地址。PCF8574  7位地址的前4位是0100,而PCF8574A是0111。低3位地址由器件引脚A2、A1、A0设置。因此,器件的完整的专门地址由A2、A1和A0设置。表1示出PCF8574和PCF8574A专门地址的各种可能设置。

这种为器件设置专门地址的能力使得在同一I2C总线上可具有多达8个PCF8574和8个PCF8574A器件。因为每个器件具有8个I/O引脚,所以采用PCF8574和PCF8574A可使单个I2C总线能控制多达128个I/O。

I2C与扩展器的通信由主机进行初始化,主机发送与主机通信的从器件的地址位。地址字节的第1部分由4位地址码组成,对于PCF8574器件设置为0100、PCF8574A器件设置为0111。片选位(A2、A1、A0)跟在地址码之后。这使得在1个总线上能用多达8个PCF8574和8个PCF8574A并能确定存取那个器件。对于所响应的器件,其地址字节中的片选位必须对应相应A2、A1和A0引脚上的逻辑电平。图2所示的电路用8个PCF8574和8个PCF8574A器件控制和监视高达128个I/O。
</P>

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
发表于 2005-7-20 11:47:54 | 显示全部楼层
<>我购了4片pcf8574,可是当把io port当成input时,读数把高位的1当1,当遇到第一个零以后,就把后面的读数就全是零了。四片全是这样,,,,好苦恼~</P><>把pcf8574当成input时不是只要在最开始的时候对所有端口写1就行了么</P><>还有什么我忽略了的么?</P>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|手机版|cpubbs论坛. ( 粤ICP备09171248号 )

GMT+8, 2025-5-4 12:35 , Processed in 0.432463 second(s), 9 queries , Gzip On, File On.

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表