DIY编程器网

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 391|回复: 0
打印 上一主题 下一主题

基于AVR的VGA显示和激光打印系统

[复制链接]
跳转到指定楼层
楼主
发表于 2012-1-16 14:49:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
摘要:用ATMEGA128单片机结合CPLD实现了对VGA显示器和激光打印机控制,完成了在VGA显示器上实时显示字符和图形功能,并控制激光打印机实现了屏幕信息打印输出。本设计克服了单片机系统显示和打印功能薄弱缺点,为扩大其应用范围奠定了基础,同时也为其他嵌入式系统信息输出提供了一种解决方案。
关键词:VGA控制器;PCL命令语言;激光打印;CPLD

       随着集成电路制造技术不断发展,MCU、ARM、DSP等微控制器、微处理器性能急剧提高,但是输出功能,尤其是显示和打印功能仍然比较薄PCbfans.cn提示请看下图:

弱,与PC机相比有较大差距。输出功能薄弱缺点,限制了其应用范围扩大。ATmega128是美国Atmel公司生产RISC 结构高性能MCU芯片,含有ADC、I2C、SPI、PWM等多种资源 [1]。本论文以ATMEGA128单片机为例,结合CPLD和高速SRAM,介绍在VGA显示器上显示字符、图形信息和控制激光打印机打印输出屏幕信息方法。本设计克服了单片机系统信息输出功能薄弱缺点, 为单片机和其他嵌入式系统信息输出提供了一个解决方案,使得其应用范围更加广阔。系统结构如图1所示。
1  VGA显示控制器实现
PC机在VGA显示器(通常包括CRT和液晶显示器)上信息显示是通过显卡完成。单片机在VGA显示器上显示信息同样需要类似模块来辅助,因此我们设计了和显卡功能相似VGA显示控制器来辅助ATMEGA128单片机在VGA显示器上显示信息。下面介绍640×480分辨率、59.9HZ刷新率通用VGA显示控制器设计方法,并说明微控制器、微处理器如何在VGA接口显示器上显示信息。
1.1 VGA时序产生模块设计
    要实现VGA显示控制器功能,首先需要了解VGA信号参数和时序。图2所示为640×480分辨率、59.9HZ刷新率VGA时序图[2]。根据VGA时序图,本论文研究并实现了VGA显示控制器,所用硬件为Altera公司EPM7128 CPLD和ISSI公司高速SRAM。EPM7128作用是通过编程产生VGA显示所需时序信号,并协助微控制器实现对显存读写操作。高速SRAM作用是存储需要显示数据信息,其读写周期为8ns,满足显示器刷新时对显存进行快速读写时间要求。设计中用一个bit代表一个象素,640×480分辨率需要37.5K字节显存。象素时钟频率选择与VGA监视器刷新频率和分辨率相关,59.9HZ刷新率时,象素时钟频率为25.175MHZ,其计算公式为:时钟频率=(行象素数+行消隐点数)×(一场行数+消隐行数)×刷新率。
    根据VGA信号要求,用VHDL语言对EPM7128芯片编程实现VGA时序产生模块。VGA时序产生模块包括:每行象素数目计数器h_cnt、每场行数目计数器v_cnt、行同步信号hs产生模块、场同步信号vs产生模块、消隐信号blank产生模块和并行输入串行输出模块等。其中, h_cnt最大计数值是799, v_cnt最计数值是是524。行同步信号产生模块根据h_cnt计数值来产生行同步信号hs;场同步信号产生模块根据v_cnt计数值来产生场同步信号vs。消隐信号产生模块根据h_cnt计数值在行同步期间、行消隐前肩和行消隐后肩,把消隐信号blank置为低电平;根据v_cnt计数值在每一场场同步期间、场消隐前肩和场消隐后肩,把消隐信号blank置为低电平;其余时间消隐信号blank为高电平,表示此时为有效显示期。并行输入串行输出模块在有效显示期间从sram显存中并行读入数据,串行输出显示器红、绿、蓝信号线上。对该程序编译成功后用MaxplussII软件进行波形仿真,以验证设计合理与否。最后设计完成时序波形仿真如图3所示。
PCbfans.cn提示请看下图:


