當(dāng)前位置:首頁(yè) > 電源 > 數(shù)字電源
[導(dǎo)讀]用ATMEGA128單片機(jī)結(jié)合CPLD實(shí)現(xiàn)了對(duì)VGA顯示器和激光打印機(jī)的控制,完成了在VGA顯示器上實(shí)時(shí)顯示字符和圖形的功能,并控制激光打印機(jī)實(shí)現(xiàn)了屏幕信息的打印輸出。

摘要:用ATMEGA128單片機(jī)結(jié)合CPLD實(shí)現(xiàn)了對(duì)VGA顯示器和激光打印機(jī)的控制,完成了在VGA顯示器上實(shí)時(shí)顯示字符和圖形的功能,并控制激光打印機(jī)實(shí)現(xiàn)了屏幕信息的打印輸出。本設(shè)計(jì)克服了單片機(jī)系統(tǒng)顯示和打印功能薄弱的缺點(diǎn),為擴(kuò)大其應(yīng)用范圍奠定了基礎(chǔ),同時(shí)也為其他嵌入式系統(tǒng)的信息輸出提供了一種解決方案。
關(guān)鍵詞:VGA控制器;PCL命令語(yǔ)言;激光打?。籆PLD

       隨著集成電路制造技術(shù)的不斷發(fā)展,MCU、ARM、DSP等微控制器、微處理器的性能急劇提高,但是輸出功能,尤其是顯示和打印功能仍然比較薄弱,與PC機(jī)相比有較大的差距。輸出功能薄弱的缺點(diǎn),限制了其應(yīng)用范圍的擴(kuò)大。ATmega128是美國(guó)Atmel公司生產(chǎn)RISC 結(jié)構(gòu)的高性能MCU芯片,含有ADC、I2C、SPI、PWM等多種資源 [1]。本論文以ATMEGA128單片機(jī)為例,結(jié)合CPLD和高速SRAM,介紹在VGA顯示器上顯示字符、圖形信息和控制激光打印機(jī)打印輸出屏幕信息的方法。本設(shè)計(jì)克服了單片機(jī)系統(tǒng)信息輸出功能薄弱的缺點(diǎn), 為單片機(jī)和其他嵌入式系統(tǒng)的信息輸出提供了一個(gè)解決方案,使得其應(yīng)用范圍更加廣闊。系統(tǒng)結(jié)構(gòu)如圖1所示。

1  VGA顯示控制器的實(shí)現(xiàn)

    PC機(jī)在VGA的顯示器(通常包括CRT和液晶顯示器)上的信息顯示是通過(guò)顯卡完成的。單片機(jī)在VGA顯示器上顯示信息同樣需要類似的模塊來(lái)輔助,因此我們?cè)O(shè)計(jì)了和顯卡功能相似的VGA顯示控制器來(lái)輔助ATMEGA128單片機(jī)在VGA顯示器上顯示信息。下面介紹640×480分辨率、59.9HZ刷新率的通用VGA顯示控制器的設(shè)計(jì)方法,并說(shuō)明微控制器、微處理器如何在VGA接口的顯示器上顯示信息。

