首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何在LCD上实现灰度--LCD系列讲座

如何在LCD上实现灰度--LCD系列讲座

   如何在LCD上实现灰度--LCD讲座之二
   大家知道,液晶的显示效果,是由加在液晶上的有效电压决定的。灰度(彩色)的实
现有两种方式,即PWM(脉宽调制)和FRC(帧率控制)。
    PWM是在一次扫描时间内分成若干个时间片,如16级灰度,就分成16个时间片,如果
显示5/16灰度,那么只有5/16的时间内是有驱动电压的(对同一个点而言),最后的等
效电压就只有全黑的5/16了;
    FRC跟PWM类似,只是每个时间片变成了一帧,如显示16级灰度,那么就要用16帧,
显示5/16的灰度,在16帧里只有5帧有驱动电压(对同一个点而言),最后的等效电压就
只有全黑的5/16了。
    一般对于4级以上的灰度,是采用PWM+FRC结合的方式。因为灰度越高,采用PWM需
要的频率就越高,如16级灰度,320行,刷新率60HZ,需要16x320x60=307200Hz。频率越
高,IC的结构越复杂,而稳定性越差,功耗也越大;而采用FRC,灰度级越多,一个周期
需要的帧数越多,如16级灰度需要16帧,刷新率60Hz时每秒钟不到4个周期,这样看起来
就会有闪烁,所以就得提高刷新率,这同样要提高频率,增加功耗,同时还要提高液晶
的反应速度,而液晶的反应速度总是有限的,且提高速度会大大增加液晶的成本。如果
采用PWM+FRC,可以用2-bit (即4级)PWM和2-bit(4帧)FRC或者3-bit(8级)PWM和1
-bit(2帧)FRC,这样就就能很好解决这些问题,弥补各自的不足。
    至于彩色,跟灰度是一样的,只是三基色的调配而已,如3-3-2方式的256色,只是R
GB三个颜色的灰度分别是8,8,4而已
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
LCD驱动原理--LCD讲座之二
大家知道,现代显示器件的显示方式,基本上都是采用动态扫描的方法实现整幅画面
的显示。比如电视机的显像管(CRT,阴极射线管),通过帧同步信号和行同步信号的控
制,电子枪的电子束逐行逐点的扫描,将电子打在荧光点上,使之发光,通过视觉暂留
的作用,我们看到的就是一副完整的画面。
LCD与CRT类似,也是动态的扫描。但CRT是模拟方式的,通过电路控制,电子束可以
任意移动,而LCD是数字方式的,只有位置固定的电流通路,所以只能通过电路矩阵逐行
扫描,而不能到逐点,即一行上所有的点同时工作。
为了简单起见,这里仍以单色为例,灰度参考【讲座之一】便明白.
既然是一行同时工作,而要显示图像,肯定会有的点亮,有的点是不亮的,那么也就是
说每个点上的电压是不同的(讲到这里,我简单提一下液晶方面的基本知识,液晶有个
阈值电压Vth,当加在它上面的电压大于它时就有显示,否则没有显示;由于是动态扫描
,加在点上的电压是变换的,所以液晶的驱动电压并不等于Vth,通常是数倍于Vth,我
们叫它Vop,或者Vlcd)。这样一来,列上的电压应该是有好两种,另外,由于列上有电
压,要让不在扫描周期上的行不工作,它也应该有个对应的电压,所以行也应该有两种
电压。而液晶不能长时间的工作在同一个状态下,否则会缩短寿命,所以我们每隔一段
时间,会将电压反相,所以行列一共会有8种电压,其中,正反向的最大电压(准确的说
是电位)是共用的,最后便有6种电压,称作VL1,VL2,VL3,VL4,VL5,VL6,其中,假设VL1
=GND,那么VL6便是VLCD了,而VL2~VL5和行数有关,根据最佳偏压法,偏压比1/b=1+sq
rt(行数),那么:

VL2=VL6/b
VL3=2*VL6/b
VL4=(b-2)*VL6/b
VL5=(b-1)*VL6/b

至于偏压比怎么得来的,大家可以看相关书籍,也可以由下图的波形自己去推算(提示
,绝对对比度最大时b的值,即在一帧中,亮点的有效电压与不亮点的有效电压比值达到
最大)

VL1即Vss,M是极性翻转信号,图中为每帧翻转一次,实际可能会不一样,当M翻
转时,行和列上的电压也会翻转(相当于以VL6/2为地),如第一帧,行的电压为VL5,Vs
s,列的电压为VL4,VL6,而第二帧时,行为VL2,VL6,列为VL3,Vss。
另外,提一下这个常见的相关名词-duty,实际上就是占空比的意思,因为一帧中一行
只扫描一次,所以duty=1/行数。
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)

驱动器与控制器--LCD讲座之三

前面讲到了LCD的一些基本原理,相信大家已经对LCD有了一些了解。这回我再讲讲
从MCU到LCD之间是怎样一个控制流程,即我们的位图数据是怎样显示到LCD上的。
前面我们了解到LCD显示是用动态扫描的方式来实现的,每次显示一整行,在一帧里
每行一次扫描一遍,这样要有电路来控制行和列上的输出电压,这种电路就是LCD驱动器
;而驱动器的输出又跟图像及LCD的工作方式是相关的,驱动器需要接受从图像转换来的
控制信号,从而改变行/列上的输出电压,将工作方式及图像位图转换成控制信号的电路
就是控制器。控制器从MCU接收位图数据,然后把它转换成控制信号提供给驱动器。
对于小分辨率的LCD,驱动器和控制器通常是直接集成在一个IC上的,而大尺寸的LC
D,驱动器和控制器则是分开的,并且一般行驱动器和列驱动器也是分开的。那么控制器
和驱动器之间到底是怎样连接的呢?我们来看看

