基于CPLD和Embedded System的LED點陣顯示系統(tǒng)的實現(xiàn)
LED點陣顯示屏是顯示公共信息的一種重要顯示終端,其中大屏幕LED點陣顯示屏在許多場合得以應用。大屏幕顯示所采用的技術(shù)比中小屏幕顯示難度更大,因為其屏幕大、LED點數(shù)多,要求在極短的時間內(nèi)刷新每個點,使得其掃描速率必須非常高,所以只有設(shè)計合理的控制電路才能達到這個要求。本文著重解決大屏幕LED點陣顯示這一技術(shù)難題。通過采用自頂向下的設(shè)計思想,綜合運用高速CPLD、雙口RAM等技術(shù)和芯片,設(shè)計出了大、小屏幕皆適合的顯示控制電路。特別是利用單片機、CPLD與雙口RAM的無縫結(jié)合,將復雜的任務分配給不同的硬件處理,滿足了對實時性的要求。本系統(tǒng)不僅給大屏幕LED點陣顯示提供了優(yōu)良的控制電路,而且為CPLD器件和EDA技術(shù)提供了切實的應用實例。其中,共享雙口RAM的應用,為高速總線與低速總線的通信提供了一個新的解決方案。
1 硬件設(shè)計
顯示系統(tǒng)由信號處理電路和掃描電路兩大塊構(gòu)成,其系統(tǒng)原理框圖如圖1所示,實際電路框圖如圖2所示。微處理器MCU采用8位單片機AT89C51,它通過串口接收來自PC機的待顯示數(shù)據(jù)。由于PC機串行總線標準RS232的邏輯電平與單片機電路使用的TTL電平不同,所以PC機與MCU之間的通信數(shù)據(jù)必須經(jīng)過RS232電平轉(zhuǎn)換芯片MAX232進行轉(zhuǎn)換。從PC機接收到的數(shù)據(jù)存放在8K字節(jié)的電可擦寫存儲器EEPROM 28C64中,這樣可方便地隨時修改待顯示的信息,并且在掉電情況下不至于丟失數(shù)據(jù)。由于系統(tǒng)軟件要進行大批量的數(shù)據(jù)處理,所以擴充了單片機緩存區(qū)大小,采用了8K字節(jié)的外部靜態(tài)RAM 6264。
1.1 雙口RAM的應用
采用雙口RAM是本設(shè)計的一個主要特色。一般的RAM(如6116)只有一套地址總線、數(shù)據(jù)總線和控制總線,在同一時間只能執(zhí)行同一總線操作。而標準雙口RAM有左側(cè)和右側(cè)兩套地址總線、數(shù)據(jù)總線和控制總線,可供兩套總線對其進行訪問。在本系統(tǒng)中,單片機通過共享的雙口RAMIDT7132與CPLD通信,單片機將數(shù)據(jù)寫入IDT7132中,而CPLD則從IDT7132中讀取數(shù)據(jù)并通過掃描邏輯電路輸出出去。
由于CPLD掃描模塊可以達到很高的掃描速率,而單片機的運行速度則相對較低,并且兩個模塊間需要有大量的數(shù)據(jù)交換,為此選擇雙口RAM芯片IDT7132SA35JS,它的速度等級是35ns,完全滿足兩個模塊實時通信的要求。雙口RAM是兩個數(shù)據(jù)模塊間的數(shù)據(jù)通道,必須是共享的,它在本設(shè)計中起到了關(guān)鍵作用。
1.2 基于CPLD的獨立掃描模塊
顯示部分的點陣模塊采用雙色LED共陰點陣模塊(實際上可顯示紅、黃、綠三色)。8塊8×8點陣模塊連接成32×32點陣。為易于控制,將公共接口作為行控制,且行的接地引腳經(jīng)過一個開關(guān)三極管接地(設(shè)計中簡稱行掃描管),實現(xiàn)對相應列的控制。因為一個行掃描管同時控制著一行中多個LED的通斷,所以它承載較大電流。以每個發(fā)光二極管流過的電流為10mA計算,一個128列的點陣屏中,每個行掃描管所承受的電流是10mA×128=1.28A,為此選用高速中功率達林頓管TIP127,它的集電極吸收電流最大可達5A,保證了行的驅(qū)動能力。由于顯示點陣的每一行都需要用一個三極管來控制,所以32×32點陣共需要32個TIP127。
行掃描電路采用通用數(shù)字電路譯碼輸出來控制。在32×32點陣顯示時,掃描輸出需要大量的I/O端口,而ATMEL公司生產(chǎn)的CPLD芯片ATF1508AS15JC84(與ALTERA公司的MAX7128SLC84-15功能及封裝等完全兼容)的外部I/O端口不夠用,所以采用兩片CPLD,一片專用于行掃描,另一片用于讀取雙口RAM IDT7132中的數(shù)據(jù)并進行列掃描。
列掃描電路的功能是在選中某行時送該行對應的列數(shù)據(jù),由于采用的是8位微處理器,一次只能送一個字節(jié)的數(shù)據(jù),即每次只能掃描8列。本設(shè)計中,采用8550三極管矩陣驅(qū)動方式,從而節(jié)省了大量控制信號引腳資源。
獨立掃描模塊的功能是以雙口RAM為中介將單片機送來的數(shù)據(jù)在LED點陣顯示屏上顯示出來,其電路原理圖如圖3所示。單片機總線將處理好的待顯示數(shù)據(jù)存放在U5(雙口RAM IDT7132SA35JS)中,然后U6(CPLD芯片ATF1508AS15JC84,用Verilog HDL語言編寫其總線讀邏輯)讀取存放在U5中的待顯示數(shù)據(jù)并驅(qū)動顯示屏。整個顯示屏為128×32點陣,一次掃描一個字節(jié)即8位,為此全屏顯示需要128×32÷8=512字節(jié)。將地址線A9R、A10R接地,這樣只允許訪問U5中的低512K字節(jié)。CA0~CA8是CPLD輸出到U5中的地址總線,CD0~CD7是從U5讀出數(shù)據(jù)的數(shù)據(jù)總線。J1是行掃描信號接口,CH0~CH4為行掃描計數(shù)器輸出信號,時鐘信號可從CLK輸出給行掃描計數(shù)器。J2為列掃描控制信號V0~V7輸出接口。DR0~DR15為一色的列選通控制信號輸出,由于I/O端口引腳不夠,所以另一色的列選通信號采用譯碼電路譯碼輸出,用J3的四線輸出。CON1為JTAG接口,J6為時鐘源選擇接口,可接單片機的ALE信號,也可接有源晶振CR2的輸出。有源晶振CR2相當于一信號產(chǎn)生電路,只要其2腳接地,4腳接電源,3腳就有額定的輸出波形。
本系統(tǒng)采用ATMEL公司的8位單片機AT89C52,主要完成數(shù)據(jù)處理、存儲和通信功能,其原理圖如圖4所示
U4是AT89C51單片機;U3是地址鎖存器,用來鎖存單片機的低8位地址信號。因為要顯示的數(shù)據(jù)量很大,特別是當設(shè)計復雜的顯示效果時需要處理的數(shù)據(jù)量更大,而AT89C51內(nèi)部緩存容量不足,所以擴展外部RAM,采用容量為8K字節(jié)的HM6264,即U7。U2是容量為8K字節(jié)的EEPROM 28C64,用來存儲字模數(shù)據(jù),而不用作程序存儲器。U5是雙口RAM,U1是將RS232電平轉(zhuǎn)換為TTL電平的電平轉(zhuǎn)換器。
PC機將欲顯示的字或圖形的點陣數(shù)據(jù)通過串口送到單片機,單片機將其存儲在EEPROM(U2)中,然后再根據(jù)顯示要求對這些數(shù)據(jù)進行特定的處理,處理完后存儲在雙口RAM(U5)的特定地址,供掃描模塊掃描取數(shù)進行顯示。為了便于編寫串行通信程序,使用振蕩頻率為11.0592MHz的晶振CR1和C5、R1及SW1組成的復位電路。
2 軟件設(shè)計和編寫
2.1 主控電路CPLD芯片設(shè)計與調(diào)試
主控電路的功能是讀取雙口RAM中的數(shù)據(jù)并通過譯碼邏輯電路將數(shù)據(jù)顯示在LED點陣顯示屏的特定位置上。因為只用到單片機的一部分功能,所以使用CPLD芯片將MCU中的總線讀控制器及其外圍譯碼邏輯電路集成在一起。如若采用傳統(tǒng)方案,就必須采用多片芯片;而使用CPLD后,只用一片芯片就可以實現(xiàn)所要的功能。總線讀控制器是產(chǎn)生時序的電路,需根據(jù)存儲器的讀時序進行設(shè)計,只有保證正確的時序才能讀出數(shù)據(jù)。雙口RAM的讀寫時序和普通RAM的讀寫時序基本相同,如圖5所示。在片選信號從高變低之前必須輸出地址信號給雙口RAM,然后再用讀信號去控制
步驟S0 在RAM的片選CE使能之前輸出地址;
步驟S1 選中RAM,輸出讀信號;
步驟S2 行計數(shù)器輸出,讀出RAM的數(shù)據(jù)并反相輸出;
步驟S3 片選禁止,讀禁止,地址計數(shù)器加1。
譯碼輸出邏輯電路主要是提取地址計數(shù)器的計數(shù)輸出。在某個狀態(tài)下,行地址計數(shù)器輸出低5位數(shù)據(jù),位譯碼輸出高4位數(shù)據(jù)并譯碼輸出16個位選信號。
時序電路中一般留有復位信號,當復位端為1時,地址計數(shù)器復零,地址輸出復零,片選、讀控制信號置1,使狀態(tài)機回到狀態(tài)S0。
2.2 行譯碼CPLD芯片設(shè)計
行譯碼器的功能較主控電路來講相對簡單,它是將主控電路的行計數(shù)器輸出的5位二進制數(shù)據(jù)譯成32行的行選通信號,去控制行驅(qū)動管驅(qū)動行輸出。這是一個純組合邏輯電路,使用Verilog HDL語言描述的always語句和case多分支語句即可實現(xiàn)此功能。
2.3 單片機的C程序設(shè)計
在本系統(tǒng)中,單片機的功能主要是負責通信與數(shù)據(jù)處理。通信即通過串口接收來自PC機的數(shù)據(jù)并存儲在EEPROM中;數(shù)據(jù)處理即從EEPROM中取出數(shù)據(jù)并根據(jù)要顯示的效果進行軟件處理,再存放在雙口RAM中。在本系統(tǒng)中,因單片機及外圍電路只負責通信和數(shù)據(jù)處理,對實時性要求不高,因此用前后臺系統(tǒng)進行軟件設(shè)計就能達到要求。本系統(tǒng)采用嵌入式操作系統(tǒng)RTX51TNY(KEIL C平臺自帶的免費的微實時內(nèi)核)。軟件主要由PROCESS.C和SERIAL.C兩個文件組成。PROCESS.C包含三個任務:任務0,初始化;任務1,靜態(tài)顯示;任務2,左移顯示。SERIAL.C是串口中斷程序。靜態(tài)顯示的算法較簡單,只要將EEPROM中的字模數(shù)據(jù)存放到雙口RAM中的特定位置即可。左移顯示則需要將字模數(shù)據(jù)每個字節(jié)左移,然后存放在雙口RAM的特定位置。