基于FPGA的彩屏控制器設(shè)計(jì)
觸摸屏技術(shù)方便了人們對計(jì)算機(jī)的操作使用,是一種極具發(fā)展前途的交互式輸入技術(shù),受到各國的普遍重視,并投入大量的人力、物力對其進(jìn)行研發(fā),使得新型觸摸屏不斷涌現(xiàn)[1]。特別是四線電阻式觸摸屏具有制造工藝簡單、成本低廉、使用方便等特點(diǎn),已經(jīng)被廣泛應(yīng)用于不同的電子設(shè)備[2]。
隨著嵌入式技術(shù)的高速發(fā)展,尤其是CPLD/FPGA的出現(xiàn),其基于SoPC技術(shù)的IP核的使用給開發(fā)人員帶來了諸多方便。但在SoPC中并沒有彩色觸摸屏的IP核,因此需要自己編寫硬件的時(shí)序控制[3]。本文提出一種基于FPGA的彩色觸摸屏控制器的設(shè)計(jì)方案,通過單片F(xiàn)PGA芯片可以實(shí)現(xiàn)彩色觸摸屏的驅(qū)動邏輯,從而實(shí)現(xiàn)硬件上時(shí)序控制,在此控制器的基礎(chǔ)上可以進(jìn)一步開發(fā)彩色觸摸屏的IP核。
1 彩色觸摸屏控制器的設(shè)計(jì)
1.1 總體結(jié)構(gòu)及其工作原理
彩色觸摸屏控制器的總體結(jié)構(gòu)如圖1所示。
該彩色觸摸屏的控制器主要由TFT-LCD控制器和ADS7843芯片控制器兩部分組成。由圖1可以看出,TFT-LCD控制器的作用是將圖像數(shù)據(jù)采集后,通過SDRAM進(jìn)行緩沖,然后將圖像數(shù)據(jù)輸出給TFT-LCD。它的主要功能是完成圖像數(shù)據(jù)的采集和緩沖、TFT-LCD的時(shí)序控制及最終數(shù)據(jù)在TFT-LCD上的顯示。
1.2 TFT-LCD控制器的設(shè)計(jì)
圖像數(shù)據(jù)經(jīng)采集和緩沖之后,通過TFT-LCD的時(shí)序控制可以將數(shù)據(jù)按如圖2所示時(shí)序圖進(jìn)行輸出。本設(shè)計(jì)中采用的TFT-LCD的分辨率為480×272,其RGB數(shù)據(jù)位均為8 bit,可以顯示16 777 216種顏色。其中,PCLK為LCD像素時(shí)鐘信號,HSYNC為行同步信號,VSYNC為幀同步信號,VDEN為數(shù)據(jù)使能信號,VD[23:0]為LCD像素?cái)?shù)據(jù)輸出端口,tvpw、tvp、tvbp、tvfp分別為垂直同步脈沖、垂直掃描時(shí)間、垂直后回歸、垂直前回歸,thpw、thp、thbp、thfp分別為水平同步脈沖、水平掃描時(shí)間、水平后回歸、水平前回歸[4]。
從圖2所示的時(shí)序圖可以看出,當(dāng)HSYNC電平由低變高,再經(jīng)過水平回歸時(shí)間之后,開始進(jìn)行水平掃描。在水平掃描中,像素的顯示受PCLK控制,一個(gè)PCLK周期決定了一個(gè)像素點(diǎn)的顯示。在HSYNC的高電平的驅(qū)動下,PCLK將產(chǎn)生480個(gè)時(shí)鐘周期,使圖像的像素點(diǎn)在屏幕上從左向右依次逐點(diǎn)輸出,完成一行共480個(gè)像素點(diǎn)的顯示。用Verilog HDL編寫的水平同步掃描的時(shí)序程序如下:
always@(posedge CLK or negedge RST_n) begin
if (RST_n) begin
x_cnt <= 11'd0;
hd <= 1'd0;
end
else if (x_cnt ==479) begin
x_cnt <= 11'd0;
hd <= 1'd0;
end
else begin
x_cnt <= x_cnt + 11'd1;
hd <= 1'd1;
end
end
同理,當(dāng)VSYNC電平由低變高,再經(jīng)過垂直回歸時(shí)間之后,進(jìn)入垂直掃描。在VSYNC的高電平驅(qū)動下,HSYNC將產(chǎn)生272個(gè)時(shí)鐘周期,像素點(diǎn)在屏幕上從上到下依次逐行輸出,完成整個(gè)圖像數(shù)據(jù)在彩色顯示器上的顯示。用Verilog HDL編寫的同步掃描的時(shí)序程序如下:
always@(posedge CLK or negedge RST_n) begin
if (iRST_n)
y_cnt <= 10'd0;
else if (x_cnt == 479) begin
if (y_cnt == 271)
y_cnt <= 10'd0;
else
y_cnt <= y_cnt + 10'd1;
end
end
1.3 ADS7843 芯片控制器的設(shè)計(jì)
ADS7843 芯片控制器用于將觸摸的位置進(jìn)行數(shù)據(jù)轉(zhuǎn)換。ADS7843 的時(shí)序圖如圖3 所示。其中,CS 為片選信號, 低電平有效;BUSY 為忙指示信號, 同樣低電平有效。
由圖3 可看出,ADS7843 標(biāo)準(zhǔn)的一次數(shù)據(jù)轉(zhuǎn)換需要24 個(gè)時(shí)鐘周期, 每次的數(shù)據(jù)轉(zhuǎn)換以8 個(gè)時(shí)鐘周期為一次通信, 需要與控制器進(jìn)行3 次通信。第一次通信是觸摸控制模塊的DIN 端口通過串口向ADS7843 發(fā)送控制字, 同時(shí)對X、Y 的電壓值進(jìn)行采集。控制字如表1 所示, 其中,S 為數(shù)據(jù)傳輸起始標(biāo)志位;A2~A0 為通道選擇;MODE 為A/D 轉(zhuǎn)換精度控制位;SER/DFR 為參考電壓的輸入模式[5]。
將控制字以串行的方式寫入到內(nèi)部寄存器的Verilog HDL代碼如下所示:
if (dclk)
data_in <= {data_in[6:0],1'b0};
第二、三次通信則是ADS7843 將觸摸后的X、Y的電壓值轉(zhuǎn)換為16 bit數(shù)據(jù)賦值給DOUT端口,然后芯片采集其高12 bit數(shù)據(jù),低4 bit自動補(bǔ)零。本設(shè)計(jì)將采集到的串行的12 bit數(shù)據(jù)轉(zhuǎn)化為并行的12 bit數(shù)據(jù),其Verilog HDL代碼如下:
if (!dclk)
begin
if(rd_cd_strob)
begin
if(y_cde_config)
y_cde<={y_cde[10:0],adc_out};
else
x_cde<={x_cde[10:0],adc_out};
end
end
2 實(shí)驗(yàn)結(jié)果
2.1 仿真驗(yàn)證
整個(gè)控制器是在Quartus II 8.0中設(shè)計(jì)并仿真的。仿真分為兩個(gè)部分,包括TFT-LCD控制器的時(shí)序波形和ADS7843芯片控制器的時(shí)序波形。仿真結(jié)果分別如圖4、圖5所示。
由圖4可以得出,在一幀的數(shù)據(jù)(oVD的一個(gè)時(shí)鐘周期內(nèi)的數(shù)據(jù))中,前1/3幀顯示紅色(oLCD_R對應(yīng)255),中間1/3幀顯示綠色(oLCD_G對應(yīng)255),后1/3幀顯示藍(lán)色(oLCD_B對應(yīng)255);則相應(yīng)的屏幕上1~90行顯示為紅色、91~180行為綠色,180~272行為藍(lán)色,如圖6所示。
下面分析X坐標(biāo)值。由圖5可以看到,當(dāng)產(chǎn)生觸摸時(shí)筆中斷信號PENIRQ變?yōu)榈碗娖?,此時(shí)片選信號CS變?yōu)榈碗娖剑涞?strong>電平維持時(shí)間為24個(gè)DCLK時(shí)鐘周期,在前8個(gè)時(shí)鐘周期DIN端口寫入控制字為10010010,在第10個(gè)時(shí)鐘DOUT端口開始接收轉(zhuǎn)化的12 bit數(shù)據(jù),其值為011110001000。同理可分析Y坐標(biāo)值。在DOUT端口接收X、Y坐標(biāo)值之后,通過串并轉(zhuǎn)換最終得到并行輸出的X、Y的坐標(biāo)值,如圖5中的oX和oY端口所示。
2.2 最終顯示效果
FPGA采用Altera公司的EP2C70F896C6;彩色液晶觸摸屏采用臺灣東華公司的WXCAT43-TG3#001R。最終的顯示效果如圖6所示。
使用Verilog HDL編寫觸摸界面過于復(fù)雜,通過軟件設(shè)計(jì)觸摸屏操作界面則需要編寫彩色觸摸屏的IP核,本設(shè)計(jì)基于FPGA的彩色觸摸屏控制器能夠?qū)崿F(xiàn)顏色深度為24 bit,分辨率為480×272的TFT-LCD控制和ADS7843芯片的時(shí)序控制,為后續(xù)IP核的編寫工作打下了基礎(chǔ)。