AMOLED微型显示器使用指导书

浏览量

 

 

AMOLED微型显示器

 

使用指导书

 

V0.2

 

适用产品型号:

SVGA系列

SXGA系列

 

云南北方奥雷德光电科技股份有限公司

2017年09月

 

内容摘要

  本文档从使用者的角度出发,描述了奥雷德公司SVGA和SXGA系列微型显示器相关功能的使用说明,旨在细化并补充规格书的不足,让使用者更直接的了解其使用方法,指导用户进行显示器相关的软、硬件设计,简化用户的开发流程。

 

1. 显示器初始化

1.1. 显示器复位

  在初始化显示器之前,必须对显示器进行可靠、稳定的复位操作。为了确保显示器处于稳定的状态(不受用户系统状态影响),建议将显示器的复位引脚通过电阻下拉,如图 1-1所示。

  

 

图 1-1 显示器复位电路

 

  采用此复位控制电路时,显示器默认处于复位状态。在需要对显示器操作时,MCU需控制复位引脚保持低电平状态至少20ms,然后切换为高电平状态并保持,以此完成一次复位操作。

1.2. 显示器IIC通讯

  显示器的IIC接口为1.8~3.3V COMS标准,其通讯地址由SelAddr0引脚(默认上拉)的电平状态确定,高电平为0x1E,低电平为0x1C;为保证IIC通讯正常,建议将SCL和SDA两个信号线通过电阻上拉至1.8~3.3V,如图 1-2所示。同时,建议用户使用MCU的I/O口模拟IIC进行通讯,速率为100KHz。

  

 

图 1-2 显示器IIC通讯电路

 

  注:针对SVGA050显示器,使用IIC通讯前,必须先提供像素时钟信号(PCLK)。

1.3. 初始化流程

  显示器初始化应流程如图 1-3所示,为保证程序设计的兼容性,要求所有显示器在复位前都需要先提供像素时钟PCLK信号。

  

 

  图 1-3 显示器初始化流程图

 

2. 显示器功能使用

2.1. 显示亮度调整(以SVGA系列为例)

  SVGA显示器寄存器描述中有两个寄存器涉及到亮度的调整,一个是08H寄存器,另一个是19H寄存器。

  08H寄存器调整的是输入RGB信号的亮度(信号增益加减控制),如图 2-1所示,虽然调节此寄存器可以调节亮度,但是效果并不明显,可调范围非常小,还可能因为调整后与信号对比度不匹配而导致画面失真的异常。

  

 

  图 2-1 信号亮度、对比度调整示意图

 

  而19H寄存器调整的是OLED共阴极端的电压(Vcom电压调整),已知OLED材料的发光效率正比于流过其电流的大小,电流越大,发光效率越高,亮度也越大。由于SVGA显示器采用了电压驱动的方式,如图 2-2所示,若想调整其亮度必须调整其OLED两端的电压,已知阳极电压固定为Van=5V,那么调整共阴极电压Vcom即可实现OLED显示器亮度的调整。

  

 

图 2-2 像素驱动单元电路原理图

 

  注:Vcom为负压,亮度变化与Vcom成反比关系

  综上,建议用户调整显示器亮度时,通过调整显示器的Vcom设置寄存器实现;有关Vcom设置寄存器的地址和详细描述请参照对应显示器规格书。

2.2. 显示窗口设置

  显示窗口的设置,通过4个边距调整寄存器共同实现,可以调整显示画面的大小和位置;建议用户提前确定好显示窗口的大小及位置,把配置数据归入到第1.3节中初始化流程的寄存器配置部分。以SVGA系列为例说明,其寄存器作用效果描述如下表所示:

  

寄存器 默认值 功能描述
11H,13H 02H,02H 调整显示窗口起始位置
12H,14H 02H,02H 调整显示窗口结束位置