1.1 VGA時(shí)序產(chǎn)生模塊的設(shè)計(jì)

    要實(shí)現(xiàn)VGA顯示控制器的功能,首先需要了解VGA信號(hào)的參數(shù)和時(shí)序。圖2所示為640×480分辨率、59.9HZ刷新率的VGA時(shí)序圖[2]。根據(jù)VGA時(shí)序圖,本論文研究并實(shí)現(xiàn)了VGA顯示控制器,所用硬件為Altera公司的EPM7128 CPLD和ISSI公司的高速SRAM。EPM7128的作用是通過(guò)編程產(chǎn)生VGA顯示所需的時(shí)序信號(hào),并協(xié)助微控制器實(shí)現(xiàn)對(duì)顯存的讀寫(xiě)操作。高速SRAM的作用是存儲(chǔ)需要顯示的數(shù)據(jù)信息,其讀寫(xiě)周期為8ns,滿足顯示器刷新時(shí)對(duì)顯存進(jìn)行快速讀寫(xiě)的時(shí)間要求。設(shè)計(jì)中用一個(gè)bit代表一個(gè)象素,640×480分辨率需要37.5K字節(jié)的顯存。象素時(shí)鐘頻率的選擇與VGA監(jiān)視器的刷新頻率和分辨率相關(guān),59.9HZ刷新率時(shí),象素時(shí)鐘頻率為25.175MHZ,其計(jì)算公式為:時(shí)鐘頻率=(行象素?cái)?shù)+行消隱點(diǎn)數(shù))×(一場(chǎng)行數(shù)+消隱行數(shù))×刷新率。

    根據(jù)VGA信號(hào)的要求,用VHDL語(yǔ)言對(duì)EPM7128芯片編程實(shí)現(xiàn)VGA時(shí)序產(chǎn)生模塊。VGA時(shí)序產(chǎn)生模塊包括:每行的象素?cái)?shù)目計(jì)數(shù)器h_cnt、每場(chǎng)的行數(shù)目計(jì)數(shù)器v_cnt、行同步信號(hào)hs產(chǎn)生模塊、場(chǎng)同步信號(hào)vs產(chǎn)生模塊、消隱信號(hào)blank產(chǎn)生模塊和并行輸入串行輸出模塊等。其中, h_cnt的最大計(jì)數(shù)值是799, v_cnt的最計(jì)數(shù)值是是524。行同步信號(hào)產(chǎn)生模塊根據(jù)h_cnt的計(jì)數(shù)值來(lái)產(chǎn)生行同步信號(hào)hs;場(chǎng)同步信號(hào)產(chǎn)生模塊根據(jù)v_cnt的計(jì)數(shù)值來(lái)產(chǎn)生場(chǎng)同步信號(hào)vs。消隱信號(hào)產(chǎn)生模塊根據(jù)h_cnt的計(jì)數(shù)值在行同步期間、行消隱前肩和行消隱后肩,把消隱信號(hào)blank置為低電平;根據(jù)v_cnt的計(jì)數(shù)值在每一場(chǎng)的場(chǎng)同步期間、場(chǎng)消隱前肩和場(chǎng)消隱后肩,把消隱信號(hào)blank置為低電平;其余時(shí)間消隱信號(hào)blank為高電平,表示此時(shí)為有效顯示期。并行輸入串行輸出模塊在有效顯示期間從sram顯存中并行讀入數(shù)據(jù),串行輸出的顯示器的紅、綠、藍(lán)信號(hào)線上。對(duì)該程序編譯成功后用MaxplussII軟件進(jìn)行波形仿真,以驗(yàn)證設(shè)計(jì)的合理與否。最后設(shè)計(jì)完成的時(shí)序波形仿真如圖3所示。

圖 3 VGA顯示控制器時(shí)序仿真圖


      從仿真波形圖種可以看到每一顯示行的時(shí)間為800個(gè)象素時(shí)鐘周期,每場(chǎng)包括525行。行同步脈沖的寬度為96個(gè)象素時(shí)鐘周期,場(chǎng)同步脈沖的寬度為2行。在行同步信號(hào)hs的行同步期間及其前肩和后肩,消隱信號(hào)blank為低電平,表示消隱期。在場(chǎng)同步信號(hào)vs的場(chǎng)同步期間及其前肩和后肩,消隱信號(hào)blank同樣為低電平,表示消隱期。仿真結(jié)果符合VGA標(biāo)準(zhǔn)時(shí)序,項(xiàng)目實(shí)際應(yīng)用也證明了此結(jié)果的正確性。

1.2 VGA顯示底層函數(shù)的編寫(xiě)

    要在屏幕上顯示信息,除VGA顯示控制器之外,還需要并在ATMEGA128單片機(jī)上設(shè)計(jì)底層繪圖函數(shù)并建立字符庫(kù)。通常編寫(xiě)畫(huà)線、畫(huà)圓函數(shù)時(shí),確定一個(gè)點(diǎn)是否在直線或圓上,需要乘、除法和開(kāi)方運(yùn)算,而畫(huà)線、畫(huà)圓函數(shù)調(diào)用最為頻繁,因此計(jì)算量將大到難以接受的程度,極大降低系統(tǒng)的性能。為了克服上述缺點(diǎn),在編寫(xiě)底層繪圖函數(shù)時(shí)采用了圖形學(xué)上的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--;

              }

       }         

}

    畫(huà)線算法和中點(diǎn)畫(huà)圓法[3],通過(guò)象素逼近,采用增量計(jì)算,使得確定點(diǎn)是否在直線或圓上的復(fù)雜運(yùn)算變?yōu)榧臃ㄟ\(yùn)算,非常適合微控制器的特點(diǎn),極大得提高了繪圖速度。我們從Windows系統(tǒng)中提取了12×12和96×96象素的0~9數(shù)字字庫(kù),16×16象素的常用ASCII字符字庫(kù)。有了底層繪圖函數(shù)和字符庫(kù),ATMEGA128單片機(jī)便可通過(guò)VGA顯示控制器實(shí)現(xiàn)在屏幕任意位置顯示圖形或者文字信息。右面是用ICCAVR編寫(xiě)的ATMEGA128在VGA顯示器上實(shí)現(xiàn)中點(diǎn)畫(huà)圓法的例程及其實(shí)現(xiàn)示意圖。只需用增量法找到1/8圓上的點(diǎn),其它點(diǎn)在中心對(duì)稱位置。

