原创 嵌入式信息终端24位LCD屏在16位LCD驱动器下的接口转换

2006-10-25 12:59 6420 12 13 分类: MCU/ 嵌入式

摘要:在设计嵌入式信息终端时,常常会遇到LCD控制器与LCD屏的控制时序不匹配的问题,使用可编程逻辑电路实现LCD显示屏与控制器之间的接口是一种有效的解决方案,在本文中使用CPLD实现了PXA255LCD控制器RGB5655b红,6b兰,5b绿)到24RGB8888b红,8b兰,8b绿)A06QU01彩屏的时序转换,并利用LCD屏内部集成的电源控制器实现了LCD背光及LCD偏置的电源产生器。


关键词:LCD控制时序,数字倍频,RGB565RGB888, CPLD


Abstract: When perform a LCD display design, the timing between LCD controller and the LCD display always not match. It is possible to implement such interface circuit by means of CPLD. In this design a CPLD is used to act as the timing converter between PXA255’s RGB565 LCD controller and an AUO A06QU01 LCD display, LCD backlight and bias power supply also introduced use the in chip power source controller.


Key Word: LCD timing, digital multiple frequency, RGB565, RGB888, CPLD 


引言


       在嵌入式设计中常常会使用LCD屏,现在常用的屏大部分都是高性能的TFT真彩屏,因为LCD屏的生产厂商很多,标准也不统一,LCD屏往往不能与LCD控制器无粘合连接。所以在使用LCD屏时,厂家还会推荐使用其专为LCD屏设计的时序芯片。例如Sharp LCD LQ035Q7DB02 配套的控制器为LZ9FC22,日本的LCD屏是16位色的,本身价格很高,控制器也贵得离谱,性能却不见得好。所以采用高性能的24位真彩色的屏更加理想,但接口逻辑需要重新设计。


RGB565RGB888的转换


以由AUO生产和A06QU01[1]为例,这是一款24位的TFT真彩屏,分辨率为320X240,每个像素由RGB888表示,其控制时序由图1所示,LCD 要求的时序由帧同步(VSYNC),行同步(HSYSNC),比特时钟(DCLK)及数据(Data[0:7])构成,帧同步和行同步指示每一帧和每一行的开始,对于A06QU01每一个帧将有240行,每一行有320个像素,每个像素由依次产生的8b红,8b绿,8b兰,(R1G2B3R4G5B6……)所以称为RGB888


PXA25x为代表的嵌入式处理器拥有一个LCD控制器,我们可以将这个控制器配置为最高16位的TFT LCD屏控制器,其控制时序由图1所示,LCD 要求的时序由帧同步(VSYNC),行同步(HSYSNC),点时钟(PCLK)及数据(Data[0:15])构成,帧同步和行同步指示每一帧和每一行的开始,对于A06QU01每一个帧将有240行,每一行有320个像素,每个像素由5b红,6b绿,5b兰构成16位数据,因为人眼对绿色更敏感所以用6b表示绿色,称为RGB565


RGB565RGB888接口要解决3个问题


 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />


1、  比特时钟3倍频


LCD控制器每一个像素用一个时钟一次送出16b数据,而LCD屏每一个像素需要3个时钟,每次8b获得。这样就需要产生一个3倍于控制器时钟的时钟。通常情况下,使用锁相环可以实现均匀的3倍频,在这个设计中,使用锁相环显得过于复杂,并且不容易解决3倍频时钟与RGB数据的同步问题,所以使用了数字的办法实现非均匀3倍频。具体方案是:使用一个大于6小于7倍于LCD屏比特时钟作为CPLD的主控制时钟,LCD屏的时钟大约为21M,所以选择CPLD的主控时钟为48M


