LCM调试总结

来源:互联网 发布:单片机工程师招聘要求 编辑:程序博客网 时间:2024/04/29 17:18

1.PWM的频率
 
  对于LCD的背光来说,一般做法是通过升压芯片来提供对电压的支持。而这些升压芯片都会有PWM输入PIN,通过PWM来调节背光的明暗度。 不过有时候我们会发现背光调节幅度陡然增大缩小,或是背光不足够亮(相对于作为GPIO PIN输出HIGH来说),但是通过万用表测量PWM输入,电压降的幅度都是处于正常情况下,这时候我们不妨调低PWM的输出频率。因为有很多升压芯片对PWM的频率都会有要求,将频率调至datasheet中标示的范围,一般都能解决此问题。
   
 
  2.LCD的星星点点
 
  在调试的时候,我们会发现LCD上有莫名其妙的星星点点。一般这种情况下,我们首先要看看VGH和VGL电压是否处于datasheet所描述的范围之内。如果属于标准范围之内,但星星点点依旧,很有可能就是时序问题。这时候不妨在代码中变更采样的时序(比如上升沿采样改为下降沿采样)。如果无法在代码中更改,也可以在clk信号线加个100R电阻,也可能解决该问题。
 
 
  3.背光的反馈电压
 
  升压芯片的输出电压需要反馈,如果没有接LCD的话,那两个极性的电压是无法出来的。线路中的二极管也是属于易损的类型,背光不亮很多情况是该二极管坏掉。反馈中的电阻如果没有计算正确,那么很可能反馈电压会超出预料,从而导致损坏LCD。
   
   
  4.显示抖动
 
   在确认VPW,VBP,VFP,HPW,HBP,HFP的设置已经符合LCD规格要求后,如果屏幕的显示还在抖动的话,不妨将输出的时钟信号频率降低,有可能解决该问题。
  
  
  5.一些英文的缩写
 
  VPW: Vsync Pulse Width
  VBP: Vsync Back Porch
  VFP: Vsync Front Porch
  HPW: Hsync Pulse Width
  HBP: Hsync Back Porch
  HFP: Hsync Front Porch

调LCD出现在这样的问题,显示图像时,在明暗颜色过渡间,会出现一些亮点,有时还不停的闪动我调整pixel clock 极性,由上升沿采样改由下降沿采样就没事了.不知怎么回事
2 LCD有水波纹一般什么问题
将信号short到地,可以看一下板子是否受到干扰,比如电源或晶振部分,再一个是否你输出至LCD 的信号线走的有问题,看看电源和背光电压是否有纹波,检查一下LCD周边外围电路的电阻、电容、电压是否很干净。
这个主要是在信号输入时右能出现于拢,信号线之间、地线与信号线之间出现了信号的反射或于拔;还有一种情况就是图像IC不稳定,输出的控制信号不稳或有毛剌

    1,背光芯片输出的纹波:检查charge pump(dc-dc)电路,替换为合适的滤波电容;

    2,LCD driver 电源管理:

(1)3级chargepump之间确保有足够的时间延迟,不同的系统这个要调整;

(2)chargepump的输出端要加足够大的滤波电容,具体选择看波形

    3,修改driver ,主要是有关显示周期方面方面的寄存器设置


肯定是背光电源module的问题,估计你采用的是PWM方式控制屏的亮度!

这种纹波产生的原因是LCD的刷屏频率与白光灯的频率频差小于20Hz造成的,就像在日光灯下看高速旋转的电风扇叶子的影响一样!好解决,要软件调一调PWM的频率,运气好就可以解决问题,如果LCD的刷频不是很稳定,就不能100%解决问题了
于LCD条纹的问题:

    1、条纹的宽度,较宽的条纹一般跟背光有较大的关系
    2、有些LCD在晃动时,由于视角的变化,逐行扫描比较明显,这种情况跟有些driver IC有关系,只能通过修改参数优化
    3、参数没有调试好,涉及扫描频率、驱动行列的电压有关!

4手机 LCD&Camera ESD 问题

如果手机屏朝上,+-10kV pass;
但手机朝下,+-3kV就花屏了
试试屏向下把手机垫起离开桌面一定距离还有没有问题,如果好了,就找一下放电回路,可能是手机屏的控制电路与金属板距离短了后,电容增大,阻抗减小,本来可以从其它路径放掉的电,从这个电路走了,想办法提高这个路径的阻抗或为放电电流提供一个其它的低阻抗通路。
5 调试LCD出现花屏
1)信号的时序,尤其是RS,很大可能是送的数据被认为是指令而出错了。
2)复位信号的时机、时长,复位信号变高到送数据的时间足够。
3)初始化的指令先后顺序、正确性。
4)初始化时高压的打开是否符合规格式要求

