字符叠加芯片 IA6459的应用
IA6459 是 OSD 电路 , 与 MCU 配合使用 , 可控制不同类型的显示系统。显示点阵为 12 × 18 ,内置部分数字、英文字符、拉丁字符和中文字符。电路集成有上电复位电路和 VRAM 清零电路用于减轻 MCU 的工作量。
IA6459 有两种工作模式:外部工作模式和内部工作模式,并内置混合同步信号分离电路及同步信号产生电路;当IA6459 电路用于外部模式时,由外部输入混合同步信号,分离后用于行场同步 , 同时 VBSI 管脚输入外部视频信号通过开关叠加了字符信号后从 VBSO 管脚输出 ; 当 IA6459 电路用于内部模式时 , 由内部产生同步信号 , 同时 VBSI 管脚管脚关闭输入 ,字符信号从 VBSO 管脚输出。
图1
由于视频信号的基线为 700mV 左右,如果要与由芯片生成的字符信号进行叠加,必须提升其基线值到 2V 左右,即进行直流偏置。
从字符叠加器输出的视频混合信号 Vo u t 带负载能力不强,所以需加入一个视频放大电路来提高视频混合信号 Vo u t负载能力,同时加入一个电解电容。经 IA171的处理后,将基线为 2V左右的混合信号还原成基线为700mV左右的视频输出信号,输出到视频显示设备进行显示。
图2
IA6459命令格式及寄存器分配如图3、4、5
控制字符叠加芯片的工作方式和过程可以用单片机通过2条串行线(DATA、 CLOCK引脚)用命令来设置, IA6459的命令格式分为三种,分别为单字节命令,二字节命令和二字节连续命令,每种命令均为高位在先。
图5
字符叠加软件设计
本文介绍的字符叠加电路运用于视频监控系统中,叠加菜单和聚焦倍数、变焦倍数、镜头参数、语言类型和波特率等一列的信息。
代码1:芯片初始化
/**************************************************************
* Name : 芯片初始化
***************************************************************/
void videoram_clear(void) //VRAM清零
{
CSY=0;
menu_sendbyte(0x00);
CSY=1;
}
void display_control(bit k) //显示控制
{
CSY=0;
if (k==0)
menu_sendbyte(0x16);
else
menu_sendbyte(0x1e);
CSY=1;
}
void internal_signal_color(void) //内部模式背景颜色控制
{
CSY=0;
menu_sendbyte(0x22);
CSY=1;
}
void background_control(void) //背景控制指令
{
CSY=0;
menu_sendbyte(0x32);
CSY=1;
}
void mode_control(bit flg) //内外模式选择,时钟控制指令
{
CSY=0;
if (flg==1)
menu_sendbyte(0x43);//(0x45); //内部视频信号模式
else
menu_sendbyte(0x43); //外部视频信号模式
CSY=1;
}
void singal_method_control(void) //视频信号制式选择
{
CSY=0;
menu_sendbyte(0x49);
CSY=1;
}
void oscillation_control(void) //振荡模式选择指令
{
CSY=0;
menu_sendbyte(0x52);
CSY=1;
}
void dis_positionarea(void)
{
CSY=0;
menu_sendbyte(0x80); //显示位置控制指令
menu_delay(1);
menu_sendbyte(0xC5);
CSY=1;
menu_delay(20);
CSY=0;
menu_sendbyte(0x84); //写地址控制
menu_delay(1);
menu_sendbyte(0x00);
CSY=1;
menu_delay(20);
CSY=0;
menu_sendbyte(0x91); //输出电平控制
menu_delay(1);
menu_sendbyte(0x06);
CSY=1;
menu_delay(20);
CSY=0;
menu_sendbyte(0x98); //字符尺寸控制
menu_delay(1);
menu_sendbyte(0x00);
CSY=1;
}
代码2发送子程序
/***************************************************************
* Name : menu_sendbyte(unsigned char videodata)
* Deion :发送子程序
* Input : videodata
* Return : None
***************************************************************/
void menu_sendbyte(unsigned char videodata)
{
unsigned char i;
VTXD = 0;
CLK=1;
menu_delay(20);
CY=0;
for (i=0;i<8;i++)
{ CLK=0;
menu_delay(10);
videodata <<= 1;
VTXD = CY; menu_delay(10); CLK=1; menu_delay(20); } CLK = 1; 代码2显示字符子程/******************************************************************** * Name : discharacter(unsigned char *p,unsigned char len,unsigned int pos,bit blink) * Deion :显示字符子程序 * Input : 指针,长度,起始位置,闪烁 * Return : None ***************************************************************/ void discharacter(unsigned int *p,unsigned char len,unsigned int pos,bit blink) { unsigned char i; CSY=0; menu_sendbyte(pos>>8); menu_sendbyte(pos&0xff); CSY=1; menu_delay(254); menu_delay(254); for(i=0;i<len;i++) { CSY=0; if(blink==0) { if((*p)>0x00ff) menu_sendbyte(0xC1); else menu_sendbyte(0xC0); } else { if((*p)>0x00ff) menu_sendbyte(0xC3); else menu_sendbyte(0xC2); } menu_sendbyte((*p)&0xff); p++; CSY=1; } CSY=1; }