2、  如图1所示,pclk为控制器输出的点时钟,和pdataRBG565数据。Pclkoutpdataout是送往LCD的信号。在pclk上升沿将pdata存入缓冲器pdatabuf,并将内部状态位datavalid置位,在x7pclk的上升沿,如果检测到datavalid为高,则使pclkout为低,将缓冲器中的数据取出高5位红色信号,补零后送到pdataout,并将datavalid置为低。使用这种方法依次将绿色及兰色信号送出。完成RGB555RGB888的转换。从图中可以看出,虽然数字3倍频信号pclkout不是均匀的,但只要其时序能满足LCD屏要求的占空比40%~60%就不会影响功能。同步信号可以由软件驱动程序编程产生适合的极性和宽度的脉冲信号。


LCD背光及LCD偏置的电源产生器


LCD屏需要使用LED作为背光,以及-10V的偏置电压,本文使用的LED屏是2路各4个白光LED串联,每路需要的供电电压约为10V,电流20mA。这些电源利用LCD控制器内部的电源控制器实现。如图2所示,由L4 Q1构成升压型DC-DC转换器,Q1由脉冲宽度调制信号控制,经过D4C19C39整流滤波后得到大约10V的正电压,经过C20隔直流后再整流滤波得到-10VLCD偏置电压。注意电容C42的极性。LED电流限制使用图3所示电路,Q3Q5LED驱动管,Q2为电流采样管。这三个三极管的基级相连,因而基极电压相等,并且基极到射极电压近似相等,于是R42R43R40上的电压相等,这样R43R42上的电流被转换为R40上的反馈电压,送到LCD电源控制器的反馈端,控制器自动调整LCD_供电电压,实现通过LED的电流稳定在22mA


调试


RGB565RGB888转换器使用XC9536实现。使用ISE WEBPACK开发。如果连接无误,上电后,加载带有TFT屏驱动的Linux内核,一般都能看到企鹅图案,只是可能位置和色彩不太对,这时需要根据实际看到的图像调整LCD驱动程序LCD控制寄存器中的时序设置,实现正确的显示。


结论


由于接口标准不统一,将一个新型号的LCD屏接口到信息终端会比较困难,需要仔细分析LCD控制器及LCD屏的时序和驱动方式,使用低价可编程逻辑电路,可以实现接口的时序转换。LCD屏需要的背光电源及偏置电源可以按本文所述方法利用LCD屏内部集成的电源控制器实现,也可以外接专用的LCD背光电源和LCD偏置。


参考文献:


1、  AUO 友达光电 'Product Specification 3.6Color TFT-LCD Module' MODEL NAME: A036QN01 V0 2004 AU  p18


2、  Intel PXA255 Processor Design Guide, March 2003 p3-5


点击看大图
1 RGB565RGB888转换器仿真结果


453e2638-687d-464f-bf46-8886abcb5323.jpg



2 背光驱动电源及LCD偏置电源产生器


 


bb65741f-02ff-47fa-80c9-5880b326619f.jpg


 



3 LED背光电流限制


 


附录:转换器编码


//--------------------------------------------------------------------------------------------------


// Title       : lcddrv1


// Design      : lcd


// Author      : Luohao      


// Company     : Sinovee Microsystems


// File        : lcddrv1.v


// Generated   : Fri Feb 18 15:20:16 2005


//-------------------------------------------------------------------------------------------------


// Description :


//     for xscale pxa255 lcd driver to auo a036qn01


//-------------------------------------------------------------------------------------------------


