通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整

1、墨水屏玩家遇到的问题 

       玩儿墨水屏电子价签的朋友,应该有不少人都遇到了一个同样的问题,同一个尺寸的屏幕,型号相同只是后缀不同,有的屏幕就不能更新时间。把程序改为每分钟全刷,就可以走时。但是每分钟都忽闪忽闪的太引人注意,也很费电。不是解决办法。

后来发现,可能是屏幕厂家在相同型号的屏幕中混用了不同的驱动芯片。下载某些屏幕的历史版本说明书,可以看到驱动芯片可能不同。但是有些屏幕根本查不到厂家和资料。那就只能靠经验猜了,反正测试也方便,本文讲了LUT的移植方式,把几种芯片都测试一遍,总能碰对的。

  那我们就正式开始吧!

2、学习资料

既然是屏幕的驱动芯片不同,现在关键问题就是应该如何理解及修改局刷代码中的LUT。

先来学习一下我收藏的三个网页,这三篇文章一定要先看看。因为一些基础的原理,比如墨水屏胶囊的结构,显示不同颜色的原理,本文中没讲。看完了这些文章再看一下SSD1680与SSD1675A的规格书的LUT那一章节。

1、Play with 2.13 inch E-Ink display | 猫·仁波切

2、墨水屏电子标签通过修改lut并多层叠堆实现灰阶_墨水屏 lut-CSDN博客

3、树莓派 java 驱动 微雪 墨水屏 16灰阶 LUT_墨水屏 lut-CSDN博客

4、SSD1680与SSD1675A的规格书,第一次写文章不会上传附件,需自行下载

资料看完了,如果你懂LUT如何设置了,那就不用往下看了,因为你对LUT的理解绝对比我强得多。

本文用到了以上资料及CC2640etg开源代码,如有侵权请联系4782907@qq.com,删除文章。也欢迎大家指正文中的错误。

3、LUT的格式及分区

看完网上的介绍后,再来看驱动芯片规格书,在电脑上看不方便,就打印出来,反复前后对比。但是完全不知道规格书在说什么,感觉规格书里的每一行字都透露出蔑视。对于一个药学专业的人来说简直就是天书。两个月后,我放弃了这个方式,我想是否能将现有代码中的LUT与规格书进行对比,大概了解LUT的原理。

下面讲一下我对LUT的理解。

图片[1]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

以这个代码为例,为了方便理解我把这个LUT分为三部分。

第一部分是波形,一般都是5行,前四行分别驱动不同颜色变化的情况,第五行为VCOM电压,这里都可以不调整,只要知道每一列的B、W(白、黑)写入是一样多的,都是一个或者都是两个。还有第一部分的每一个字符代表一个波形ABCD四个时间的电压,这个比较烧脑,后面再讲。

第二部分为循环次数,A、B、C、D分别是第一部分说的电压的持续时间(频率周期的个数)数据为0时跳过。SRAB是AB的小循环次数,RP为前面几个字符的大循环次数,数据为零时循环一次。

第三部分,为参数部分,这些参数可以和LUT一起写入,也可以直接在代码里进行设置。

具体每一个字符可以写入什么内容也放到后面再讲。

4、如何根据规格书编写LUT

图片[2]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

上面这张图,黑白红每一个颜色在第一部分占一行,一共5行。每一行12个字符,所以第一部分是5行12列。

浅蓝和白相间的部分在第二部分,每一个颜色占一行,每行7个字符,共12行,可以看到第一部分有多少列,第二部分就有多少行。后面讲运行方式及移植时会讲到这一点。

图片[3]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

图片[4]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

上面两张图是第三部分的内容,只要按顺序排列在第三部分,分多少行都无所谓,也可以在后面代码部分直接写入这些参数。

5、LUT是如何运行的。

图片[5]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

如规格书,看这个图我们会认为LUT从11开始一直运行到0,然后再运行第二部分,那就被这个图带偏了,很难理解这个LUT表了。

图片[6]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

它其实是这样的,加载第一部分的1,然后按照第二部分第一行中设置的周期参数运行。然后加载第一部分的2,按照第二部分的第二行中的周期运行,以此类推。

但是第一部分的每一列,同时加载,还是一个一个加载,不太清楚,我认为应该是一个一个加载,因为第一部分每一个字符都代表一个波形的四个阶段。(后面讲)

6、LUT的关键参数部分及如何移植代码。

图片[7]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

通过上面介绍可知,SSD1680这个局刷LUT只有红框内的一部分起作用,其它位置只是维持LUT的结构,保证位数不变。

图片[8]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

我们再来看一下上图,SSD1675A的规格书。

从规格书中,我们可以看出,SSD1675A的第一部分有5行,每一行7个字符,那么就是5行7列。

第二部分肯定就会是7行,每一行ABCD加上RP一共5个字符。

第三部分不管它,直接写入到后面代码里。

图片[9]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

那么我们从SSD1680往SSD1675A移植,只需要删除红框部分,让LUT位数一样。另外SSD1680的循环次数AB后面有一个SRAB,代表AB的小循环,SSD1675A中没有小循环,所以要放到SSD1675A 中的RP位置(第二部分第五列),由于BCD都没有数字,其实最终效果是一样的。

下面就是最终的移植代码。

图片[10]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

7、LUT的载入

图片[11]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

图片[12]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

图片[13]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

如上图:规格书中写了一二部分的LUT位数及各部分的驱动命令,加载方式可以参照图二,一二部分共70个字符,通过命令(0x32)一起加载(i<69还是70这个影响不大),第三部分可以直接在命令(如:0x03、0x04)后面写入。也可以参照图三,告诉程序想加载的内容在LUT的第几位。第三部分的参数设置多少需要参考规格书及原程序。

8、为什么第一部分一个字符可以代表一个波形?

图片[14]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

上图是1个波形,它分为ABCD4个阶段 ,VSH1、VSH2等代表每个阶段的电压。

图片[15]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

规格书里讲到,这四个电压,分别用二进制的00、01、10、11表示。

图片[16]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

再来看代码,这里是将一个16进制的数字转换为四个二进制数字,每一个二进制代表一个电压。所以第一部分的每个字符能代表一个波形,真是佩服程序员的脑回路。

所以第一部分的数值不是随意设置的,它一定是四个电压的组合,转换来的字符。比如代码里的B—作用和0X40是一样的。

这里讲一道附加题:为什么这个代码的第二部分只有第一列有数值,它不应该是控制一个波形四个阶段的周期吗?我们看一下B—和W—转换为二级制代码后的后三位是什么,对,后三位都是VSS即0b00,所以这里加不加循环没有意义。

9、LUT的微调

下面放一些微调效果的图片。图片[17]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

图片[18]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

如上图代码及照片,删掉第二部分第一行,其实影响不大,残影重了一些。

图片[19]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

图片[20]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

如上图代码及照片,删掉更多的重复次数,残影变严重了。

图片[21]-通过具体案例介绍墨水屏的LUT、不同驱动芯片间的LUT移植及局刷参数调整-ELink墨水屏电子纸社区-FPGA CPLD-ChipDebug

熟悉了这个LUT,我们甚至可以减少全刷的闪屏次数,把局刷的代码也加进去(第一部分的5-6列及第二部分的5-6行),实现每分钟都轻闪一下更新时间。

10、结束语

希望我的白话版LUT介绍能让更多的爱好者了解墨水屏的LUT,在局刷方面玩儿出新花样。

请登录后发表评论

    没有回复内容