嵌入式大屏幕LED顯示屏的設(shè)計與實現(xiàn)
摘 要:鑒于傳統(tǒng)的LED顯示規(guī)模小、可靠性差、需要上位機實時控制的問題,提出一種基于FPGA和2片SRAM的嵌入式大屏幕LED顯示的方法,其顯示規(guī)模達到512×512點陣列,并且可以在完全不需要上位機控制的情況下實時獨立的工作。本設(shè)計已經(jīng)實際使用在現(xiàn)場廠房中,能夠較好地對廠房中的生產(chǎn)情況進行實時顯示。著重討論該系統(tǒng)最底層的硬件連接及相應(yīng)的軟件設(shè)計,并給出其軟、硬件實現(xiàn)。
本文引用地址:http://cafeforensic.com/article/168583.htm關(guān)鍵詞:嵌入式;LED大屏幕;設(shè)計優(yōu)化;FPGA
1 引 言
LED顯示屏的應(yīng)用已經(jīng)比較普遍,而且隨著應(yīng)用的普及,更多新式的LED顯示屏會應(yīng)用在更多的場合,所以研究嵌入式大屏幕點陣LED的顯示很有實際意義。
但是現(xiàn)在市場上的多種LED顯示屏在顯示性能上良莠不齊,并且大多需要上位機對顯示過程進行實時控制。本文提出一種優(yōu)化的高性能高可靠性的嵌入式大屏幕LED顯示系統(tǒng),只需要用1片F(xiàn)PGA和2片SRAM就可以實現(xiàn)大屏幕LED顯示的驅(qū)動和內(nèi)容更換,可以說其性能已經(jīng)大有改善。本設(shè)計可以應(yīng)對多種大屏幕顯示的場合。
2 系統(tǒng)硬件設(shè)計與實現(xiàn)
硬件連接的方式多種并且靈活,其連接方式直接影響到顯示的性能。下面給出的硬件連接方式是最優(yōu)的方式,能夠達到高性能的顯示,并且使軟件編寫變得簡單。
每個8×8的LED點陣塊稱為最小模塊。每16個8×8的LED點陣塊為一個基模塊,一個基模塊橫向有8個,縱向有2個最小模塊,如圖1所示。圖中每個小方格代表一個最小模塊。
每個最小模塊控制信號為8個行信號H1~H8和8個數(shù)據(jù)信號R1~R8。行信號接一個38譯碼器74HC138的輸出,他的輸入為HangQ[2..0];而列信號給具體這一行的數(shù)據(jù)信號接的是一個74HC595的輸出,如圖2所示。
在上半屏顯示中,又將其分為8個512×32的塊,這樣的塊叫單獨顯示模塊,也就是說將橫向的2行基模塊看成一個單獨的模塊并用單獨的一組信號進行控制,上半屏就要8組信號控制。這8組信號除了數(shù)據(jù)信號R不同外,其他的信號都是一樣的。也就是說,在上半屏顯示中8條數(shù)據(jù)線同時給上半屏的8個單獨顯示模塊串打數(shù)據(jù),當然只是給單獨顯示模塊中的最小模塊的某一行打滿數(shù)據(jù),然后再給下半屏打入數(shù)據(jù)。所以下半屏的情況與上半屏基本一樣,除了8組數(shù)據(jù)信號R不同外,還有時鐘信號也不一樣。輸入數(shù)據(jù)時,上半屏的時鐘信號首先有效,根據(jù)基模塊的理論要輸入2048個脈沖以后上半屏的數(shù)據(jù)才被灌滿;然后下半屏的數(shù)據(jù)才有效,從而輸入下半屏的數(shù)據(jù),情況與上半屏完全一樣。
在掃描顯示中,首先上半屏的8組控制信號的時鐘脈沖信號有效,并且在這個過程中,8組控制信號的數(shù)據(jù)信號R有效,所以就可以先將上半屏的8個單獨顯示模塊中的最小模塊的某一行灌滿數(shù)據(jù)。然后用同樣的方法將下半屏的8個單獨顯示模塊中的最小模塊的某一行灌滿數(shù)據(jù),當然上半屏和下半屏灌滿的都是最小模塊的相同的一行。最后數(shù)據(jù)鎖存信號和行鎖存信號有效,使其顯示。在這個過程中要注意的是數(shù)據(jù)信號R,因為要顯示整屏的數(shù)據(jù),在軟件編寫的過程中要將某個位置顯示的數(shù)據(jù)準確的顯示在該位置,就要從內(nèi)存中準確的取出這個數(shù)據(jù)。
每一幀顯示的數(shù)據(jù)大小為32768B,對于2塊RAM交替工作的情況是完全符合要求的。并且SRAM的存取速度快,換幀的時候也能夠很好地顯示出預(yù)期的數(shù)據(jù)。程序中用一個RAM選擇模塊,用來選擇某個時間是讀出哪一塊RAM,還是寫入哪一塊RAM。
FPGA與存儲器聯(lián)接的信號為am1A[16..0], Ram1D[7..0], Ram1Rd, Ram1 Wr; Ram2A[16..0], Ram2D[7..0], Ram2Rd, Ram2Wr。當FPGA從Ram1取出數(shù)據(jù)進行顯示時,其中有關(guān)Ram1的信號就有效;同時就給Ram2寫數(shù)據(jù)。程序中還用到4個內(nèi)部變量Rt[7..0][7..0],Gt[7..0][7..0],Rs[7..0][7..0]和Gs[7..0][7..0]分別代表4個數(shù)組,每個數(shù)組里有8個字節(jié)。
程序中用到1個全局時鐘clk,他用來驅(qū)動1個內(nèi)部全局信號counter_temp,他是1個15位的矢量。TSCK和TNsck信號將8個clk時鐘周期作為他們的1個時鐘周期,也就是說8個clk時間送出1位數(shù)據(jù)。FPGA讀RAM的時序為:首先地址信號出現(xiàn)在RamxA[16..0]上,然后RamxRd,RamxWr分別置為低電平和高電平,經(jīng)過12~15ns,讀出的數(shù)據(jù)就會出現(xiàn)在RamxD[7..0]上以便FPGA讀這個數(shù)來顯示。
FPGA寫Ram的時序是外部MPU信號控制,首先地址信號出現(xiàn)在Ram2A[16..0]上,然后RamRd, RamWr分別置為高電平和低電平,寫的數(shù)據(jù)出現(xiàn)在Ram2D[7..0]上。經(jīng)過很短的時間,數(shù)據(jù)就寫入了。
程序設(shè)定FPGA中的Ram1D和Ram2D為雙向口,可寫可讀。在內(nèi)部要設(shè)相應(yīng)的緩沖器。因為寫RAM是MPU寫給RAM,MPU要指明寫的地址和數(shù)據(jù),所以在程序中要有地址和數(shù)據(jù)輸入口。實際設(shè)計中為了減少FP2GA的端口,設(shè)計成低地址和數(shù)據(jù)復(fù)用線AD[7..0],用一個信號ALE選擇;當其為低電平時,AD[7..0]有效的數(shù)據(jù)是地址,為高電平時為要寫入RAM中的數(shù)據(jù)。
靜態(tài)圖像顯示過程中為了使眼睛看上去不閃爍,就要使一幀圖像在一秒內(nèi)至少顯示50次,即使一幀圖像在最多20ms顯示完。要達到這個要求,就要使一個最小模塊的8行在最多20ms內(nèi)完成一個循環(huán)顯示。因為是上半屏與下半屏分開傳輸數(shù)據(jù),所以要求在最多1.25ms內(nèi)傳完半屏數(shù)據(jù),時鐘周期需要在0.6μs以下,而選用的FPGA的時鐘頻率可以達到50MHz以上,完全符合顯示的要求。
4 結(jié) 語
硬件連接和軟件設(shè)計是融為一體的,在最初系統(tǒng)的整體規(guī)劃中,就是要兼顧兩者。本設(shè)計從硬件連接到最后的軟件實現(xiàn),都是優(yōu)化以后的結(jié)果。所以按照本設(shè)計中的硬件連接情況而設(shè)計的軟件,只需要一片2萬門的FPGA就可以實現(xiàn)如此大規(guī)模的點陣顯示,并且本設(shè)計的LED顯示屏,畫面非常清晰穩(wěn)定,并且在換幀的過程中能夠做到流暢自如,看不出停滯。
linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)
評論