图 2-3 显示窗口大小、位置调整示意图

 

  其中左边距和上边距控制寄存器设置显示窗口的起始位置,以左上角为起始坐标,右边距和下边距控制寄存器设置显示窗口的结束位置,以右下角为起始坐标,如图 2-3所示:

  注:显示画面的移动精度为一个像素间距(pixel pitch),详见各型号显示器规格书。

  设置显示窗口时,须保证4个边距调整寄存器的值在其可调范围内且匹配输入画面的分辨率,否则会出现画面缺失或部分黑屏的现象。假设所显示画面的分辨率为 A × B,则寄存器设置应满足如下关系:

  A = 804 – reg (11H) – reg (12H) à reg (11H) + reg (12H) = 804 – A

  B = 604 – reg (13H) – reg (14H) à reg (13H) + reg (14H) = 604 – B

  在保证上述要求的前提下,用户即可实现显示画面大小和位置的控制;若需要居中显示,在满足上述条件的情况下,要求左右边距对称和上下边距对称:

  reg (11H) = reg (12H)

  reg (13H) = reg (14H)

  *特别注意,针对SVGA系列显示器,若其工作在隔行扫描模式下,设置显示窗口时,上下边距只能设置为偶数:

  reg (13H) = 2n

  reg (14H) = 2n

  设置示例:

  假设所显示画面的分辨率为768×576,则应满足:

  reg (11H) + reg (12H) = 804 – 768 = 36

  reg (13H) + reg (14H) = 604 – 576 = 28

  若要居中显示,则应满足:

  reg (11H) = reg (12H) = 36 ÷ 2 = 18 = 12H

  reg (13H) = reg (14H) = 28 ÷ 2 = 14 = 0EH

  若要移动画面位置,则先确定显示画面的起始坐标,若画面起始坐标为(6,6),则:

  reg (11H) = 6,reg(12H) = 36 – reg(11H) = 30 = 1EH

  reg (13H) = 6,reg(14H) = 28 – reg(13H) = 22 = 16H

  针对SXGA显示器,使用上述相同的方法进行操作,但需要注意总像素点和操作寄存器的不同,详细寄存器说明请参照SXGA060显示器规格书。

2.3. Gamma LUTs操作

  SVGA显示器的Gamma LUTs共有LUT0~LUT16 17个点,均为9位数据,直接读写显示器的20H~42H寄存器进行Gamma数据的读写操作,具体流程如图 2-4所示:

  

 

图 2-4 SVGA显示器Gamma操作流程

 

  SXGA显示器的Gamma 矫正分为R,G,B三个独立LUTs通道,每个通道LUTs共有256个10位数据,需要通过11H,14H,17H三个LUT[n]偏移量寄存器,以间接寻址的方式进行Gamma数据的读写操作,如图 2-5所示为Gamma LUTs操作示意图:

  

 

图 2-5 SXGA Gamma LUTs操作示意图

 

  在分别将SXGA显示器R、G、B三通道Gamma LUTs 数据全部写完后,各通道所有数据均缓存在一个数据表中,此时显示器并未按照新的Gamma信息进行显示,需要将SXGA显示器10H寄存器的第3、2、1位同时置一使能Gamma LUTs更新,缓存的数据表将覆盖现有的Gamma LUTs;更新完成后,显示器即按照新的Gamma信息进行显示,具体操作流程如图 2-6所示:

  

 

