基于I2C总线的PIC单片机端口扩展技术
1. 概述
随着单片机技术的发展,单片机在机电产品领域的应用越来越广泛。一方面,希望单片机构成的嵌入式系统功能尽可能强大,处理能力强,控制对象多;另一方面,又希望整个系统的成本尽可能低,即性价比好。因此,实际应用中经常会遇到单片机I/0接口资源不够用的情形,在一些较复杂的应用系统中,由于被控对象较多,如控制多个LED数码管的显示、超过30路状态的显示等,此时,端口供需矛盾尤其突出, 通常的解决方法是采用8155 , 8255 , 8259 , 74HC164,74HC165,74LS373 及74LS245 等外扩I/0 接口, 这样必然会使系统更加复杂, 成本增加, 可靠性下降。
目前,功能较强的单片机中大多采用了FLASH技术,并且在传统的USART串行通信功能的基础上增加了诸如SPI、I2C、CAN等先进实用的功能;并且许多外围芯片具有I2C之类的通信接口,如具有64个按键、8×8个LED数码管驱动的ZLG7290芯片。因此,单片机端口扩展可选用更方便、功能更强的扩展途径。
I2C(内部集成电路,Inter IC,IC TO IC)总线是Philips Semiconductors在20世纪80年代中期开发的,最初用于音频和视频目的。将I2C扩展为系统管理总线SMBus后可用于电源管理及CPU与其它组件的通信。I2C支持多主控模式,2.1版规定的传输速率在标准模式下为最高100kbit/s,快速模式下为400kbit/s,高速模式下为 3.4Mbit/s[1]。由于只需要微控制器的两个端口引脚就可以传输任意特性的数据,所以I2C总线协议得到了广泛的应用,并促进了大量的I2C外部芯片的开发。I2C总线可用于控制IC卡、数据转换[2] 、LCD控制、时钟控制[3]、存贮器控制[4]、、多机通信[5]等。本文主要讨论MICROCHIP公司的PIC18F458用于控制汽车车身状态显示时,基于I2C接口的ZLG7290芯片的控制问题。
2. I2C总线的工作时序
串行总线I2C由数据线SDA和时钟线SCL构成,挂接在I2C总线上的器件可以是主控器Master(负责产生时钟SCL信号),也可以是从动器件 Slave,可作为发送器,也可作为接收器。I2C总线转换一次为9位,前8位按自MSB至LSB的顺序传送数据,第9位为应答ACK位,SCL信号为高电平时,SDA状态的变化用来实现转换的启动和停止。并且,每一个数据位的传送,需要一个SCL周期的支持,数据传送过程中,SCL为高电平时,SDA线上的数据必须保持,仅当SCL为低时,才可改变SDA线的状态(数据)。基本I2C通信的过程为:START(RESTART)à7bit外设芯片地址+R/~W控制位à8bit外设芯片内部寄存器地址à传送的多个数据字节àSTOP。I2C总线数据传送时序如图1所示。
图1 I2C总线数据传送时序
3. ZLG7290扩展芯片
ZLG7290是广州周立功单片机发展有限公司开发的基于I2C接口的键盘及LED驱动器,可驱动8 位共阴数码管或64 只独立LED 和64 个按键。ZLG7290 提供两种控制方式:寄存器映象控制和命令解释控制,寄存器映象控制是指以字节操作方式直接访问底层寄存器实现基本控制功能;命令解释控制是指通过解释命令缓冲区CmdBuf0/ CmdBuf1 中的指令间接访问底层寄存器实现扩展控制功能如实现寄存器的位操作,对显示缓存循环移位,对操作数译码等。ZLG7290 的从地址( slave address)为70H(01110000B),内部寄存器的地址为00~17H。ZLG7290内部功能框图如图2所示,本次应用中采取寄存器映象控制方式对LED实现控制。
图2 ZLG7290内部功能框图
4.PIC18F458基于I2C通信的实现
PIC18F458是MICROCHIP公司开发的集成CAN控制器的高档8位FLASH单片机,具有32K字节FLASH程序RAM空间,数据存贮器为1536字节RAM+256字节EEPROM,共33个I/O端口[6][7]。 PIC18F458的主同步串行端口(MSSP)模块中提供了SPI和I2C通信功能,引脚RC4和RC3分别用作I2C模式下的数据SDA线和时钟 SCL线;内部有6个寄存器与I2C通信控制有关,它们分别是:MSSP控制寄存器1 (SSPCON1)、MSSP控制寄存器2 (SSPCON2)、MSSP状态寄存器 (SSPSTAT)、串行收/发缓冲器 (SSPBUF)、MSSP移位寄存器 (SSPSR)和MSSP地址寄存器 (SSPADD),其中,SSPCON1/SSPCON2用来设置工作方式,SSPADD用来设置器件地址(PIC18F458用作SLAVE时)或通信波特率(PIC18F458用作MASTER时),MASTER模式下,SSPADD的值应满足以下公式:
(Fosc/4)/FI2C=SSPADD+1
其中:
Fosc/4:PIC18F458内部时钟频率,固定为晶振频率的1/4;
FI2C:I2C通信的最高速率,单位:kbit/s,一般用100kbit/s
SSPADD值最后需圆整为大于或等于计算值的整数中的最小整数。
图3为PIC18F458控制ZLG7290作为车身状态显示驱动器时硬件接线,ZLG7290的19脚和20脚用来实现与PIC18F458的通信控制,显示控制在程序上的实现主
- 一种基于DSP的张力、深度、速度测量系统(04-15)
- I2C总线及EEPROM的Linux驱动程序的设计(01-05)
- 基于C语言的I2C总线软件模块设计(01-09)
- 基于MSP430单片机的智能IC卡水表控制器(07-08)
- 实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序(07-25)
- 基于FPGA的嵌入式图像采集系统设计(06-05)