推荐TFT LCD系统基本上由三部分构成:TFT主控制器、LCD驱动电路和单片LCD。其中TFT控制器产生符合TFT接口格式的控制信号。但是,市面上的LCD 种类太多,而且各自的时序都不一样,所以我们一般需要一个LCD驱动电路将TFT接口的信号转化到符合目标LCD的特定的LCD接口信号。这就是我们所看到了LCD背后总会有一块PCB板的原因之一。LCD驱动电路除了充当时序转换的角色外,还负责提供LCD正常工作所需要的各种电压,包括:
背光电压:分为两种,LED型(21.6V左右);CCFL型(360~500V交流)
Gate电压:一般为正负15V
Commom电压:一般为2V左右的交流电压
Analog Vcc:一般为5V
Digital Vcc:一般为3.3V
Gray level reference Voltage:我最近在好几块屏上都发现需要这个电压。这是一组电压,一般有V0~V10,每个电压的值都在0~5V之间,而且是交流电压,要求随行同步信号一起变化。这个我不知道怎么驱动,明白的朋友烦请告诉我一声!

二. TFT接口时序说明
很多朋友对得S3C2410 TFT液晶接口的时序比较烦,其实解剖开来非常简单。先来看TFT接口的信号线,我们以16bit为例,信号线共5组20根:
VD[23:19]、VD[15:10]、VD[7:3]:分别对应R、G、B分色信息,一个16bit的组合代表了一个象素的信息。
VCLK:数据传输时钟,在数据有效的情况下(VM),每个周期传输一个象素的信息。
HSYNC:行同步信号,持续若干个时钟周期,表示新的一行传输即将开始。
VSYNC:帧同步信号,持续若干个行周期,表示新的一帧传输将开始。s
VDEN:数据有效指示,该信号有效下的数据长度刚好为1行。
另外,S3C2410还提供了LEND信号表示一行结束,该信号大可不必理会。
现在我们来讨论时序,有一点我们明白:那就是一个VCLK周期传输一组VD信号,从而给一个pixel着了色。

从这里开始展开,以240X320的屏为例,现在要点亮一行,那么肯定要有240个VCLK周期将240个pixel的VD值输出,而且这240个周期内 VDEN应该一直是有效的。现在我们的思路从点扩展到了行,理想情况下,两行之间不需要间隔,也就是说这一行结束马上传输下一行的第一个pixel的 VD。但是这样做并不好,因为一个点的偏差会造成满盘皆输。因此我们引入了行同步HSYNC信号,也就是说在传输完一行的数据后,先歇一会儿,等待若干个时钟(我们称之为后插入等待周期);然后我们送一个行同步信号,当然这个信号的有效周期数我们也能控制(我们称之为同步周期);之后呢,我们在等一会,让 LCD驱动电路准备好接收,我们在把一行的数据发下去(这个等待时间我们称之为前插入等待周期)。好了,有了这个说明后我们可以把行显示的时序给出来了:(S3C2410 datasheet, Figure 15-6)

从图中我们可以看到:HSPW+1、HBPD+1、HFPD+1就是我们分别定义了同步周期、前插入等待周期、后插入等待周期。而HOZVAL+1则是一行的有效象素数目。这些都可以在寄存器里面进行设置。

说完行与行之间的显示,我们就可以扩展到帧与帧之间的显示。我们很容易想到,在帧的领域里面也应该是类似于行的结构,同样包含了同步周期、前插入等待周期、后插入等待周期,给出时序图:S3C2410 datasheet, Figure 15-6

需要注意的是:在帧的领域里,我们所说的周期单位是一行;而在行的时候,我们所说的周期单位是VCLK时钟周期。
经过上述的分析,我们可以把TFT LCD的接口归纳到8个参数上:HSPW、HBPD、HFPD、HOZVAL、VSPW、VBPD、VFPD、LINEVAL。另外,通过上述分析,我们可以看到,显示一帧图像总共需要的VCLK周期为:(HSPW+HBPD+HFPD+HOZVAL+4)X(VSPW+VBPD+VFPD+ LINEVAL+4),VCLK是可调的,因此通过选择适当的分频比保证帧率在60Hz左右就可保证液晶的正常工作了。

