基于I2C总线的I/O口扩展设计

发布者:码上奇迹最新更新时间:2012-08-31 来源: autooo关键字:IO口  MCU  PCA9554  LabVIEW 手机看文章 扫描二维码
随时随地手机看文章
0 引言
    随着电子技术的飞速发展,各类电子产品像雨后春笋般大量的进军电子市场,其中也包括正在蓬勃发展的汽车电子行业。一般汽车电子行业对这些电子产品的要求比较高,会有很多的技术指标去规范它们,其中很重要的一环便是环境实验。出于对工作效率的考虑,一个环境测试台架往往要求能对多个产品进行同时测试。而这些产品的引脚数量一般也会比较多,这样一来,测试台架上所需的测试通道数量就会很多,往往多达几百个。
    一般多数用于汽车电子产品的环境测试台架里面会集成有NI公司的DIO驱动板卡,由于它们的驱动端口比较多,便专用来负责产品的环境实验测试。以NI-6509为例,这是一个12×8的板卡,总共有12个通道,每通道8位I/O控制组成,总计96路I/O控制;NI-2532的矩阵板卡,其能支持的通道数是32×16,共512路。这些I/O端口,针对一般的应用是够的,但如果用于引脚数量比较多的产品测试,便会出现I/O口数
量不够用的局面。假如环境实验要同时测试12个产品,每个产品有40个引脚,那么对于产品引脚继电器就必须要有480个,再加上一些外围辅助仪器介入的切换,那么在这种情况下,这类DIO板卡的应用就显得很勉强。
    针对此类问题,本文提出了一种有效的解决方法,便是应用单片机的I/O口配合市面上一些常见的I/O扩展芯片,进行端口的扩展。单片机有4个端口,每个端口8位,总计32个位控制;扩展芯片,比如I2C芯片,只需要2根线(SDA&SCL)即可,因此可以连16组I2C通信,且每组可同时支持8个芯片(每组最大可容纳8个地址),每个芯片又可控制8个端口。因此,单片机理论上,至少可支持16×8×8个端口。并且,如果芯片头地址可以不一样的话,例如PCA9554和PCA9554A,那么端口数量又可以增加一倍,达到2 048个,这是一般的板卡所远远不能及的。

1 系统硬件设计
    本文所涉及到的硬件比较简单,上位机与MCU之间通过RS 232串口连接,MCU靠外部电源提供的5 V直流电进行工作。再将MCU的2个端口模拟成SCL,SDA两根线与PCA9554/A进行通信连接。这样就形成了上位机发送指令,单片机接受指令并进行相应解析后再通过SDA、SCL两根线向PCA9554/A发送命令数据,控制它的输入与输出。
1.1 PCA9554/A芯片介绍
    PCA9554和PCA9554A是16脚的CMOS器件,它们提供了I2C的应用中的8位通用并行输入/输出口(GPIO),PCA9554/54A包含一个8位配置寄存器(输入或输出选择)、8位输入寄存器、8位输出寄存器和一个极性反转(高电平或低电平操作有效)寄存器。系统主控制器通过写I/O口相应的配置位来激活端口的输入或输出。PCA9554/A有3个硬件管脚(A0,A1,A2)来实现不同的I2C地址,最多允许8个器件共用一个I2C总线上。PCA9554与PCA554A的惟一区别在于I2C地址不同,这样最多允许16个器件(9554和9554A各8个)连接接到同一个I2C总线上。
1.2 基于PCA9554/A的硬件设计
    按I2C规约,PCA9554的器件地址为0x40,PCA9554A的器件地址为0x70,当然,由于硬件地址引脚A0~A2可寻址8个器件,所以器件地址并不惟一,例如:A0接GND,A1接VCC,则PCA9554的器件地址为0x4C。使用STC89C52单片机为主控芯片,单片机的P1.3管脚与PCA9554的SDA管脚相连,P1.2管脚与PCA9554的SCL管脚相连。4个LED灯可以受四个按键控制,也可以受上位机进行控制。


2 系统软件设计
    本文系统软件设计主要分为两部分,一个是上位机的LabVIEW程序设计;另一个则是单片机底层C语言的程序设计。
2.1 LabVIEW的程序设计
    上位机的程序设计主要是与MCU串口通信,通过向MCU发送控制命令来达到对PCA9554/A的I/O口进行控制的目的。
    LabVIEW是一种图形化编程语言,由美国国家仪器(NI)公司研制开发的,类似于C和BASIC开发环境。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。
    本文主要是用LabVIEW语言编写与MCU的串口通信程序,界面友好、操作方便。LabVIEW控制单片机是通过Instrument I/O的Serial控件调用来实现的。主要用到其中的VISA配置串口节点,包括串口配置、读、写、关闭等节点。通过对这些节点的调用就可以方便的对串口进行操作。
    这里,Command to RS 232栏中的指令必须与单片机事先烧录好的代码相符合。这样,单片机才能将接收到的指令进行正确匹配,并执行相应操作。
    程序左端调用Configuration模块,进行串口的基本配置,比如BaudRate、数据位等,使这些参数与单片机里面的串口预定义设置相一致;右侧是Close模块,用于程序退出时,释放对串口的控制;中间是程序主体,包含对串口的读、写操作,实现对串口的双向通信。为了程序简洁、形象易懂,此次程序中用到了对LabVIEW子函数的调用,如RS 232-ini,RS 232W-R等模块,这些子函数就是用VISA串口节点来编写的,只是做了封装而已。 [page]