图 2-6 SXGA显示器Gamma操作流程

 

  最新的矫正方法采用了曲线拟合的方式,以获得更加细腻的Gamma矫正效果,详细的计算过程就不做介绍;为了简化MCU的计算过程,已经提前完成了一些复杂的指数计算,具体如以下示例代码所示:

  SVGA Gamma操作示例代码(C语言):

  所需数据表:

  BYTE LUT[16]={0,33,55,74,92,108,124,139,153,167,181,194,207,219,231,243};

  注:该数据表的值为已经提前完成指数计算的中间值,具体的Gamma矫正值还需在此数据表的基础上再进行一定计算。

  功能实现:

  void Wr_Gamma(WORD Gamma_value)

  {

    BYTE k, b;

    WORD tmp, cGamma, Remainder;

    for (k=0,b=0,tmp=Gamma_value, Remainder=0; k<16; k++,b=0)

    {

      Wr_I2C (DISPADDR, 0x20 + k*2, LOW_BYTE (tmp));

      Wr_I2C (DISPADDR, 0x20 + k*2+1, HIGH_BYTE (tmp));

      cGamma = (512-Gamma_value) * (LUT[k+1]-LUT[k]);

      Remainder + = cGamma%256;

      if(Remainder > = 256)

      {

        Remainder - = 256;

        b=1;

      }

      tmp + = (cGamma>>8)+b;

    }

  }

  SXGA Gamma操作示例代码(C语言):

  所需数据表:

  BYTE LUT[256]={

   0, 9, 13, 17, 21, 24, 26,29, 31, 34,36, 38,40 , 42, 44, 46,

  48, 50, 51, 53, 55, 57, 58, 60, 61, 63, 64, 66, 67, 69, 70, 72,

  73, 74, 76, 77, 78, 80, 81, 82, 83, 85, 86, 87, 88, 90, 91, 92,

  93, 94, 95, 97, 98, 99, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110,

  111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,

  127, 128, 129, 130, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,

  141, 142, 143, 144, 145, 146, 147, 148, 148, 149, 150, 151, 152, 153, 153, 154,

  155, 156, 157, 158, 158, 159, 160, 161, 162, 163, 163, 164, 165, 166, 167, 167,

  168, 169, 170, 170, 171, 172, 173, 174, 174, 175, 176, 177, 177, 178, 179, 180,

  180, 181, 182, 183, 183, 184, 185, 186, 186, 187, 188, 189, 189, 190, 191, 192,

  192, 193, 194, 194, 195, 196, 197, 197, 198, 199, 199, 200, 201, 202, 202, 203,

  204, 204, 205, 206, 206, 207, 208, 208, 209, 210, 211, 211, 212, 213, 213, 214,

  215, 215, 216, 217, 217, 218, 219, 219, 220, 221, 221, 222, 223, 223, 224, 225,

  225, 226, 226, 227, 228, 228, 229, 230, 230, 231, 232, 232, 233, 234, 234, 235,

  235, 236, 237, 237, 238, 239, 239, 240, 240, 241, 242, 242, 243, 244, 244, 245,

  245, 246, 247, 247, 248, 248, 249, 250, 250, 251, 251, 252, 253, 253, 254, 255}

  功能实现:

  void Wr_Gamma(BYTE CHAddr, WORD Gamma_value)

  {

    WORD dGamma, cGamma;

    WORD Remainder;

    BYTE i, b;

    for(i=0, dGamma=Gamma_value,b=0,Remainder=0;i<0xff;i++,b=0)

    {

      Wr_I2C(DISPADDR,CHAddr,i);

      Wr_I2C(DISPADDR,CHAddr+1,HIGH_BYTE(dGamma));

      Wr_I2C(DISPADDR,CHAddr+2,LOW_BYTE(dGamma));

      cGamma=(1024-Gamma_value)*(LUT[i+1]-LUT[i]);

      Remainder+=cGamma%256;

      if(Remainder>=256)

      {

        Remainder-=256;

        b=1;

      }

      dGamma+=(cGamma>>8)+b;

      }

        Wr_I2C(DISPADDR,CHAddr,i);

        Wr_I2C(DISPADDR,CHAddr+1,0x03);

        Wr_I2C(DISPADDR,CHAddr+2,0xff);

      }

2.4. 温度补偿

  由于OLED材料固有的温度特性,SVGA和SXGA显示器在低温环境工作时,亮度相比常温比较暗,而在高温环境工作时又比较亮。为了避免显示器亮度在整个工作温度范围内出现较大波动而影响使用,需要在一定温度范围内进行相应的亮度补偿(Vcom调整),保证其亮度处于一个基本稳定的状态。正常情况下,温度无法进行瞬变,建议间隔10s或者20s进行一次补偿操作,具体流程如图 2-7所示,关于SVGA和SXGA温度传感器部分的详细描述请参考其规格书。

  

 

图 2-7 OLED显示器温度补偿操作流程

 

  经过一系列的实验和验证,得到了在-40℃~+65℃温度范围的温度补偿查找表,其表中的值表示每个温度值下,Vcom所需要调整的值,温度补偿查找表和示例代码如下所示:

  SVGA温度补偿查找表:

  BYTE TC_Table[129]={

  -57,-56,-55,-54,-53,-52,-52,-51,-50,-49,-48,-48,-47,-46,-45,-44,

  -43,-43,-42,-41,-40,-39,-38,-38,-37,-36,-35,-34,-33,-33,-32,-32,

  -30,-29,-29,-28,-27,-26,-25,-24,-24,-23,-22,-21,-20,-19,-19,-18,

  -17,-16,-15,-15,-14,-13,-12,-11,-10,-10, -9, -8, -7, -6, -5, -5,

  -4, -3, -2, -1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1,

  1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4,

  4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 5, 5,

  4, 4, 4, 4, 4, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2,

  2};

  SXGA温度补偿查找表:

  BYTE TC_Table[129]={

  -66,-66,-66,-65,-65,-65,-64,-64,-63,-62,-61,-60,-59,-58,-57,-56,

  -55,-54,-53,-52,-51,-50,-49,-48,-47,-46,-45,-44,-43,-42,-41,-40,

  -39,-37,-35,-33,-31,-29,-28,-27,-25,-23,-22,-21,-20,-19,-19,-18,

  -17,-16,-15,-15,-14,-13,-12,-11,-10,-10, -9, -8, -7, -6, -5, -5,

  0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4,

  4, 5, 5, 6, 6, 7, 7, 8, 8, 8, 9, 9, 9, 10, 10, 10,

  11, 11, 12, 12, 13, 13, 14, 14, 15, 15, 16, 16, 17, 17, 18, 18,

  19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20,

  20};

  SVGA温度补偿功能实现(c语言):

  void disp_tc(UINT8 addr, UINT16 ref_vcom)

  {

    UINT8 current_temp;

    current_temp = disp_get(addr, ADDR_TEMP_VALUE);

    ref_vcom += array_disp_tc[current_temp >> 1];

    if (ref_vcom > 0xff)

    {

      ref_vcom = 0xff;

    }

    else if (ref_vcom < 0x40)

    {

      ref_vcom = 0x40;

    }

    disp_set(addr, ADDR_VCOM_CTRL, ref_vcom);

  }

  SXGA温度补偿功能实现(c语言):

  void disp_tc(UINT8 addr, UINT16 ref_vcom)

  {

    UINT8 current_temp;

    current_temp = disp_get(addr, ADDR_TEMP_VALUE);

    ref_vcom += array_disp_tc[current_temp >> 1];

    if (ref_vcom > 0x1ff)

    {

      ref_vcom = 0x1ff;

    }

      else if (ref_vcom < 0x40)

    {

    ref_vcom = 0x40;

    }

    disp_set(addr, ADDR_VCOM_CTRL, high_byte(ref_vcom));

    disp_set(addr, ADDR_VCOM_CTRL+1, low_byte(ref_vcom));

  }

  2.5.

  3D显示应用

  奥雷德公司的OLED微型显示器可用于左右眼(Side-by-Side)格式的3D显示应用,具体实现时,需要两片显示器分别显示左眼和右眼的内容,配合专门的双目目镜,即可观察到效果逼真的3D影像。应用框图如图 2-8所示,信号时序如图 2-9所示:

  

 

  图 2-8 OLED左右3D显示应用框图

  注:要实现3D显示,必须两片OLED显示器同时工作,单片显示器无法实现3D

  

 

  图 2-9 OLED显示器 3D显示时序示意图

  3. 典型应用配置示例

  3.1. 24bit 444 RGB with DE、逐行扫描、无镜像

SVGA,800×600@60Hz SXGA,1280×1024@60Hz
寄存器地址 寄存器值 备注 寄存器地址 寄存器值 备注
01H 0x34 输入信号模式设置 01H 0x0F 同步信号极性设置①
02H 0x00 同步信号极性设置① 02H 0x43 输入信号模式设置
03H 0x00 Vblank设置② 03H 0x00 Vblank设置②
04H 0x00 Hblank设置② 04H 0x00 Hblank设置②
08H 0x80 信号亮度 0EH 0x80 信号亮度
09H 0x80 信号对比度 0FH 0x80 信号对比度
10H 0x40 设置画面无镜像③ 21H 0x00 设置画面无镜像③
11H 0x02 显示窗口及位置设置 22H,23H④ 0x002 显示窗口及位置设置
12H 0x02 居中显示 24H,25H④ 0x002 居中显示
13H 0x02 匹配分辨率 26H,27H④ 0x002 匹配分辨率
14H 0x02   28H,29H④ 0x002  
16H 0x0C SVGA050 32H 0x0A 建议设置,必须配置
0x80 SVGA060/SVGA097 36H 0x18
19H 0x80 Vcom设置 37H 0x32
20H~42H -- 写Gamma LUTs 11H,12H,13H -- 写R通道Gamma LUTs
10H 0x00 打开显示器 14H,15H,16H -- 写G通道Gamma LUTs
     
      17H,18H,19H -- 写B通道Gamma LUTs
     
      10H 0x03 启动Gamma表更新
      34H,35H④ 0x0A0 Vcom设置
      21H 0x80 打开显示器

 

  注:

  ① 同步信号极性设置应匹配用户系统输出的信号极性,此处均以高电平有效设置;

  ② 有DE信号时Vblank和Hblank可以不设置,无DE信号时必须设置;

  ③ 画面镜像设置,也即扫描方向设置,初始化过称中设置时需注意显示器应处于关闭状态,需要时,再打开显示器。

  ④ 对于双字节配置,要求先写髙字节数据,后写低字节数据,否则写入后无效。

  3.2. 16bit 422 YCbCr with DE、逐行扫描、无镜像

  

SVGA,800×600@60Hz SXGA,1280×1024@60Hz
寄存器地址 寄存器值 备注 寄存器地址 寄存器值 备注
01H 0x04 输入信号模式设置 01H 0x0F 同步信号极性设置
02H 0x00 同步信号极性设置 02H 0x40 输入信号模式设置
03H 0x00 Vblank设置 03H 0x00 Vblank设置
04H 0x00 Hblank设置 04H 0x00 Hblank设置
08H 0x80 信号亮度 0EH 0x80 信号亮度
09H 0x80 信号对比度 0FH 0x80 信号对比度
10H 0x40 设置画面无镜像 21H 0x00 设置画面无镜像
11H 0x02 显示窗口及位置设置 22H,23H 0x002 显示窗口及位置设置
12H 0x02 居中显示 24H,25H 0x002 居中显示
13H 0x02 匹配分辨率 26H,27H 0x002 匹配分辨率
14H 0x02   28H,29H 0x002  
16H 0x0C SVGA050 32H 0x0A 建议设置,必须配置
0x80 SVGA060/SVGA097 36H 0x18
19H 0x80 Vcom设置 37H 0x32
20H~42H -- 写Gamma LUTs 11H,12H,13H -- 写R通道Gamma LUTs
10H 0x00 打开显示器 14H,15H,16H -- 写G通道Gamma LUTs
     
      17H,18H,19H -- 写B通道Gamma LUTs
     
      10H 0x03 启动Gamma表更新
      34H,35H④ 0x0A0 Vcom设置
      21H 0x80 打开显示器

  3.3. 8bit 422 YCbCr、嵌入同步信号、隔行扫描

SVGA,800×600@60Hz SXGA,1280×1024@60Hz
寄存器地址 寄存器值 备注 寄存器地址 寄存器值 备注
01H 0x04 输入信号模式设置 01H 0x0F 同步信号极性设置
02H 0x00 同步信号极性设置 02H 0x40 输入信号模式设置
03H 0x00 Vblank设置 03H 0x00 Vblank设置
04H 0x00 Hblank设置 04H 0x00 Hblank设置
08H 0x80 信号亮度 0EH 0x80 信号亮度
09H 0x80 信号对比度 0FH 0x80 信号对比度
10H 0x40 设置画面无镜像 21H 0x00 设置画面无镜像
11H 0x02 显示窗口及位置设置 22H,23H 0x002 显示窗口及位置设置
12H 0x02 居中显示 24H,25H 0x002 居中显示
13H 0x02 匹配分辨率 26H,27H 0x002 匹配分辨率
14H 0x02   28H,29H 0x002  
16H 0x0C SVGA050 32H 0x0A 建议设置,必须配置
0x80 SVGA060/SVGA097 36H 0x18
19H 0x80 Vcom设置 37H 0x32
20H~42H -- 写Gamma LUTs 11H,12H,13H -- 写R通道Gamma LUTs
10H 0x00 打开显示器 14H,15H,16H -- 写G通道Gamma LUTs
     
      17H,18H,19H -- 写B通道Gamma LUTs
     
      10H 0x03 启动Gamma表更新
      34H,35H④ 0x0A0 Vcom设置
      21H 0x80 打开显示器