这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 字符叠加芯片 IA6464的应用

共1条 1/1 1 跳转至

字符叠加芯片 IA6464的应用

助工
2014-11-25 20:31:16     打赏

字符叠加芯片 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命令格式及寄存器分配如图345


控制字符叠加芯片的工作方式和过程可以用单片机通过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;

 }

 



共1条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]