mirror of
https://github.com/jam422470459/EPD-nRF52-hema213.git
synced 2025-12-06 08:32:54 +08:00
UC8176 的数据手册中不包含 LUT 相关指令的说明,但是 UC8151 的手册里有,且格式是一样的,故把 UC8151 的手册也放了上来。
OTP 目录为从屏幕中读取出的 OTP 数据:
bw.txt: 黑白屏3c.txt: 黑白红三色屏
可从 OTP 数据中提取屏幕内置的 LUT 波形作为参考,以方便自定义 LUT 波形。
以下是从 OTP 中提取出的 LUT 波形例子(均已测试和本项目支持的 2 个屏幕不加载外部 LUT 时在 20 度左右室温下显示效果一致):
黑白屏:
// OTP location: 0x300
static const unsigned char LUTC[] = {
0x60, 0x19, 0x19, 0x00, 0x00, 0x01,
0x00, 0x19, 0x19, 0x00, 0x00, 0x02,
0x00, 0x19, 0x00, 0x00, 0x00, 0x01,
0x00, 0x25, 0x26, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00,
};
static const unsigned char LUTWW[] = {
0x50, 0x19, 0x19, 0x00, 0x00, 0x01,
0x90, 0x19, 0x19, 0x00, 0x00, 0x02,
0x40, 0x19, 0x00, 0x00, 0x00, 0x01,
0xA0, 0x25, 0x26, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const unsigned char LUTBW[] = {
0x50, 0x19, 0x19, 0x00, 0x00, 0x01,
0x90, 0x19, 0x19, 0x00, 0x00, 0x02,
0x40, 0x19, 0x00, 0x00, 0x00, 0x01,
0xA0, 0x25, 0x26, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const unsigned char LUTWB[] = {
0xA0, 0x19, 0x19, 0x00, 0x00, 0x01,
0x90, 0x19, 0x19, 0x00, 0x00, 0x02,
0x80, 0x19, 0x00, 0x00, 0x00, 0x01,
0x50, 0x25, 0x26, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
};
static const unsigned char LUTBB[] = {
0xA0, 0x19, 0x19, 0x00, 0x00, 0x01,
0x90, 0x19, 0x19, 0x00, 0x00, 0x02,
0x80, 0x19, 0x00, 0x00, 0x00, 0x01,
0x50, 0x25, 0x26, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0xFF, 0x00,
};
三色屏:
// OTP location: 0x400
static const unsigned char LUTC[] = {
0x00, 0x3F, 0x01, 0x3F, 0x05, 0x01,
0x48, 0x78, 0x01, 0x78, 0x01, 0x01,
0x48, 0x10, 0x01, 0x10, 0x01, 0x0B,
0x48, 0x78, 0x01, 0x78, 0x01, 0x01,
0x40, 0x03, 0x01, 0x21, 0x0A, 0x04,
0x00, 0x04, 0x01, 0x17, 0x0A, 0x09,
0x00, 0x07, 0x90, 0x07, 0x05, 0x01,
0x00, 0x00,
};
static const unsigned char LUTWW[] = {
0x44, 0x3F, 0x3F, 0x3F, 0x05, 0x01,
0x84, 0x78, 0x01, 0x78, 0x01, 0x01,
0x88, 0x10, 0x01, 0x10, 0x01, 0x0B,
0x40, 0x78, 0x01, 0x78, 0x01, 0x01,
0x00, 0x03, 0x01, 0x21, 0x0A, 0x04,
0x00, 0x04, 0x01, 0x17, 0x0A, 0x09,
0x88, 0x07, 0x01, 0x07, 0x05, 0x01,
};
static const unsigned char LUTR[] = {
0x48, 0x3F, 0x3F, 0x3F, 0x05, 0x01,
0x84, 0x78, 0x01, 0x78, 0x01, 0x01,
0x84, 0x10, 0x01, 0x10, 0x01, 0x0B,
0x8C, 0x78, 0x01, 0x78, 0x01, 0x01,
0x8C, 0x03, 0x01, 0x21, 0x0A, 0x04,
0xCC, 0x04, 0x01, 0x17, 0x0A, 0x09,
0x90, 0x07, 0x01, 0x07, 0x05, 0x01,
};
static const unsigned char LUTW[] = {
0x44, 0x3F, 0x3F, 0x3F, 0x05, 0x01,
0x84, 0x78, 0x01, 0x78, 0x01, 0x01,
0x88, 0x10, 0x01, 0x10, 0x01, 0x0B,
0x40, 0x78, 0x01, 0x78, 0x01, 0x01,
0x00, 0x03, 0x01, 0x21, 0x0A, 0x04,
0x00, 0x04, 0x01, 0x17, 0x0A, 0x09,
0x90, 0x07, 0x01, 0x07, 0x05, 0x01,
};
static const unsigned char LUTB[] = {
0x48, 0x3F, 0x3F, 0x3F, 0x05, 0x01,
0x84, 0x78, 0x01, 0x78, 0x01, 0x01,
0x84, 0x10, 0x01, 0x10, 0x01, 0x0B,
0x40, 0x78, 0x01, 0x78, 0x01, 0x01,
0x00, 0x03, 0x01, 0x21, 0x0A, 0x04,
0x00, 0x04, 0x01, 0x17, 0x0A, 0x09,
0xFF, 0x07, 0x01, 0x07, 0x05, 0x01,
};
使用以下 LUT 且把驱动设置为 BW 模式可把三色屏当作黑白屏使用,刷新时间能从 15s 降到 2-3s 左右:
- 有待继续优化,显示效果比默认三色的 LUT 淡一些
- 刷新时间应该还有优化的空间,理论上来说应该还可以做一个支持局刷的 LUT
// OTP location: 0x200, from bw.txt
static const unsigned char LUTC[] = {
0x00, 0x28, 0x28, 0x00, 0x00, 0x01,
0x60, 0x32, 0x32, 0x00, 0x00, 0x02,
0x00, 0x14, 0x00, 0x00, 0x00, 0x01,
0x00, 0x32, 0x32, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x28, 0x00,
0x00, 0x00,
};
static const unsigned char LUTWW[] = {
0x50, 0x28, 0x32, 0x00, 0x00, 0x01,
0x90, 0x32, 0x00, 0x00, 0x00, 0x02,
0x40, 0x14, 0x32, 0x00, 0x00, 0x01,
0xA0, 0x32, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
};
static const unsigned char LUTBW[] = {
0x50, 0x28, 0x32, 0x00, 0x00, 0x01,
0x90, 0x32, 0x00, 0x00, 0x00, 0x02,
0x40, 0x14, 0x32, 0x00, 0x00, 0x01,
0xA0, 0x32, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
};
static const unsigned char LUTWB[] = {
0xA0, 0x28, 0x32, 0x00, 0x00, 0x01,
0x90, 0x32, 0x00, 0x00, 0x00, 0x02,
0x80, 0x14, 0x32, 0x00, 0x00, 0x01,
0x50, 0x32, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x28, 0x00, 0x00, 0x00,
};
static const unsigned char LUTBB[] = {
0xA0, 0x28, 0x32, 0x00, 0x00, 0x01,
0x90, 0x32, 0x00, 0x00, 0x00, 0x02,
0x80, 0x14, 0x32, 0x00, 0x00, 0x01,
0x50, 0x32, 0x00, 0x00, 0x00, 0x01,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
};