图 3 VGA显示控制器时序仿真图


      从仿真波形图种可以看到每一显示行时间为800个象素时钟周期,每场包括525行。行同步脉冲宽度为96个象素时钟周期,场同步脉冲宽度为2行。在行同步信号hs行同步期间及其前肩和后肩,消隐信号blank为低电平,表示消隐期。在场同步信号vs场同步期间及其前肩和后肩,消隐信号blank同样为低电平,表示消隐期。仿真结果符合VGA标准时序,项目实际应用也证明了此结果正确性。
1.2 VGA显示底层函数编写
    要在屏幕上显示信息,除VGA显示控制器之外,还需要并在ATMEGA128单片机上设计底层绘图函数并建立字符库。通常编写画线、画圆函数时,确定一个点是否在直线或圆上,需要乘、除法和开方运算,而画线、画圆函数调用最为频繁,因此计算量将大到难以接受程度,极大降低系统性能。为了克服上述缺点,在编写底层绘图函数时采用了图形学上bresenham
void circle(unsigned int x0,unsigned int y0,unsigned int r,unsigned char color)
{     
register int x,y,deltax,deltay,d;
x=0;y=r;deltax=3;deltay=2-r-r;d=1-r;
       while(x<=y)
       {     drawpixel(x0 x,y0 y,color);
              drawpixel(x0-x,y0 y,color);               
              drawpixel(x0-x,y0-y,color);
              drawpixel(x0 x,y0-y,color);                     
              drawpixel(x0 y,y0 x,color);               
              drawpixel(x0-y,y0 x,color);
              drawpixel(x0-y,y0-x,color);
              drawpixel(x0 y,y0-x,color);
              if(d<0){
                     d =deltax;      deltax =2;
                     x  ;
              }
              else  {
                     d =(deltax deltay);
                     deltax =2;deltay =2;
                     x  ;y--;
              }
       }         
}

    画线算法和中点画圆法[3],通过象素逼近,采用增量计算,使得确定点是否在直线或圆上复杂运算变为加法运算,非常适合微控制器特点,极大得提高了绘图速度。我们从Windows系统中提取了12×12和96×96象素0~9数字字库,16×16象素常用ASCII字符字库。有了底层绘图函数和字符库,ATMEGA128单片机便可通过VGA显示控制器实现在屏幕任意位置显示图形或者文字信息。右面是用ICCAVR编写ATMEGA128在VGA显示器上实现中点画圆法例程及其实现示意图。只需用增量法找到1/8圆上点,其它点在中心对称位置。2PCbfans.cn提示请看下图:

  
激光打印机控制
    激光打印机是目前最常用输出设备之一,和热敏、喷墨打印机相比具有显著优点,下面介绍用ATMEGA128微控制器直接控制激光打印机打印VGA显示器屏幕内容方法。要控制打印机必须了解打印机命令语言。打印机语言指是控制打印机工作命令,它控制打印机如何组织被打印文档,打印机按照这些命令来处理打印数据,并最终准确打印出文字与图像。
2.1   PCL打印机命令语言
    PCL打印机命令语言是世界上应用最为广泛标准打印机命令语言,由惠普公司开发,支持文字、点阵图像和矢量图形打印。PCL命令由2个以上字符组成,总是以控制字符ESC开始,用符合EC 表示,其ASCII码为27,所以PCL命令又被
图 4 中点画圆法示意图

称作ESC序列。当打印机接收到字符EC时,表示开始接收一条控制命令。PCL命令包括“两字符”命令序列和“参数化”命令序列两种ESC序列。    “两字符”命令序列格式如下:ECX,其中符号X代表ASCII码48~126字符,即ASCII字符表中“0” 和“~”之间字符。符号X指示打印机需要进行操作,例如命令“ECE”是打印机复位命令,命令“ECg”把纸张左边距和上边距复位成默认值。“参数化”命令序列格式如下:EC X y z1 # z2 # z3 ... # Zn[data] ,其中EC为起始字符,X是参数化字符,代表ASCII码33~47之间字符,其作用是指明该序列是“参数化”序列;y为组字符,代表ASCII码96~126之间字符,用来指定待执行操作属于什么组;#是数值域,其范围从-32767到65535;z i是本命令参数,代表ASCII码从96~126之间字符,该参数用于组合“参数化”序列,非组合序列则不用,其作用是指定前面数值域所用参数;
Zn是结束字符,表示“参数化”命令序列结束;[data] 是传送到打印机待打印数据,用8个bit表示,即为0~255之间任意数据。下面两例分别是非组合“参数化”命令序列和组合“参数化”命令序:
1   PCbfans.cn提示请看下图:    2  PCbfans.cn提示请看下图:
    1是非组合序列,不含参数。2是组合序列,由序列EC &l1O EC&l2A组合而成,其中小写字符“o”是该序列参数[4]各种命令序列详细说明见参考文献[4]。
