树莓派 java 驱动 微雪 墨水屏 16灰阶 LUT

16灰度阶梯展示(未优化版)

  1. 下图为16灰阶梯度未优化版,可以看出,最黑的黑色颜色不够黑,且往右边越黑,灰阶越不明显,还有很大的优化空间,后续再聊优化。
    在这里插入图片描述

B站视频指导

视频指导:视频地址
https://www.bilibili.com/video/BV1bQ4y1Z7xL

LUT

前言

  1. 本文先不直接讲输出16灰阶的代码,而是讲讲16灰阶实现的基础——波形
  2. 一堆资料讲到可编程波形,看得都不知道啥意思,为啥要可编程,而且微雪墨水屏的dataSheet(数据手册)也不提,只是写到LUT寄存器,搞得好像LUT是个众所周知的东西。可是,你知道LUT是个什么东西么?
  3. 其实,我也只是模里模糊知道这个LUT是干啥用的,我觉得这大概够我理解如何驱动树莓派,展示16灰阶图片了
  4. 本文有些细节处可能会理解不对,如果大侠发现错误了,请指正,我马上改。目的是让更多的同学能一起玩墨水屏。

概念

  1. LUT指显示查找表(Look-Up-Table),具体概念先自己百度一下,这里不多提。
  2. 百度了一堆资料,还是不知道墨水屏的这个LUT是干啥的吧,正常,下边进入正题。

墨水屏的LUT

  1. 我使用的是4.2寸的墨水屏,分辨率为400x300,相当于有400x300个像素,即400x300个墨水胶囊,每个墨水胶囊的示例如下(百度来的图)
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FU7uRZzo-1594800362744)(_v_images/20200715102822368_11932.jpg =350x)]
  2. 我们先记住上图中的几个最关键的内容
    1. 透明的顶层电极薄膜,叫做公共端,英语叫做common。在数据手册中,公共端的电压,表示为Vcom,特别注意这个Vcom。数据手册中多次提到的就是他。
    2. 黑色粒子——负电
    3. 白色粒子——正电
    4. 我们的眼睛,从上往下看
  3. 以上,得知,Vcom使用正电,正负电相吸原理,黑色粒子就贴到上层。Vcom使用负电,白色粒子贴到上层
  4. 再以上,得知,Vcom使用正电,显示黑色。Vcom负电,显示白色
  5. 假设,Vcom上使用电压1秒钟,黑色或白色粒子完全可以抵达顶部或底部,毕竟粒子在胶囊中移动这小段距离也需要时间。
  6. 再假设,Vcom上使用电压0.5秒钟,粒子移动到一半。Vcom上使用电压0.n秒,粒子移动的距离为0.n 倍顶部到底部的距离。
  7. 根据以上假设,考虑以下场景:

Vcom场景

  1. 正电1s,负电2s,正电2s,负电2秒,正电0.5秒,断电(断电即稳态)。对应的墨水屏展示情况为:

    1. 黑色1s,白色2s,黑色2s,白色2s,0.5倍的黑色(相当于是灰色,因为只给了0.5秒的正电,黑色白色的粒子只跑到一半,混在一起,肉眼看到就是灰色),断电颜色保持。
    2. 为啥要一会正电一会负电呢,我理解,是让黑白粒子上下抖动一下,相当于是清屏,使墨水胶囊能展示更干净纯粹的黑色或白色。
    3. 以上,就是一个Vcom波形,这个波形,最终展示一个0.5倍的黑色——即灰色
  2. 在场景1波形得到的结果基础上。再对墨水屏上电,给另外一个波形,这个波形非常简单:0.2秒的正电,断电。对应墨水屏展示的情况为:

    1. 0.7倍的黑色(相当于0.5倍的黑色+0.2倍的黑色),断电颜色保持。
  3. 忽略场景2,在场景1波形得到的结果基础上。再对墨水屏上电,在给一个波形,这个波形也简单:0.3秒的负电,断电。对应墨水屏展示的情况为:

    1. 0.2倍的黑色(相当于0.5倍的黑色+0.3倍的白色=0.5倍的黑色-0.3倍的黑色 = 0.2倍的黑色,这里只是为了给大家讲明白原理,实际上不会这么精确),断电颜色保持。
  4. 以上,3个场景,都是Vcom波形,大家对波形的理解一定要开放:

    1. 波形可以是多个正负电结合,持续一段时间
    2. 波形可以是单个正电或负电,持续一段时间
    3. 波形甚至可以是不施加电压,也算是一个波形。

Vcom场景分析结论

  1. 根据以上3个场景,可以推理出其他色阶的展示。灰阶,无非就是波形的产物。
  2. 只要波形给到位了可以一把显示任意灰阶(如场景1)
  3. 在波形叠加的情况下,也可以从任意灰阶,直接跳到另一灰阶(如场景2、场景3)