YD是帧同步信号,LP是行同步信号,DATA是列驱动的数据总线,用来传送列上的输出数
据(0或1),XCLK是移位时钟,每跳变一次时DATA上传送一次数据,DOFF#是关闭输出
信号。以640x480的单色屏为例,640个列输出,对应640个位的输出,即80字节,也就是
每行扫描,列上需要的数据为80字节。假设列驱动器使用8位数据线,那么80字节需要80
个XCLK时钟。这些信号,均由控制器驱动,仍以640x480的单色显示为例,驱动器为8位
总线,则每帧开始时控制器连续输出80个XCLK,并将第一行的数据输出,列控制器在每
个XCLK时将数据锁存,然后控制器在YD上输出一个脉冲,行驱动器复位,准备从第一行
输出,控制器在LP上输出一个脉冲,列驱动器复位,将刚才锁存的数据输出,同时行驱
动器也从第一行输出,于是第一行便显示了,接着控制器再输出第二行的数据,然后再
输出一个LP,于是第二行便显示,依次类推,直到第480行后又输出一个YD回到第一行,
即开始了第二帧的扫描。
由此可见,驱动器的输出,完全由控制器的时序和数据决定。对于控制器和驱动器
分离的系统,驱动器无法得知当前的显示特性,如单色还是灰度或者彩色,颜色深度是
多少等等,所以在这样的系统上,灰度/彩色只能用FRC的方式来实现,因此一般单独的
通用控制器,工作频率都相当高。达到几十兆,对于像电脑显示屏这样的大尺寸,甚至
达到几百兆。
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
OLED原理及简介--LCD讲座之四

本来,OLED不属于LCD,但由于应用范围跟LCD类似,而有的朋友也问起来这个,所以
就顺便讲讲
OLED,全称是Organic Light-Emitting Diode,即有机物发光二极管,1987年由美
国柯达公司的一个研究小组发明,目前属于柯达公司的专利。
简单来说,它的发光原理有点类似LED,可以看做一个电容和一个LED并联。下图是OLED
的一般结构

此主题相关图片如下:

正面是空穴注入层,反面是电子传输层,中间是有机物发光材料,当在两层之间施加电
压时,就会产生电流,从而会发光,光线经过正面的玻璃透射出来。
OLED相对于STN LCD来说,有很多优点:
1. 主动发光,视觉效果好,亮度高
2. 高对比度,可达200:1,而STN只能到50:1
3. 反应速度快,1ms以下,适合做视频
4. 大视角,可达160度,而STN<60,TFT<120
5. 相比于LCD+背光,耗电要小
6. 可以做得很薄,可以应用在比较特殊的场合
但任何事物都有两面,OLED也有缺点
1. 目前工艺尚不十分成熟,成品率比较低,尤其是彩色OLED,所以价格十分昂贵
2. 受本身特点所限制,尺寸(点阵)不能做到很大,一般在160行以下
3. 目前材料属于柯达公司的专利,不利于推广
4. 受材料的限制,目前寿命不高,最高的绿色也只有10000小时左右
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
灰度的实现(进阶篇)--LCD讲座之五

前面的讲座里讲到灰度的实现有两种方式:FRC和PWM。它们属于基本的灰度实现方法
,即输出的数据(波形)完全是按照各个象素自己的内容输出的,跟其它的点没有任何
关系。而通常在高级的专用控制器中,会采用一些数学算法来实现用低灰度输出的电路
来实现高灰度等级的输出,如原本只能输出16级灰度,通过某些数学运算之后,可以实
现64级灰度,这个方法就是"抖动"(dithering)。
为了说明抖动的理论依据,我们可以回想一下,有时候我们远看某个物体,看见的是一
种颜色,而走进一看,才发现是有多种颜色交错的,这说明,人视觉看的某点的颜色,
会受旁边点的颜色的影响。抖动正是利用了这个效应。至于实现高色彩为什么要用抖动
而不完全用PWM和FRC,原因前面有提到过,要实现高灰度等级,PWM和FRC都需要比较高
的工作频率,电路就会比较复杂,成本会增加,而且耗电量也会增加。而对于一般小尺
寸的便携式LCD,成本和耗电量是两个及其重要的参数,因此抖动是一种比较好的选择。
下面解释一下抖动的实现

小方块表示灰度级,下面的大方块表示4个象素用黑白来实现灰度。通过这种方法
,对每个点采取同样的运算,就可以用黑白实现4级灰度,如果用更多的点,则可以实现
更多的灰度,但是由于周围的点要做运算,要添加额外的运算电路,另外,经过运算之
后,由于相邻的点相互左右,相当于部分的降低了分辨率,因而实际的应用系统中,一
般都是2-bit即4个点的抖动。所以单独的控制器,一般64级灰度是由16级FRC加4个点的
抖动。
同样是抖动,有静态抖动和动态抖动之分。所谓静态抖动,实际上就是跟周围的点采用
固定的运算,如上图中的,每种灰度跟周围点只有一种运算方法。而动态抖动,是每一
帧中,对相同的灰度,对周围的点采用不同的运算方法,

大家可以想到,还有其它的运算也是可以的。动态抖动的好处是,可以最大限度的减小
由于抖动带来的分辨率降低。
目前市面上的控制器,大部分都是用的静态抖动(如EPSON的SED13XX系列产品),小部
分用动态抖动(如SOLOMON SYSTECH的SSD19XX系列)
51 c8051f(f020,f040) msp430 arm(2410,2510) fpga(xc3s4000) dsp(5116 dm642) keilc vc++ matlab linux protel Ten_layerPCB mpegx h.26x Rscode Turbocode ofdm VideoBroadcasting ldpc_code(now!)
返回列表