TFT 屏驱动分析,时序分析,以LQ104V1DG51为例。

2020-01-25 15:23发布

总结了许多网友的发言:

1。TFT 屏不能用AVR单片机直接驱动,基本上是这样,但也有看到例外。只是不太适合

2。建议用CPLD  FPGA  或者DSP做驱动。但是用CPLD做最经济,网上有用EPM3128+RAM做的

3。参考了SHARP的LQ104V1DG51的屏分析TFT驱动时序



LQ104V1DG51资料

点击此处打开armok01154042.pdf



LQ104V1DG51引脚描述





CK       点时钟

Hsync    行同步信号

Vsync    帧同步信号

ENAB     不好翻译,反正是显示的使能信号,不能固定接高电平

R/L      以下的两个不考虑,作用是设置屏幕的方向,可以固定为一电平。

U/D      可以通过程序控制,使屏幕上下左右对调。





TFT驱动要不断有点时钟驱动,它的每一个点的信息是24bit(三种颜 {MOD}),每一种颜 {MOD}信息需要8bit容量,这样就有256*256*256的颜 {MOD}。TFT需要从第一行的第一点开始,不停的对每一点的进行刷新,刷新的顺序是,第一行的第一点,第一行的最后一点,然后是第2行。。。。。这样 一直到最后一行的最后一点。所以如果是320*240的屏幕,每一屏幕(每一帧)就需要刷新320*240个点。

刷新每一行需要有Hsync   来进行同步

刷新每一屏需要有Vsync   来进行同步

所以如果是320*240的屏幕,那么刷新每一屏幕(每一帧),就需要240个Hsync信号,但是只需要一个Vsync  ,每次Vsync 来,下一个刷新的点就是屏幕的第一个刷新的点。



一般TFT的刷新频率为60HZ.从datasheet上的数据可以计算,刚好的59.9***HZ



这个TFT驱动的时序图

实际上并不是每个点时钟就刷新一个点,很多的点时钟都是没有用的。

从datasheet上的数据显示,详细见下面的“时序特性图”



仔细看图,每次Hsyns来一个负脉冲,经过THe的时间,ENAB需要设置高电平,(LQ104V1DG51是640*480的屏幕)这以后的640个点时钟的下降沿锁存数据。数据则是颜 {MOD}信息。640个点完成之后的数据都无效,直到下一个Hsyns的来临。所以见“时序特性图”,TH的时间(每一行的点时钟数典型值是800CLK,并不是640).



在看Vsync,其实也并不是每一帧有480个Hsyns,实际上要多一些,见“时序特性图”,典型值是525个Hsyns,时序特性图中所要的典型时钟为25.18MHZ,那么刷新频率是25.18*10e6 /525/800=59.95HZ,



现在你明白了吗?(未经过实践证实)如有什么理解错误的地方请指正,谢谢。

verilog HDL学的不精,程序未写。请高手赐教。







这个是时序特性图









-----此内容被ilan2003于2007-05-13,23:02:07编辑过


-----此内容被ilan2003于2007-05-13,23:03:27编辑过
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
97条回答
djh03
1楼-- · 2020-01-26 15:04
都不知放那了,找了很久才找到文件.

有兴趣可以看一下,把文件改回.c就行,只能做简单显示,应用的话AVR应该不行了

kimiyang
2楼-- · 2020-01-26 15:55
 精彩回答 2  元偷偷看……
ilan2003
3楼-- · 2020-01-26 19:42
VerilogHDL代码









module TFT_DR(pclk,enab,pdat,Hsync,Vsync,pdatin);

input pclk;

input[7:0] pdatin;

output enab,Hsync,Vsync;

output [7:0] pdat;



reg enab,Hsync,Vsync;

reg [7:0] pdat;

reg [9:0] Hcount;

reg [8:0] Vcount;

reg encd;





always @(posedge pclk)

begin

        Hcount=Hcount+1;

        if(Hcount==100)

        begin

                if(encd)

                enab=1;       

        end

        if(Hcount==740)

        begin

        Hsync=0;

        enab=0;       

        end

        else if(Hcount==800)

        begin

                Hcount=0;

                Hsync=1;

        end

end

always @(posedge pclk)

begin

if(enab)

begin

pdat=pdatin;

end

end





always @(posedge Hsync)

begin

        Vcount=Vcount+1;

        if(Vcount==20)

        Vsync=1;

        else if(Vcount==34)

        begin

        encd=1;

        end

        else if(Vcount==514)

          encd=0;

          else if(Vcount==525)

          Vsync=0;

end

endmodule
-----此内容被ilan2003于2007-05-14,14:20:26编辑过
zsmbj
4楼-- · 2020-01-26 21:30
这种屏是给有屏幕驱动控制的arm准备的。一些小arm也不能驱动,更不用说avr了。我接触过很多这样的屏。从1.5寸的到10寸的都有,cpu有控制器的就很好接了,1对1的线接好了即可。cpu内部有显存。一般是和系统共享。程序定义好了显示内存后,直接写内存即可。



这样的屏一般的接口是:R0-R7,B0-B7,G0-G7,HSYNC,VSYNC,CLK,ACBIAS(EN),RESET。



一个QVGA(240×320×16位 {MOD})的屏的显存就是320×240×2=153.6K。用PLD+sram做也不合适。因此普通单片机还是合适接总线接口的屏。屏的控制器实际是做在了屏上。

这样的屏一般的接口是:D0-D15,WR,RD,CS,RS,RESET。适合于单片机接口。不过这么高的分辩率接普通的单片机也做不了啥东西。浪费了屏了。
kimiyang
5楼-- · 2020-01-27 02:20
原来 【7楼】 djh03   的程序是针对楼主的那种屏,

1楼  那屏的没有RGB管脚啊!   citizen的那数据手册写得很少  只给出了我在1楼发的那张时序表,也没说怎么初始化屏.  我按时序写了个程序,发现没有什么反应!!!!



点击此处打开armok01154078.pdf
djh03
6楼-- · 2020-01-27 04:31
to:kimiyang 四叶草

我也不知#include <pgmspace.h> 这个库,可以不管它,因为我之前用CVAVR,后来有人说WINAVR会快些,我那个是后来转到WINAVR上编译的,用的是别人的PROJECT.

好像是快些,不太清楚有没有快了.



我用的屏和楼主的不同,我没看楼主的PDF,这个是我当时用的屏的PDF.

点击此处打开armok01154081.pdf



里面的字库是24*24的十二个汉字的,我去掉了字库的一部分
-----此内容被djh03于2007-05-14,17:33:05编辑过

一周热门 更多>