關於FPGA驅動TFT屏漸變顯示出現條紋的問題解決
阿新 • • 發佈:2019-02-12
最近在除錯一個5寸的800x480的TFT屏,由於是通用引腳的40Pin屏,引腳跟以前驅動過的4.3寸480x272的屏是一樣的,所以就開啟以前的工程檔案,修改好引數編譯下載到板子上。工程預設是顯示一幅灰度漸變的畫面,但在這個屏上顯示的多了很多亮線,如下圖所示:
然後除錯了整個晚上還是沒有找到原因,模擬也看過了,波形也正常,直接修改後的程式碼驅動以前的螢幕,顯示也正常沒有亮線,顯示資料部分程式碼如下
reg [3:0]IntervalCnt; always @(posedge SysClk , negedge Rst_n) if(!Rst_n) IntervalCnt <= 3'd0; else if(IntervalCnt == 3'd3) IntervalCnt <= 3'd0; else if(LcdChangeEn && LcdEnTemp) IntervalCnt <= IntervalCnt + 1'b1; else ; always @(posedge SysClk , negedge Rst_n) if(!Rst_n) begin DataTempR <= 8'h0; DataTempG <= 8'h0; DataTempB <= 8'h0; end else if((IntervalCnt == 3'd1)&&LcdChangeEn && LcdEnTemp) begin DataTempR <= DataTempR + 1'b1; DataTempG <= DataTempG + 1'b1; DataTempB <= DataTempB + 1'b1; end else if(HsyCnt == (HSPW+HBPD+HOZVAL+HFPD)) begin DataTempR <= 8'h0; DataTempG <= 8'h0; DataTempB <= 8'h0; end else ; assign LCD_DATA_R = LcdEnTemp ? DataTempR : 8'h0; assign LCD_DATA_G = LcdEnTemp ? DataTempG : 8'h0; assign LCD_DATA_B = LcdEnTemp ? DataTempB : 8'h0;
就這樣到了第二天,到了第二天仔細思考了一下,要不把
else if((IntervalCnt == 3'd1)&&LcdChangeEn && LcdEnTemp)改成else if((IntervalCnt == 3'd3)&&LcdChangeEn && LcdEnTemp)試試
改好後發現連顯示全黑色,感覺很奇怪,想想應該是這個條件不成立,於是就把後面&&的條件都去掉,沒想到這樣一改竟然顯示正常了,如下圖所示:
感覺很奇怪,於是就看了兩個情況的模擬波形,原來是原來的寫法在是LCD_CLK的下降沿改變資料,而後來是在上升沿改變資料,如下圖
最後看了下屏的資料
問題解決了,在出現問題時候一定要再三確定是不是時序出了問題,是應該上升沿改變資料還是下降沿