2.2 MCU的串口通信
    上位机是通过串口将指令字符传递给单片机的。单片机对串口的读操作是通过中断的方式实现的,以字符为单位,每接收到一个8位的字符,MCU产生一个读中断RI=1,此时,单片机将接收到的字符储存起来,然后软件将RI复位置0,继续接收下一个字符。本系统中,所有计算机发送给单片机的指令均以‘?’结尾。MCU接收到‘?’后,产生一个终止位,然后与事先定义好的指令进行匹配,如果指令事先有定义,那么就会执行相应的操作。
           
2.3 MCU的I2C时序模拟
    上位机向单片机发送指令数据,如果这些指令已在单片机中事先定义好,那么单片机将会通过模拟的SDA与SCL两个引脚,根据PCA9554/A的datasheet时序图,将控制命令数据传递给PCA9554/A,从而实现对PCA9554/A的I/O口进行控制。
2.3.1 PCA9554/A的写操作
    根据I2C总线传输协议以及PCA9554/A的总线读写特性,可以看出:对PCA9554/A端口的写操作主要是通过对它的输出端口寄存器进行写操作的。具体过程为:在SCL为高电平期间,SDA由高电平向低电平转换作为起始信号,SDA由低电平向高电平转化则为停止信号。在起始条件后,必须是从机地址,对于PCA9554来说从地址的高4位是0100,而PCA9554A则是0111,A2,A1,A0的高低电平状态可以有8种组合,最后一位是读写选择位。从地址发送完后便是等待从机的应答信号ACK,从机正确应答后便开始由主机发送命令字节,接着又是等待从机应答,应答后便开始发送数据了。以下为PCA9554的写操作部分代码。

2.3.2 PCA9554/A的读操作
    对PCA9554/A的读操作稍微麻烦一点,需要在收到第二次从机应答信号后再一次发送总线起始信号及从机地址即可。    

    由于篇幅原因,以上均只给出了部分重要程序。需要提出的是I2C总线上的起始、停止、以及读写数据的时序模拟均要参考PCA9554/A的datasheet中的时间参数要求,严格对应。

3 结语
    本文运用单片机与I/O扩展芯片PCA9554/A采用I2C通信进行I/O扩展,提出了具体的软硬件设计,完成了上位机对PCA9554/A端口的直接控制,并进行了I/O的有效扩展。并成功的应用在对多个汽车电子产品同时测量的环境试验中,取得了很好的效果。
关键字:IO口  MCU  PCA9554  LabVIEW 引用地址:基于I2C总线的I/O口扩展设计

上一篇:通用串行总线技术(USB OTG)提供电源管理最佳方案
下一篇:基于PCI总线的ARINC429接口卡设计

推荐阅读最新更新时间:2024-05-02 22:17

机械测量中旋转编码器与单片机的通用接口
  在准备”Freescale”杯全国大学生智能车比赛中我们开始的时候是采用红外传感器来测量速度,但是它受环境的干扰很大,且响应频率很小,还达不到1K Hz,为了提高速度测量精度和响应频率,减小环境的干扰,决定采用了旋转编码器,我们成功地开发了单片机与旋转编码器的最简硬件接口。   旋转编码器及其工作原理   旋转编码器是用来测量角度的装置。它分为单路输出和双路输出两种。单路输出是指旋转编码器的输出是一组脉冲,而双路输出的旋转编码器输出两组相位差90度的脉冲,通过这两组脉冲不仅可以测量转速,还可以判断旋转的方向。   它将测量到的角度量转换为数字脉冲信号输出,用来检测被检对象的角位移、角速度、角加速度、线位移、线速度和线加速
