外设驱动(一)E-Paper墨水屏扫描显示原理
嵌入式应用笔记
此系列作为产品过程中记录开源库移植和一些遇到的问题,包括有效资源、要点、函数、方法和一些使用心得。
移植
- 开源库移植(一)轻量级环形缓冲区LwRB
驱动
- 驱动应用(一)低功耗墨水屏硬件驱动与扫描原理
前言
- 电子墨水屏EPD,是一种革新信息显示的新方法和技术。像多数传统墨水一样,电子墨水和改变它颜色的线路是可以打印到许多表面的,从弯曲塑料、聚脂膜、纸到布。和传统纸差异是电子墨水在通电时改变颜色,并且可以像传统屏幕那样显示变化的图像。
- 其每个像素点是由单个电子墨水组成,电子墨水可以看成一个个胶囊的样子。每一个胶囊里面有液体电荷,其中正电荷染白色,负电荷染黑色。当我们在一侧给予正负电压,带有电荷的液体就会被分别吸引和排斥。这样,每一个像素点就可以显示白色或者黑色了。
- 本章用122*250像素的2.13inch墨水屏,通过实际的测试,表述其驱动中的扫描原理,该屏内部控制器采用IL3895,注:相同系列,越大的墨水屏指令相同,设置的位数却更多。
墨水屏应用
- 前言
- 1 参考资料
- 2 硬件参数
- 3 硬件驱动
- 4常用SPI指令
- 4.1通常初始化指令
- 4.1.1软件复位0x12
- 4.1.2驱动器输出控制0x01
- 4.1.3边框设置0x3C
- 4.1.4 *扫描原理与像素点写入模式设置0x11
- 4.2通常显示指令
- 4.2.1 扫描像素点地址设置0x44\0x45\0x4E\0x4F
- 5 软件驱动
- 5.1 初始化函数
- 5.2 缓冲区显示函数设计
- 5.2.1 扫描显示原理与指令测试
- 5.3 刷屏函数设计
1 参考资料
原理:
-知乎-全勾教育《墨水屏是什么?墨水屏是否真的护眼?》
-知乎-Topbook《墨水屏真的能保护你的眼睛?》硬件驱动:
立创-墨水屏Eink通用驱动板
立创-并口墨水屏ESP32开发板微雪电子资料
2 硬件参数
参数 | 标记 | 条件 | 最小值 | 典型值 | 最大值 | 单位 |
---|---|---|---|---|---|---|
单接地 | Vss | - | - | 0 | - | V |
逻辑电源电压 | Vci | - | 2.2 | 3.0 | 3.7 | V |
逻辑高电平 | Voh | - | 0.9Vci | - | - | V |
逻辑低电平 | Vol | - | - | - | 0.1Vci | V |
典型功率 | Ptyp | Vci=3.0V | - | 9 | - | mW |
睡眠功率 | Psleep | - | - | 0.003 | - | mW |
睡眠电流 | Isleep | - | - | 20 | - | uA |
深度睡眠电流 | Idsleep | - | - | 1 | - | uA |
VCOM引脚输出 | VCOM | - | - | TBD | - | V |
3 硬件驱动
//施工
4常用SPI指令
每个指令有多个位进行设置,可以类比单片机寄存器配置
4.1通常初始化指令
4.1.1软件复位0x12
将命令参数重置为默认值,在深度睡眠模式(0x10)下不起作用,RAM不重置。
4.1.2驱动器输出控制0x01
读写权限 | D/C | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|---|
W写 | 1 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
默认配置 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
4.1.3边框设置0x3C
//施工
4.1.4 *扫描原理与像素点写入模式设置0x11
指令表:
读写权限 | DC | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|---|
W写 | 1 | - | - | - | - | - | AM | ID1 | ID0 |
默认配置 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
说明
其内部管理了一个地址计数器,自动地在某方向加减地址,通过AM设置方向;ID控制加减。
- ID[0]=“1”时,将数据写入RAM后,X地址计数器将自动增加1。
- ID[0]=“0”时,将数据写入RAM后,X地址计数器会自动减少1。
- ID[1]=“1”时,将数据写入RAM后,Y地址计数器将自动增加1。
- ID[1]=“0”时,将数据写入RAM后,Y地址计数器会自动减少1。
- AM=“0”时,地址计数器在X方向上更新。
- AM=“1”时,地址计数器在Y方向上更新。
- 当选择窗口地址后,数据将以ID[1:0]和AM位指定的方式写入由窗口地址指定的RAM区域。
4.2通常显示指令
4.2.1 扫描像素点地址设置0x44\0x45\0x4E\0x4F
指令表:
0x44 | DC | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
---|---|---|---|---|---|---|---|---|---|
W写 | 1 | - | - | - | A4 | A3 | A2 | A1 | A0 |
W写 | 1 | - | - | - | B4 | B3 | B2 | B1 | B0 |
默认配置0x00 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
默认配置0x12 | - | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 0 |
0x45 | DC | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
W写 | 1 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
W写 | 1 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
默认配置0x00 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
默认配置0xF9 | - | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 1 |
0x4E | DC | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
W写 | 1 | - | - | - | A4 | A3 | A2 | A1 | A0 |
默认配置0x00 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0x4F | DC | D7 | D6 | D5 | D4 | D3 | D2 | D1 | D0 |
W写 | 1 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 |
默认配置0x00 | - | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
说明
0x44、0x45通过地址单元指定窗口地址
- 0x44:A[4:0]设置窗口的X方向起始地址
- 0x44:B[4:0]设置窗口的X方向终止地址
- 0x45:A[7:0]设置窗口的Y方向起始地址
- 0x45:B[7:0]设置窗口的Y方向起始地址
0x4E、0x4F设置RAM地址计数器的初值
- 0x4E:A[4:0]设置当前RAM地址X方向计数器的值
- 0x4F:A[7:0]设置当前RAM地址Y方向计数器的值
5 软件驱动
5.1 初始化函数
5.2 缓冲区显示函数设计
5.2.1 扫描显示原理与指令测试
这里非常重要,由于在使用过程中发现手册可能描述的不太清楚,于是测试程序写入同一个数组条件下,更改配置,附上效果图。
屏幕坐标系
该坐标系X轴总宽为0x0f,即16字节(128像素),其中边框占6像素。
一段测试代码
墨水屏像素点为一位,0为黑色,1为白色
//实验数组,先写入一段40像素黑线,空白8像素,黑线16像素,空8像素,黑线24像素,空16像素,黑线56像素,
uint8_t einkbmp[]={0X00,0X00,0X00,0X00,0X00,0XFF,0X00,0X00,0XFF,0X00,0X00,0X00,0XFF,0XFF,0X00,0X00,
0X00,0X00,0X00,0X00,0X00,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,
/* 省略 */}//初始化函数中调整配置
void EINK_INIT(void)
{/* 省略初始化函数 */EINK_WRITECOM(0x11); // 写入扫描方向控制指令EINK_WRITEDATA(0x01); // 0b0000 0001写入配置,调整该设置/* 省略初始化函数 */
}
//实验函数
void TEST_IMG()
{uint16_t pcnt = 0;// 复位或保存提示字节序号READBUSY();//判忙,显示屏BUSY线不占线才往下执行,否则报错SetpointXY(0,0x0f,0xf9,0);//设置起始、终点坐标EINK_WRITECOM(0x24);// 复位或保存提示字节序号 for(uint16_t col=0; col<250; col++) // 总共250 GATE列 // send 128x250bits ram 2D13for(uint16_t row=0; row<16; row++,pcnt++) // 总共128 SOURCE行,每个像素1bit,即 128/8=16 字节 EINK_WRITEDATA(einkbmp[pcnt]);//此处省略显示刷屏函数
}
实际效果程序写入显示效果
实践得真知
扫描设置\窗口坐标 | (0.0) | (0.F9) | (0F.0) | (0F.F9) |
AM+ID[0:1] =000,窗口设置为(0F,F9)到(0,0) | 从该点写入,应该左上只有一个点,然后越界,很奇怪有5个像素 | 从该点写入,应该左下只有一个点,然后越界,很奇怪有5个像素 | 从该点写入会越界,故第二行会显示在最下面 | 从原点写入会越界,故第二行会显示在最下面 |
AM+ID[0:1] =001,窗口设置为(0,F9)到(0F,0) | 从原点写入会越界,故第二行会显示在最下面 | 从该点写入会Y轴递减,X递增,所以顺序显示 | 从该点写入会越界,所以右上有一个像素点 | 从该点写入会越界,所以右下有一个像素点 |
AM+ID[0:1] =010 | 从原点写入会越界,故第二行会显示在最下面 | 从该点写入会Y轴递减,X递增,所以顺序显示 | 从该点写入和预期相符 | 从该点写入会越界,所以右下有一个像素点 |
AM+ID[0:1] =011 | row 2, cell 2 | row 2, cell 1 | row 2, cell 2 | row 2, cell 1 |
AM+ID[0:1] =100 | row 2, cell 2 | row 2, cell 1 | row 2, cell 2 | row 2, cell 1 |
AM+ID[0:1] =101 | row 2, cell 2 | row 2, cell 1 | row 2, cell 2 | row 2, cell 1 |
AM+ID[0:1] =110 | row 2, cell 2 | row 2, cell 1 | row 2, cell 2 | row 2, cell 1 |
AM+ID[0:1] =111 | 从原点写入出现X方向显示为为一个字节 | 从该点写入会Y轴递减,X递增,所以顺序显示 | 从该点写入和预期相符 | 从该点写入会越界,所以右下有一个像素点 |
5.3 刷屏函数设计
//施工
外设驱动(一)E-Paper墨水屏扫描显示原理相关推荐
- 从点阵到OLED屏幕——动态扫描显示原理
在我们买电脑.手机或者电视时,厂家常常会宣传他们的产品用的是什么屏幕,分辨率达到2K或者4K,色彩有多鲜艳,刷新率有多高. 这些参数到底是什么意思?屏幕到底是如何显示出我们想要的文字.图片以及视频呢? ...
- 2.9寸墨水屏制作互联网时钟填坑手记
制作要求:显示公历日期/农历日期/天气/风向/温度/节日/提醒(屏幕较小,先显示这么多).派加电即可显示,派正常关机屏幕白 屏(休眠)以保护墨水屏,天气相关信息每12小时更新一次.天气信息来源于 ...
- AIR32F103(十一) 在AIR32F103上移植微雪墨水屏驱动
目录 AIR32F103(一) 合宙AIR32F103CBT6开发板上手报告 AIR32F103(二) Linux环境和LibOpenCM3项目模板 AIR32F103(三) Linux环境基于标准外 ...
- 使用ESP8266驱动微雪e-paer2.13墨水屏
使用ESP8266驱动微雪e-paer墨水屏 前些时候使用Arduino nona小板子,成功驱动了微雪e-paer2.13墨水屏,但由于Arduino nona小板子内存小.主频低,虽然可以显示,但 ...
- 树莓派 java 驱动 微雪 墨水屏 16灰阶 LUT
16灰度阶梯展示(未优化版) 下图为16灰阶梯度未优化版,可以看出,最黑的黑色颜色不够黑,且往右边越黑,灰阶越不明显,还有很大的优化空间,后续再聊优化. B站视频指导 视频指导:视频地址 https: ...
- 树莓派 java 驱动 4.2寸 微雪 墨水屏 天气 预报
结果展示 我做的这个很简陋,需要插电,自己玩玩还行,效果见下: B站视频指导 视频指导:视频地址 https://www.bilibili.com/video/BV1bQ4y1Z7xL 实现说明 我一 ...
- 【N32G457】基于RT-Thread和N32G457的墨水屏日历
本文是RT-Thread用户@xusiwei1236 原创发布,是用于参加RT-Thread与国民技术联手推出N32G457 RT-Thread设计大赛,原文:https://club.rt-thre ...
- 【项目分享】基于AB32和RT-Thread的墨水屏智能日历
基于AB32VG1的墨水屏智能日历 项目背景 本项目是[RT-Thread x RISC-V 应用创新大赛]参赛项目之一,大赛活动页面: RT-Thread X RISC-V 创新应用设计大赛 (el ...
- 【墨水屏】1.54寸墨水屏调试记录
某宝某店墨水屏挺便宜,买了几个尝试着使用以下. 同时买了微雪的ESP32墨水屏专用驱动板. 由于1.54寸的小屏节假日期间一直没有发货,所以先用了手头的7.5寸屏测试了一下EPS32驱动板,功能一切正 ...
最新文章
- 做图形处理Linux小型主机,8个优秀的linux图形图像工具
- service 与chkconfig
- 三星android获取root权限,三星G9250(S6 Edge公开版全网通 Android 5.1)获取ROOT权限详解教程...
- 启明云端方案分享| ESP32-C3智能网关应用解决方案
- javax.naming.NameNotFoundException:
- Stack Overflow 2016 最新架构探秘
- mysql explain 为空_车祸现场!我的MySQL千万级数据表选错索引了!
- 论赵泽彬多终端应⽤下的架构设计
- 可视化大屏设计指南,附20份可直接套用的实用模板
- extjs引入html,ExtJs教程第一集 搭建ext环境后的第一个hello World
- 物联那点事儿之自制网络温湿度计(arduino+点灯科技篇)
- 浅析SkipList跳跃表原理及代码实现
- 自建网络加速服务器,自建DNS缓存服务器加快上网速度
- “一点”也不能忍 | 精准检测让屏幕缺陷无所遁形
- MES系统多少钱?企业需要什么样的MES系统?
- GIC/ITS代码分析(3)ITS驱动初始化
- Java中的多线程安全问题
- Python统计学:独立样本t检验~均值差的检验
- 密钥远程登录与scp
- 【bzoj3295】动态逆序对
热门文章
- 什么是面向对象编程(OOP)?
- django3.x+DRF+simpleui+uniapp打造自己的任务推广(兼职、悬赏)平台
- win10如何修改远程桌面的默认端口_win10远程桌面端口的更改办法
- 北京化工大学计算机复试面试题,北京化工大学综合素质测试面试题历年总结
- 华清远见上海中心22071班--11.19作业
- 倪海厦《天纪》「自参」
- 你可能不需要担心,AI对你的工作造成威胁:万字长文解读科技革命与人类发展
- Qt Design Studio安装教程
- Unity Ugui 详解 Content Size Fitter 和 Horizontal Layout Group 的使用
- 浅析 ContentSizeFitter 以及 Horizontal Layout Group 嵌套问题