屏显示器件MC141541及其接口技术
1、引言
在某些图像处理系统中,往往需要在显示目标视频图像的同时,显示其参数及提示等信息。如医疗设备B超、CT、X透视,除了在监视器显示人体内部的组织器定外,还要显示相关参数,以辅助医生作出准确诊断。电力系统的红色外检测设备在显示被测目标的热像时,还要显示出其温度等参数,以便测试人员从定性的热像和定量的参数中诊断出故障所在。
利用MC141541在屏显示器件可使微处理器(MPU)通过I2C总线接口将需要显示的数据定入在屏显示器件(OSD),然后将数据输出显示。其字符的显示及同步均由OSD完成。OSD作为独立的智能I/O,可大大减轻MPU的负担。
2、I2C总线
I2C总线由PHILIPS公司推出,目前已广泛应用于MPU系统及数字电视等领域。它只有二根信号线:一根是双向数据线SDA,另一根是时钟线SCL。所有连接到I2C总线设备上的串行数据SDA都连接到总线的SDA线上,各设备的时钟线SCL接到总线的SCL。具有I2C总线的器件有很多种类,常用的如LED驱动器、LCD驱动器、静态RAM、EEPROM、时钟/日历、A/D、D/A、电视类及音响类器件等。I2C总线的标准传输速度为100k bit/s,而其高速方式的传输速度为400k bit/s。组成I2C总线的关键是其传输协议,即如何使总线上的主器件(通常是MPU)协调总线上的从器件。协议主要包括以下几个典型过程:
(1)一位数据传送:串行数据总线是按位传送的,因此位数据传送是I2C总线数据传送的最基本,也是最重要的过程。I2C总线规定SCL上一个时钟周期只能传送一位数据;
(2)起动和停止:起动和停止信号由主机发出,以控制总线上的数据传送。从设备在侦听到总线上的起动信号后开始准备收发数据;而监测到停止信号后结束数据传送。因而,起动和停止协议控制着一帧完整的数据传输。
(3)应答:在一个字节(8位)数据传送完毕后,接下来的一个时钟周期(即第9个)为应答过程。应答过程可保证传送数据的完整性,并可用来检验其有效性。
(4)寻址:要对并行数据总线上的I/O进行操作,就必须对地址总线进行译以选中某个I/O。而I2C总线并无地址总线,它是利用所发送串行数据的头几个字节作为地址来选中I2C总线的I/O设备的。每个I2C总线的I/O设备都有一个I2C地址。
3、MC141541芯片及其接口电路
MC141541是MOTOROLA公司推出的增强型在屏显示器件(EMOSD),可广泛应用于数字电视及图像系统中。其主要性能如下:
●具有二种可选分辨率模式,分别为320点/行(CGA)和480点/行(EGA);
●内置PLL电路,最高行频为110kHz,点时钟频率为52.8MHz;
●内部273字节寄存器可直接存取,全屏字符为10行×24列;
●字符集为128个符号图形ROM和8个用户可编程RAM。10×16点阵字符。其字符颜色、背景颜色、双倍高度、双倍宽度、边框及阴影均可编程;
●I2C总线接口地址为7A(Hex);
●采用单5V电源供电;
MC141541的接口电路原理图如图1所示。其中:Vss和VDD分别为地和电源端;Vco和RP用于外接振荡电路;H、V分别为分、场同步输入信号;SDA、SCL分别为I2C总线数据和时钟信号;SS为I2C总线允许信号;R、G、B为输出至监视器的RGB TTL电平信号。
MC141541是一种I2C总线接口器件,它的硬件接口非常简单。根据上述规则,只须将SDA与I2C总线的SDA信号相接,并将SCL与I2C总线的SCL信号相连即可。MC141541与MPU接口的关键在于按照I2C总线协议进行编程。
MC141541的数据包格式如下:
这样,在监视器上显示字符时,只须送出行、列坐标地址,然后再送出字符代码即可。在编程时,上述格式具体可划分为下述三种方式:
(1)R→C→I→R→C→I……
(2)R→C→I→C→I→C→I→……
(3)R→C→I→I→I……
MC141541可编程的字符RAM编程格式如下:
在编程时,上述格式亦可划分为下述三种方式:
(1)S→L→I→S→L→I……
(2)S→L→I→S→L→S→L……
(3)S→L→I→I→I……
在字符RAM编程格式中,SEG ADDRESS和LINE ADDRESS分别为要编程字符RAM的段、线地址,而其段地址字符RAM字模的位置内容由线地址寻址的RAM决定。这样,通过编程字符RAM就可以得到任意字符、图标及汉字。
4 传输协议子程序
图1中,接口电路的核心器件是MC141541,MPU选用8031系列芯片89C51。由于89C51没有I2C总线接口,因此要根据I2C总线协议及MC141541的数据传输格式,用软件编程模拟接口时序。以下是用Franklin C51语言编程模拟I2C总线基本传输协议的子程序清单:
void star( ) //起动
{SCL=0;
SDA=1;
SCL=1;
SDA=0;
}
void stop()//停止
{SCL=0;
SDA=0;
SCL=1;
SDA=1;
}
void ack()//应答
{SCL=0;
SCL=1;
SCL=0;
}
void wbit()//一位数据传送;写
{SCL=0
SDA=eebit;
SCL=1;
}
void rbit( ) //一位数据传送;读
{SCL=0;
SCL=1;
Eebit=SDA;
}
- 一种基于DSP的张力、深度、速度测量系统(04-15)
- I2C总线及EEPROM的Linux驱动程序的设计(01-05)
- 基于C语言的I2C总线软件模块设计(01-09)
- 基于MSP430单片机的智能IC卡水表控制器(07-08)
- 实战经验吐血推荐:怎样在Linux环境下轻松实现基于I2C总线的EEPROM驱动程序(07-25)
- 基于FPGA的嵌入式图像采集系统设计(06-05)