2.2 打印屏幕
    ATMEGA128单片机IO口和激光打印机并口由如下信号连接: Strobe、busy、GND、D0~D7共11根信号线。其中D0~D7是数据线,单片机通过数据线把控制打印机PCL命令和待打印数据传送到打印机;busy信号线指示打印机状态是否繁忙;Strobe 信号线是选通控制线,单片机在Strobe 信号线上输出一个低电平脉冲即可把D0~D7上数据写人打印机。在论文第一部分曾经提到,VGA显示器所显示内容存储在SRAM显存中,每一个bit代表一个象素,因此打印屏幕就是把显存中数据打印出来。ATMEGA128单片机首先发送PCL语言打印机设置命令,对打印进行设置,然后即可传送打印数据。其步骤如下:1、发打印机复位命令;2、发设置纸张大小命令;3、发设置打印起始位置命令;4、发设置分辨率命令;5、发设置打印机为点阵图形模式命令;5、传送要打印数据;6、发结束图形模式命令;7、发换页指令,打印当前页。下面是ATMEGA128单片机对HP LASERJET6L激光打印机发送PCL命令,并控制打印机打印输出VGA屏幕信息例程:
void print()
{unsigned int M; unsigned char i;   
unsigned char xdata *p;p=NVRS;
out(27);out('E');//打印机复位
out(27); pprint("&l26A");// 设置纸张为A4
out(27); pprint("*p210X");// '设置本页打印X坐标起始位置
out(27); pprint("*p400Y");// '设置本页打印Y坐标起始位置
out(27); pprint("*t100R");// '设置分辨率
out(27); pprint("*r1A");// '设置图形模式开始
for(M=0;M<480;M  )  //传送要打印图形数据
{   out(27); pprint("*b80W");
        …………
    out(27); pprint("*rC");  // '图形模式结束
    out(255); out(12);//'本页结束,执行打印
}
结论:
本文创新点是用ATMEGA128单片机结合CPLD实现了对VGA显示器和激光打印机控制,使单片机可以在VGA接口显示器上显示图形、文字信息,并控制激光打印机把VGA屏幕上信息打印输出。本设计克服了单片机控制系统信息显示和打印功能薄弱缺点,使其在发挥控制功能优势基础上,还具有了实用显示和打印功能,为扩大其应用范围奠定了基础。此外,本设计中用到ATMEGA128接口为GPIO口和Intel格式标准总线,因此可以方便得移植到其他类型芯片中,为其它系统信息显示和打印提供了参考方案,本设计已经成功移植到了TMS320C6713 DSP芯片上[5]。
参考文献
[1]   Atmel. 8-bit AVR Microcontroller with 128K bytes In-System Programmable Flash2001
[2]   曹允. 基于FPGAVGA时序彩条信号实现方   法及其应用. 电子技术应用.Vol.28 No.7 2002
[3]   孙家广等. 计算机图形学. 清华大学出版社,   2002
[4]   惠普公司. PCL5 Printer Language Technical Reference Manual First Edition. 1992
[5]   何明星等. Max7000系列可编程器件在DSP系统设计中应用 微计算机信息2003年19卷6期25-26页


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
收藏收藏 分享分享 支持支持 反对反对
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|文字版|手机版|DIY编程器网 ( 桂ICP备14005565号-1 )

GMT+8, 2025-7-23 05:25 , 耗时 0.092265 秒, 19 个查询请求 , Gzip 开启.

各位嘉宾言论仅代表个人观点,非属DIY编程器网立场。

桂公网安备 45031202000115号

DIY编程器群(超员):41210778 DIY编程器

DIY编程器群1(满员):3044634 DIY编程器1

diy编程器群2:551025008 diy编程器群2

QQ:28000622;Email:libyoufer@sina.com

本站由桂林市临桂区技兴电子商务经营部独家赞助。旨在技术交流,请自觉遵守国家法律法规,一旦发现将做封号删号处理。

快速回复 返回顶部 返回列表