三. 数据buffer和Scrolling实现说明
很多人可能都会问驱动LCD的数据应该放在什么地方,是怎么被搬运过去的。其实很简单,S3C2410的LCD控制模块自带了DMA控制器,我们只要在SDRAM里面开一块空间,然后设定要DMA的起始地址(LCDSADDR1寄存器)和结束地址(LCDSADDR2)
就OK了。
不过S3C2410的寄存器提供了一种滚动的显示模式,这个主要是靠LCDSADDR3寄存器实现的。理解起来可能有些麻烦,我们可以这样想象:滚动显示的含义就好比是我们拿着一个放大镜在大地图上移动,而放大镜下方的图像就是我们应该显示的东西。假设LCD的大小还是240X320的,我们在SDRAM 中开了一个480X640个象素的缓冲区,相当于四倍图像的大小。那么如果我们要截取一块240X320方形画面,就要在取完一行的数据(PAGEWIDTH=240)以后跳过OFFSIZE(此处240)个象素(对于16bit)再取数据,得到的才是大画面里对应的下一行数据。总而言之,滚动显示是一种用空间来换取软件效率的方法。需要注意的是,OFFSIZE和PAGEWIDTH的值必须和LCD的大小已经缓冲区的实际尺寸对应上,不然屏幕就乱闪了;另外,LCDSADDR2指向的是整个大缓冲区之后的第一个地址。

四. 调试经过
这两天新板子还没有到,所以有点闷。看到老板那里有一块液晶,就拿过来先玩起来。该LCD是华恒S3C2410的配套产品,型号为sharp的LQ035Q7DB02,3.5寸,240X320,16bit TFT,带触摸屏。

由于接口不兼容的,所以只好把一端的插槽剪掉,一根根线直接往我的板子焊,这种脏活干多了也没什么感觉了。弄好之后就开始跑2410test软件了,因为原先看过TFT接口了,知道有几个参数是肯定要改的,也就是我前面说的。但是奇怪的是无论我怎么改,屏幕的中间总是有一条黑带无法显示。我尝试着全屏显示一种颜色(0xf800),但是还是有好几个区域是黑色的。这个问题一直从昨天下午开始纠缠到晚上,很郁闷。对于弄惯硬件的我来说,忍不住想看看2410 输出的时序是不是正确的。行好板子上有FPGA,因此我就借助quarters的SignalTap抓TFT的几个输出信号。不看不知道,一看吓一跳,信号完全不对,HSYNC和VSYNC的输出极性是反的,而且前后的插入周期也和我配置的大不相同。奇怪的是不管我怎么改,输出基本上都是那个样子, HSYNC和VSYNC的输出极性始终是反的。我开始怀疑这块S3C2410出了问题。

一个晚上也在郁闷中过去了,带了一本S3C2410的Datasheet爬上床,想在睡觉前在把LCD控制模块好好读读。翻了几页,我又看到 LPC3600这个东西,前几次也看到过,但是不知道是什么东西,网上搜了一下网友们也大多说不明白,所以就没深究。但是直觉告诉我,肯定和它有关。我细细看了一下,终于明白这个家伙是干什么的了。实际上是三星在3C2410里面直接包含了一个LCD控制器,就相当于我们前面说的LCD驱动电路的时序转换部分,该控制器LPC3600就是面向他们自己的LCD LTS350Q1-PD1/2的。三星这么做应该说出于两个目的:1,节省自身的系统开发成本,他们用2410做产品的时候就不用外加芯片完成时序转换功能了;2,推销自己的LCD产品。但是对我们使用其它公司的LCD产品时,这个模块显然是没有用的。而我在读2410test代码的时候,记得是将它使能的。可以说,我的直觉越来越强烈,可惜要睡觉了,只能把结
果留到第二天。
今天一大早就起来了,我隐约记得这一个念头甚至在梦里都出现了。我的想法立刻得到了验证,图像已经能全屏显示了,除了顶底一两行的不正常之外,别的都OK了,时序一抓也正常。

总结得到两点:1,当外接其它显示屏的时候,LPCSEL寄存器一定要清零。
2,调试不能蛮干,一时的灵感胜过一天的苦力。

接下来的事情就简单了,我开始调整参数以确保全屏的正常显示。要指出的是,垂直方向的问题并不一定是V类的参数出了问题,也可能是H方向上的参数没有调整对产生的。

接下来,要在WINCE和Linux上进行LCD参数的设置

原创粉丝点击