2  激光打印機(jī)的控制

    激光打印機(jī)是目前最常用輸出設(shè)備之一,和熱敏、噴墨打印機(jī)相比具有顯著的優(yōu)點(diǎn),下面介紹用ATMEGA128微控制器直接控制激光打印機(jī)打印VGA顯示器屏幕內(nèi)容的方法。要控制打印機(jī)必須了解打印機(jī)命令語(yǔ)言。打印機(jī)語(yǔ)言指的是控制打印機(jī)工作的命令,它控制打印機(jī)如何組織被打印的文檔,打印機(jī)按照這些命令來(lái)處理打印數(shù)據(jù),并最終準(zhǔn)確的打印出文字與圖像。

2.1   PCL打印機(jī)命令語(yǔ)言

    PCL打印機(jī)命令語(yǔ)言是世界上應(yīng)用最為廣泛的標(biāo)準(zhǔn)打印機(jī)命令語(yǔ)言,由惠普公司開(kāi)發(fā),支持文字、點(diǎn)陣圖像和矢量圖形的打印。PCL命令由2個(gè)以上的字符組成,總是以控制字符ESC開(kāi)始,用符合EC 表示,其ASCII碼為27,所以PCL命令又被

圖 4 中點(diǎn)畫(huà)圓法示意圖

稱作ESC序列。當(dāng)打印機(jī)接收到字符EC時(shí),表示開(kāi)始接收一條控制命令。PCL命令包括“兩字符”命令序列和“參數(shù)化”命令序列兩種ESC序列。

    “兩字符”命令序列的格式如下:EC X,其中符號(hào)X代表ASCII碼48~126的字符,即ASCII字符表中“0” 和“~”之間的字符。符號(hào)X指示打印機(jī)需要進(jìn)行的操作,例如命令“EC E”是打印機(jī)復(fù)位命令,命令“EC g”把紙張的左邊距和上邊距復(fù)位成默認(rèn)值。“參數(shù)化”命令序列格式如下:EC X y z1 # z2 # z3 ... # Zn[data] ,其中EC為起始字符,X是參數(shù)化字符,代表ASCII碼33~47之間字符,其作用是指明該序列是“參數(shù)化”序列;y為組字符,代表ASCII碼96~126之間字符,用來(lái)指定待執(zhí)行的操作屬于什么組;#是數(shù)值域,其范圍從-32767到65535;z i是本命令的參數(shù),代表ASCII碼從96~126之間字符,該參數(shù)用于組合的“參數(shù)化”序列,非組合序列則不用,其作用是指定前面的數(shù)值域所用的參數(shù);Zn是結(jié)束字符,表示“參數(shù)化”命令序列結(jié)束;[data] 是傳送到打印機(jī)的待打印數(shù)據(jù),用8個(gè)bit表示,即為0~255之間任意數(shù)據(jù)。下面兩例分別是非組合的“參數(shù)化”命令序列和組合的“參數(shù)化”命令序:

1       2 

    1是非組合序列,不含參數(shù)。2是組合序列,由序列EC &l1O EC&l2A組合而成,其中小寫(xiě)的字符“o”是該序列的參數(shù)[4]各種命令序列的詳細(xì)說(shuō)明見(jiàn)參考文獻(xiàn)[4]。