[单片机]
机械测量中旋转编码器与<font color='red'>单片机</font>的通用接口
51单片机开发系列三_数码管动态扫描显示
数码管由于发光亮度强,指示效果好,非常适合于电梯楼层等数值显示应用中。对于一位数码管,可以采用静态显示,但实际应用中都是需要显示多位数值,数码管模块也只能动态显示,因此笔者在这里简单分析一下数码管动态扫描驱动的实现。 1. 数码管原理概述 数码管由多个发光二极管封装在一起组成“8”字型的器件,引线已在内部连接完成,只引出它们的各个笔划,公共电极。数码管实际上是由七个发光管组成8字形构成的,加上小数点就是8个。这些段分别由字母a,b,c,d,e,f,g,dp来表示。数码管根据内部接法又可分成共阳极数码管和共阴极数码管。共阳数码管是指将所有发光二极管的阳极接到一起形成公共阳极(COM)的数码管(如下图SM*10501),共阴数码管是
[单片机]
51<font color='red'>单片机</font>开发系列三_数码管动态扫描显示
一种基于单片机的新型线阵CCD电路
引言   不同厂家、不同型号的CCD的驱动时序是不同的,加之对不同性能、不同应用场合的体积、成本、灵活性要求不同,于是产生了众多的驱动时序的产生方法,主要有直接数字电路驱动、单片机口驱动、EPROM驱动、专用IC驱动等常用的驱动时序的产生方法。但是它们存在着逻辑设计较为复杂、调试困难、柔性较差、驱动时钟低等缺点。   本文在综合各种驱动时序方法的基础上,提出了的一种基于单片机的新型驱动电路。该电路使用独立的时钟源产生精确的时钟脉冲,采用可编程定时计数芯片和单片机控制相结合的方法,使电路产生稳定、精确、高速的驱动脉冲,该电路结构简单、调试方便、CPU占用率低,降低了系统的总体成本,而且具有良好的柔性,只需要改变驱动软件就可以应用于不
[单片机]
关于“世上只有妈妈好”的单片机音乐演奏程序
单片机演奏一个音符,是通过引脚,周期性的输出一个特定频率的方波。 这就需要单片机,在半个周期内输出低电平、另外半个周期输出高电平,周而复始。 半个周期的时间是多长呢?众所周知,周期为频率的倒数,可以通过音符的频率计算出半周期。 演奏时,要根据音符频率的不同,把对应的、半个周期的定时时间初始值,送入定时器,再由定时器按时输出高低电平。 下面是个网上广泛流传的单片机音乐演奏程序,它可以循环的播放“世上只有妈妈好”这首乐曲。很多人都关心如何修改这个乐曲的内容,但是不知如何入手。 做而论道对这个程序,给出说明,希望对大家有所帮助,以后大家自己就能够编写进去新的乐曲。 在这个程序中,有两个数据表,其中存放了事先算好的、各种音符频率所对应的、
[单片机]
STM8单片机实现蓝牙串口通信系统的设计
最近在淘宝逛的时候发现了一款单片机,STM8。相比之前一直使用的也是8位的AVR相比,感觉STM8更为强大,芯片特点如下: 内核:具有3级流水线的哈佛结构、扩展指令集 程序存储器:8K字节Flash;RAM:1K字节 数据存储器:640字节真正的数据EEPROM;可达30万次擦写 更重要的一点就是STM8系列若使用库编程的话,可以方便的不同芯片的程序移植。甚至可以方便的移植到STM32上面,大大减轻了更新硬件的重写程序的工作量。 ADC0832为8位分辨率A/D转换芯片,其最高分辨可达256级,可以适应一般的模拟量转换要求。其内部电源输入与参考电压的复用,使得芯片的模拟电压输入在0~5V之间。芯片转换时间仅为32μS,据有双数
[单片机]
STM8<font color='red'>单片机</font>实现蓝牙串口通信系统的设计
单片机应用电路板的故障诊断方法简介
1 引 言   单片机以其体积小、功耗低、应用灵活、性价比高等优势,广泛地应用在仪表、家用电器智能化和工业控制等领域。在我军新型电子装备中,单片机的应用也很普遍。当这些装备出现故障时,可利用机内自检程序将故障定位到印制电路板。因此,电路板的性能测试及故障诊断就成为装备维修工作中的重点。我们在研制电子装备通用自动测试系统时,将PCB的测试,尤其是带单片机的PCB(简称CPU板)的故障诊断作为难题之一来研究。CPU板的测试和诊断与普通数字电路板有相同之处,也有其自身的特点,因为CPU板是总线结构的PCB板,其总线结构中的总线器件(如:RAM、ROM等)随着程序指令的进行而完成不同的功能,管脚数据信息随着程序的执行不断变化,一般采用仿真方
[单片机]
<font color='red'>单片机</font>应用电路板的故障诊断方法简介
基于单片机的单键电路设计及对应程序
  单键,就是每个按键占用一个单片机的管脚,这种接法的特点是电路和程序都很简单,缺点是占用单片机的管脚多、消耗硬件资源大。这种接法一般适合于 6个或不多于6个按键。 单键电路的电路图见图1,由图可以看出,每一个按键的一端都直接连有一个8255的PC端口的一个管脚作为输入管脚,并且这个端口管脚只连有一个按键,这样的接法就是单键接法。单键接法要求按键的一端接有一个上拉电阻,而按键的另一端直接接地,这样可以在按键没有合上的时候保持输入管脚始终是高电平。如果程序检测到这个管脚为高电平,就会认为该管脚的按键没有按下,而按键合上以后,输入管脚的电平就会变成低电平,这样当程序检测出输入管脚为低电平以后,就会认为这个按键被按下。 单键电路
[单片机]
单片机学习#80C51
80C51串行口的结构 有两个物理上独立的接收,发送缓冲器SBUF,他们占用同一地址,99H,接收器是双缓冲结构发送缓冲器,因为发送是CPU是主动的,不会产生重叠错误。 串口的控制 寄存器
[单片机]
<font color='red'>单片机</font>学习#80C51
小广播
最新嵌入式文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved