美文网首页Luat开源硬件
Luat实践 - Air202驱动LCD12864 (UC170

Luat实践 - Air202驱动LCD12864 (UC170

作者: Luat物联网通信模块 | 来源:发表于2018-03-27 12:15 被阅读45次

    本实践目标

    • 熟悉air202的SPI API (SPI目前官方仅支持LCD驱动), 这也是相较air200的升级特性
    • 在air202目前支持的LCD12864基础上,查验是否可以支持同类型驱动IC
    • 目前选择目标LCD为 UC1701X为目标模块,该LCD分辨率为128X64,无字库, air202固件自带字库,符合本场景
    • 点亮LCD,并做实现数字的时钟显示,例如 08-21 11:22:31

    相关资料

    模块连接

    • air202引脚描述
    SPI接口
    管脚名 管脚号 I/O
    SPI1_CS 2 O
    SPI1_CLK 3 O
    SPI1_DO 4 O
    SPI1_DI 5 I
    LCD RESET
    管脚名 管脚号 I/O
    UART1_CTS 6 O
    供电
    管脚名 管脚号 I/O
    VDDIO 24 O

    ** 输出 2.8V 10mA

    • LCD12864引脚描述
      | 管脚名 | 管脚号 | I/O |
      | ------------ | ------------ | ------------ |
      | 背光LEDA |5|I|
      | 地VSS |6|I|
      | 电源VDD |7|I|
      | 串行时钟SCLK |8|I|
      | 串行数据SDA |9|I|
      | 寄存器选择RS |10|I|
      | 复位RESET |11|I|
      | 片选CS |12|I|

    • 连接关系
      | LCD12864 | AIR202 |
      | ------------ | ------------ |
      | SCK | SPI_CLK |
      | SDA | SPI_DO |
      |CS|SPI_CS|
      |GND|GND|
      |RS|SPI_DI|
      |VDD|VDDIO|
      |RST|UART1_CTS|

    • 连接示意图


      image

    要点分析及其说明

    • 固件

      请使用带UI功能的固件:Luat_VXXXX_Air202_UI.lod:支持SPI接口的LCD功能
      因为SPI+LCD的特性较新,为确保更稳定,请使用最新版本的固件,目前使用V0007测试运行了16小时+也很稳定

    • 供电

      LCD 供电电压极限参数为 2.4V -- 3.6V, air202的 VDDIO 输出2.8v, 可以满足需求

    • 通讯

      LCD 支持SPI通讯,与air202通过SPI进行连接

    • 关键寄存器

      通过与ST7567的datasheet比较,两款LCD的寄存器职能非常接近,小差异的地方是起始行,以及寄存器的填充顺序。这个也是我们在initcmd中需要调整的地方

      0xE2, 0x2F, 0x23, 0x81, 0xA2, 0xC8, 0xA0, 0x40, 0xAF

      image
    • 背光

      该型号液晶自带LED背光源,正常工作电流为 : 24-60mA, LED灯共3颗,每颗灯8-20mA
      该光源电流需求超过了VDDIO的输出,所以直接接上的话会导致闪烁现象,可能实际使用中需要外部电源来为背光供电。

    • API描述(disp)

      disp.init(para)

      初始化SPI的lcd驱动,主要是为驱动IC设置关键寄存器,其中para中指定initcmd等关键参数
      这个功能还未官方release doc, 估计还有调整的可能性,我们使用可主要关注initcmd部分

      disp.puttext("text",x,y)

      在LCD(可能为缓存寄存器)上输出文本,固件自带字库,所以可以直接使用中文。
      其中x,y 为起点坐标,一般坐标系为左上角为起点,但根据驱动IC不同,可能会有偏移量的差异
      例如本驱动IC目前需要将Y轴偏移32行,这个可能会在后期的固件更新中统一为0

      disp.putimage("img.bmp",0,0)

      在LCD(可能为缓存寄存器)上输出图像,应该只支持bmp类型,x,y为起点坐标

      disp.clear()

      屏幕清除操作

      disp.update()

      将LCD的缓存寄存器中数据更新到屏幕上,这个应该是刷新友好的,可以一次性构造好本屏幕所有内容,然后进行一次刷新操作。

    • 初始化

      初始化流程,通过查看air202的demo/ui/mono_lcd/lcd_st7567.lua
      并且比较
      st7567 datasheet page 21 : 8. INSTRUCTION TABLE
      UC1701X datasheet page 7 : 7.1 指令表

      可以发现他们的寄存器参数以及用途非常相近,主要的差别主要应是init时刻寄存器的填充顺序。
      我们推测initcmd中的参数使用方式就是在disp.init时刻,依序通过SPI向LCD送出的初始化寄存器值

      继续比较:
      st7567 datasheet page 29 : 10. OPERATION FLOW
      UC1701X datasheet page 14 : LCD模块初始化

      我们可以明确不同驱动IC需要送入的寄存器值以及顺序,以此推断,将初始化的寄存器参数调整为以下所示,即可正常点亮LCD :

      0xE2, 0x2F, 0x23, 0x81, 0xA2, 0xC8, 0xA0, 0x40, 0xAF

      具体可见(关键寄存器

    实验效果图(图片,视频)

    image

    http://v.youku.com/v_show/id_XMjk4MzY5MzQ0MA==.html

    相关文章

      网友评论

        本文标题:Luat实践 - Air202驱动LCD12864 (UC170

        本文链接:https://www.haomeiwen.com/subject/hpvjcftx.html