`timescale 1ps / 1ps


module lcddrv1 ( x7pclk ,pdataout ,pclkout ,pdata ,pclk ,vsyncout ,vsync ,hsyncout ,hsync );


input x7pclk ;


wire x7pclk ;


input [15:0] pdata ;


wire [15:0] pdata ;


input pclk ;


wire pclk ;


input vsync ;


wire vsync ;


input hsync ;


wire hsync ;


 


output [7:0] pdataout ;


reg [7:0] pdataout ;


output pclkout ;


reg pclkout ;


output vsyncout ;


wire vsyncout ;


output hsyncout ;


wire hsyncout ;


 


reg [15:0] pdatabuf;   // buffer to save the input


reg datavalid;            // flag to convert the data


reg rstdatavalid;


reg [2:0] outstate;


always @ (posedge pclk)


  begin        


    pdatabuf = pdata;     


  end


// to get the data valide flag


always @(posedge pclk or posedge rstdatavalid)


       begin


       if (rstdatavalid)


              datavalid = 1'b0;


       else


              datavalid = 1'b1;


       end


 


always @(posedge x7pclk)


       begin//red


              if(datavalid)


                     begin


                            rstdatavalid = 1'b1;


                            outstate = 3'b000;


                            pclkout = 1'b0;


                            pdataout = {pdatabuf[15:11],3'b000};


                     end


              //red              


              else


                     begin


                            case(outstate)


                            3'b000:   


                                   begin


                                          outstate = 3'b001;


                                          pclkout = 1'b1;


                                   end


              //green


                            3'b001:   


                                   begin


                                          outstate = 3'b010;


                                          pclkout = 1'b0;


                                          pdataout = {pdatabuf[10:5],2'b00};


                                   end


                            3'b010:


                                   begin


                                          outstate = 3'b011;


                                          pclkout = 1'b1;


                                   end


              //blue


                            3'b011:   


                                   begin


                                          outstate = 3'b100;


                                          pclkout = 1'b0;


                                          pdataout = {pdatabuf[4:0],3'b000};


                                   end


                                  


                            3'b100:   


                                   begin


                                          rstdatavalid = 1'b0; // data is not valid any more


                                          outstate = 3'b101;


                                          pclkout = 1'b1;


                                   end                             


                            default:rstdatavalid = 1'b0;     // data is not valid any more


                            endcase;


                     end


       end 


assign hsyncout = hsync;


assign vsyncout = vsync;


endmodule

PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

southcreek 2006-10-26 11:06

原文在刊物上不全,

这是最全的.

相关推荐阅读
southcreek 2024-12-04 16:32
PWM输出隔离DAC设计
这个设计的目标是产生一个隔离的DAC输出。12V供电,产生0~5V的输出。达到10000约13.3位的分辨率。要求DAC输出在改变设置后1S内能稳定。需要能长时间保持稳定和低噪声。能达到要求的DAC只...
southcreek 2024-12-04 15:23
一个基于HAL库的串口控制框架
将串口接收配置为 DMA方式,DMA 使用 DMA_CIRCULAR 模式工作。串口接收的数据实际上构成循环队列。 定义一个结构Comm_typedef 结构体中包含指向接收到的第一字节位置chrc...
southcreek 2024-07-08 11:38
接地不良导致的故障分析
这个电路的控制板需要连接显示板和识别板。5V 供电和串行控制连到显示板,显示板再连接到识别板。识别板上电位器使用一个LDO供电,将输入的5V转成3.3V。当电位器滑动时,输出电压在0~3.3V之间。...
southcreek 2024-06-26 09:15
【EMC整改】带辅助加热的滴速控制器辐射抗扰整改
这个滴速式的输液泵使用一个红外线发射和接收装置,当有液滴通过时,会扰动检测信号,识别这个扰动检测到液滴滴下,获得滴壶中的液滴速度,调整阀门大小,实现输液速度控制。控制器还配备一根加热条,用于输液时对药...
southcreek 2024-06-06 08:52
QT 使用QSettings 操作ini文件配合表格操作
这个项目可以演示 使用QSetting 读取或写入 ini文件。并使用tablewidget 显示。Ini文件的格式如下,这个文件可以事先编写。也可以在程序中生成。有一个大类,下面有一个小类使用等号设...
southcreek 2024-05-27 16:18
差分输入ADC的单端到差分转换器驱动设计
单端信号需要转换成差分信号,以便使用ADC进行转换。这个就所谓的ADC驱动电路。需要的结果为Vp = Vcm + Vi/2Vn = Vcm – Vi/2这样 Vp – Vn = Vi使用简单的加法器和...
EE直播间
更多
我要评论
1
12
关闭 站长推荐上一条 /3 下一条