2.2 打印屏幕

    ATMEGA128單片機(jī)的IO口和激光打印機(jī)的并口由如下信號(hào)連接: Strobe、Busy、GND、D0~D7共11根信號(hào)線。其中D0~D7是數(shù)據(jù)線,單片機(jī)通過(guò)數(shù)據(jù)線把控制打印機(jī)的PCL命令和待打印數(shù)據(jù)傳送到打印機(jī);Busy信號(hào)線指示打印機(jī)狀態(tài)是否繁忙;Strobe 信號(hào)線是選通控制線,單片機(jī)在Strobe 信號(hào)線上輸出一個(gè)低電平脈沖即可把D0~D7上的數(shù)據(jù)寫(xiě)人打印機(jī)。在論文的第一部分曾經(jīng)提到,VGA顯示器所顯示的內(nèi)容存儲(chǔ)在SRAM顯存中,每一個(gè)bit代表一個(gè)象素,因此打印屏幕就是把顯存中的數(shù)據(jù)打印出來(lái)。ATMEGA128單片機(jī)首先發(fā)送PCL語(yǔ)言的打印機(jī)設(shè)置命令,對(duì)打印進(jìn)行設(shè)置,然后即可傳送打印數(shù)據(jù)。其步驟如下:1、發(fā)打印機(jī)復(fù)位命令;2、發(fā)設(shè)置紙張大小命令;3、發(fā)設(shè)置打印的起始位置命令;4、發(fā)設(shè)置分辨率命令;5、發(fā)設(shè)置打印機(jī)為點(diǎn)陣圖形模式命令;5、傳送要打印的數(shù)據(jù);6、發(fā)結(jié)束圖形模式命令;7、發(fā)換頁(yè)指令,打印當(dāng)前頁(yè)。下面是ATMEGA128單片機(jī)對(duì)HP LASERJET6L激光打印機(jī)發(fā)送PCL命令,并控制打印機(jī)打印輸出VGA屏幕信息的例程:

void print()

{unsigned int M; unsigned char i;  

unsigned char xdata *p;p=NVRS;

out(27);out('E');//打印機(jī)復(fù)位

out(27); pprint("&l26A");// 設(shè)置紙張為A4

out(27); pprint("*p210X");// '設(shè)置本頁(yè)打印的X坐標(biāo)起始位置

out(27); pprint("*p400Y");// '設(shè)置本頁(yè)打印的Y坐標(biāo)起始位置

out(27); pprint("*t100R");// '設(shè)置分辨率

out(27); pprint("*r1A");// '設(shè)置圖形模式開(kāi)始

for(M=0;M<480;M++)  //傳送要打印的圖形數(shù)據(jù)

{   out(27); pprint("*b80W");

        …………

    out(27); pprint("*rC");  // '圖形模式結(jié)束

    out(255); out(12);//'本頁(yè)結(jié)束,執(zhí)行打印

}

結(jié)論:

    本文的創(chuàng)新點(diǎn)是用ATMEGA128單片機(jī)結(jié)合CPLD實(shí)現(xiàn)了對(duì)VGA顯示器和激光打印機(jī)的控制,使單片機(jī)可以在VGA接口的顯示器上顯示圖形、文字信息,并控制激光打印機(jī)把VGA屏幕上的信息打印輸出。本設(shè)計(jì)克服了單片機(jī)控制系統(tǒng)的信息顯示和打印功能薄弱的缺點(diǎn),使其在發(fā)揮控制功能優(yōu)勢(shì)的基礎(chǔ)上,還具有了實(shí)用的顯示和打印功能,為擴(kuò)大其應(yīng)用范圍奠定了基礎(chǔ)。此外,本設(shè)計(jì)中用到的ATMEGA128的接口為GPIO口和Intel格式的標(biāo)準(zhǔn)總線,因此可以方便得移植到其他類型的芯片中,為其它系統(tǒng)的信息顯示和打印提供了參考方案,本設(shè)計(jì)已經(jīng)成功移植到了TMS320C6713 DSP芯片上[5]。

參考文獻(xiàn)
[1]   Atmel. 8-bit AVR Microcontroller with 128K Bytes In-System Programmable Flash2001
[2]   曹允. 基于FPGA的VGA時(shí)序彩條信號(hào)實(shí)現(xiàn)方   法及其應(yīng)用. 電子技術(shù)應(yīng)用.Vol.28 No.7 2002
[3]   孫家廣等. 計(jì)算機(jī)圖形學(xué). 清華大學(xué)出版社,   2002
[4]   惠普公司. PCL5 Printer Language Technical Reference Manual First Edition. 1992
[5]   何明星等. Max7000系列可編程器件在DSP系統(tǒng)設(shè)計(jì)中應(yīng)用 微計(jì)算機(jī)信息2003年19卷6期25-26頁(yè)

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國(guó)汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開(kāi)發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來(lái)越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來(lái)越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開(kāi)幕式在貴陽(yáng)舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國(guó)國(guó)際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語(yǔ)權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國(guó)電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