实际LUT波形寄存器

  1. 我们先看下4.2寸屏的官方数据手册,具体有5个Vcom波形,在看过一堆其他的材料的基础上,讲讲我对这几个波形的理解,如果说错了,请指正。

    1. VCOM LUT(LUTC):我认为,这个是清屏的时候需要用到的波形,实际上,我也没完全搞清楚这个波形的作用是什么,感觉对应以上提到的场景1
    2. W2W LUT(LUTWW):w即white,白色。白色到白色的波形,相当于以上场景2(场景2为黑色到黑色的波形)的变种
    3. B2W LUT(LUTBW):b即black,黑色。黑色到白色的波形,相当于以上场景3.
    4. W2B LUT(LUTWB):白色到黑色的波形,相当于以上场景3(场景3为黑色到白色的波形)的变种
    5. B2B LUT(LUTBB):黑色到黑色的波形,相当于以上场景2.
  2. 这5个波形寄存器,其实数据形式(数据形式即每个字节分别代表什么意思)是一样的。但是微雪4.2寸墨水屏中,没有明确给出具体的数据形式该怎么传。所以只能看其他材料。

  3. 首先,我们要知道4.2寸屏幕的IC(即驱动芯片),这个数据手册中也没有给出,不知道微雪官方是出于什么考虑没有给出。我通过科学上网(如果大家需要看,也需要通过科学上网),我是视频地址,以下为视频的概要(芯片的数据手册均可以百度下载到)

    1. 树莓派4.2存屏幕的驱动芯片为IL0398
    2. 但是,IL0398材料并没明确说明波形数据形式如何
    3. 好在,IL0373芯片材料,同IL0398在波形的数据形式上,应该是一致的
    4. IL0373芯片材料中,对Vcom波形的讲解见下:
      1. 20h为寄存器地址,需要以写指令形式写入,对应下表的bytes 1(注意,这里不是从0开始)
      2. bytes 2到7,表示一个波形的一部分,我就把他称为子波形吧。
      3. 一共可以对7个子波形设置,最终构成一个完整的波形。所以橙色这个bytes 2-7 repeated 7 times,说的就是bytes 2-7是一个子波形,一共7个波形的意思。最初看数据手册的时候,心里直骂:“啥意思!什么玩意!”
      4. 下边是对子波形的设置简介:
        1. bytes 2 字节讲解
          1. 这个byte可以设置4个波形,第一个波形使用D7 D6指定,第二个波形使用D5 D4指定,第三个波形D3 D2,第四个波形D1 D0.
          2. 先把VCM_DC理解为电压0
          3. 见以下数据手册截图,00b为VCM_DC,01b为VDH+VCM_DC(VCOMH)其实就是给VCOM正电,10b为VDL+VCM_DC(VCOML)其实就是给VCOM负电,11b为Floating。
          4. 在我的理解,00b和11b电压正常情况下,黑白粒子位置会保持不变,灰度不变。
          5. 如果VCOM使用01b(正电),结合前边的内容理解,屏幕会更黑
          6. 如果VCOM使用10b(负电),屏幕会更白
          7. 以上更黑或更白,不需要专门用脑袋记,知道这个概念就好[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8oPGo4uQ-1594800362747)(_v_images/20200715115125078_16309.jpg)]
        2. bytes 3 字节:指定第一个Vcom电压(由byte2的D7 D6指定)的持续时长,单位应该为控制芯片的时钟周期
        3. bytes 4 字节:指定第二个Vcom电压(由byte2的D5 D4指定)的持续时长,单位应该为控制芯片的时钟周期
        4. bytes 5 字节:指定第三个Vcom电压(由byte2的D3 D2指定)的持续时长,单位应该为控制芯片的时钟周期
        5. bytes 6 字节:指定第四个Vcom电压(由byte2的D1 D0指定)的持续时长,单位应该为控制芯片的时钟周期
        6. bytes 7 字节:bytes2到bytes6做出的波形,要重复几次
          1. 因为VCOM LUT在4.2寸屏的使用上好像作用不大(我认为的),比如官方例程截图(官方例程的bytes 1已经由代码send_command写入,所以截图中的数据是从bytes 2开始)
          2. 最左侧一列的上边7个,就是表示波形定义,全为0x00,即4个电压全是00b指定的电压,即VCM_DC,可理解为电压0
          3. 以下截图,可以看出,只指定了第一个波形执行1次,其他的波形执行0次。这个VCOM波形我理解加不加对屏幕没有啥灰度上的变化。
            [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UTofH4oE-1594800362751)(_v_images/20200715150733958_8937.jpg)]
        7. bytes2-bytes7定义第一个子波形。
        8. bytes8-bytes13定义另一个子波形。等等等等。一共定义7个子波形,共同拼接成一整个波形。
        9. bytes44,bytes45我也没搞懂是干啥用的,知道的同学还请指教,我看例程里边直接设置为0了。具体数据手册的说明见下:
          在这里插入图片描述
    5. IL0373芯片材料中,对LUTWW波形的讲解见下,与VCOM LUT波形大同小异,就不专门再说一遍了。
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gpiway2w-1594800362755)(_v_images/20200715153356542_25648.png)]

墨水屏LUT波形玩法

  1. 上边讲了这许多,相信很多同学对这个LUT已经有概念了吧。
  2. 那怎么实现灰阶呢,大家应该也有概念了吧。
  3. 假如(仅仅是假如,这个值大家可以自己去调,都能得到对应屏幕的理想波形),VCOM上15个时钟周期的正电,显示完全的黑
    1. 将黑分为16级,在屏幕为纯白的情况下
    2. 显示第15级黑,则需在VCOM上给14个时钟周期的正电
    3. 显示第14级黑,则需在VCOM上给13个时钟周期的正电
    4. 显示第13级黑,则需在VCOM上给12个时钟周期的正电

      n. 显示白,则需在VCOM上给0个时钟周期的正电
  4. 所以,墨水屏上的灰度,可以对这个Vcom施加不同时长的正负电,以实现灰度。

结语

  1. 关于本文,我认为,大的概念上是没错的,相信大家看完,也至少模糊知道墨水屏LUT的原理
  2. 小的概念上,包括VCOM LUT的bytes44 bytes45我也没搞懂具体是干啥的,希望懂的同学不吝赐教,共同成长。
  • 24
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 13
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值