数码之家

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫一扫,快速登录

搜索
查看: 11011|回复: 126

[Arduino] 人芯合一:从NT7086液晶屏讲起,将320240把玩成各种意义上的模块(原创)

    [复制链接]
发表于 2024-9-29 07:58:02 | 显示全部楼层 |阅读模式
首先感谢大家和网站的支持!书接前文

整个夏天忙着敲代码没顾上来发帖,这临近国庆终于得闲,给去年的一个帖子来个“下半场”。

对于点屏的执念,大概是入坑二次元开始的。去年科普了下 NT7086 液晶的驱动原理:
https://www.mydigit.cn/thread-403154-1-1.html

然原理终归是原理,NT7086 也不是随便什么单片机都能带的动,于是吃灰了。

【入手屏】

直到某日代码敲累了,躺下刷二手找到了这么款屏:



余光观之感觉不赖,定睛细瞧发现店家居然贴出了主控型号:



RA8835 + 62256 的组合,320x240 分辨率 20大洋一片,这价格相对于分辨率简直白给,果断剁手来一批。

之所以这么笃定是好玩意,与之前科普 NT7086 有很大关系,待后文细讲。
现在是买买买时间,剁就对了不买是孙子。几天后收货真心巨大:



这要是点不亮,百来块打水漂不说,光是处理垃圾都够忙活一阵子的。


【显示原理】

之前曾科普过 NT7086 显示原理,以 320x240 点阵规模为例,大致如下:



七片 NT7086 分两组,四片驱动 80x4=320 段电极,三片驱动 80x3=240 位电极,实现矩阵点阵显示。

所有七片 NT7086 级联成串行链,由外部 MPU 使用 CK/DI/SYNCx 信号串行驱动,具体时序见上个帖子。

然这个结构最大不足在于:NT7086 每次只存储一行图案数据,
全屏显存需要外部 MPU 实现,容量不小于:320x240x1bit= 9.6kB

再看这次的 320x240 液晶:



背面一只MPU,一只32KB-RAM,提示液晶结构应该如下:



板载了协议转换 MPU、32KB-RAM 显存,很显然对外就是常见的 8080/6800 总线协议,不再需要额外一级显存,方便单片机玩耍。

作为对照,可以看下市面上常见的液晶配置。MPU+RAM 作为可选单元,焊上更易用,不焊更便宜:



基于对 62256 的信任,剁手了一堆巨屏,只等到手点亮。


【并行初点亮】

由于主控型号已知,简单测下线序用标准驱动就成功亮屏。
这里还是万用的 u8g2 打头阵,使用 8080 总线模式:



单片机使用 Arduino 最入门型号 UNO, 16MHz-AVR 测试极限驱动。
这片只有 2KB 动态内存的单片机,成功带动 320x240 单色点阵:



把玩到这一步,只是重复了前人的工作,确认钱没打水漂而已。

一堆IO数据线连在单片机上,不可靠不优雅,太费IO;
板载高达 -28v 的液晶偏压裸露在外,既不安全也不可爱。

看这满屏的 hello world,方方面面都达不到 “模块化” 预期,于是开搞。


【设计亚克力】

作为电气模块,少个绝缘外壳自然是不可忍的。

看着这巨大一坨屏幕,上 3d 基本得额外考虑结构强度,到头来成本容易兜不住。
思来想去还是用经典的 3mm 亚克力夹心设计,CAD 开起来:



设计成上下夹心结构,侧方三面有墙,留一面出排针信号线。
加工果然成本哗哗的,一套就够再一片液晶了,好在一把过:



装起来刚刚好,高清大屏+磨砂外壳,再也不是带电裸板了,麻麻再也不骂了:



再次插回排线,刷个妹纸有模有样:



至此 320240 液晶不再裸奔,机械意义上把玩成了一只模块。


【分析中继协议】

折腾完外壳,看着这一堆跳线,每次把玩都废一整包线心生不爽:



想起曾经设计过 四线-HC595 中继器,将并口 19264/12864 转为四线串口:
https://www.mydigit.cn/thread-441713-1-1.html



每块屏幕不论分辨率,只要四线IO就能完整控制,访问效率不明显下降。

具体原理是 HC595 扩展出 8bit 数据线 +Nbit 控制线。
通过 HC595_RCK 与 LCD_EN 共用锁存线,实现数据无缝传递:



然对应到这次的液晶上,总线时序目测要炸。如下图所示:



原 19264、12864 使用 6800 总线时序(如图a),HC595 在 RCK_D 上升沿更新 D7:0,LCD 在 RCK_D 下降沿读入 D7:0,数据可靠传递。
而此次的 320240 液晶使用 8080 时序(如图b),与 HC595 一起都在 RCK_D 上升沿进行操作,数据传递不可靠。

为此须在 8080-nWR 输入加一级反相,才可保障数据可靠传递:



这样一来两片 HC595 肯定是不够用了,至少得来个 HC04 之类,
还想布线成上个项目那样的直插小板基本无望。

既然横竖都得上贴片,这就想到了传说中的 “胶水电路” CPLD.
如果能用 PLD/CPLD 构建出 HC595,那么捎带个反相器自然不在话下。

参考 HC595 手册,每片 HC595 需要 8+8=16 个 边沿型 D 触发器:



对应到 PLD/CPLD 规模,相当于 16个可编程宏(Macrocell)。
两片 HC595 需要不少于 32个可编程宏;IO 不少于 4in+16out.

最终系统成了这么个抽象的样子,胶水电路果然名不虚传:




【设计CPLD中继:硬件】

找了一圈正好 epm3064 挺合适,64个宏单元,TQFP44 时 IO 最多 34 个,关键是能买到:



说干就干,布线先走起来!有了 CPLD 加持,中继版延续了之前的条形侧插接结构。

时钟用 CPLD 推荐的全局时钟脚,其余全扯在就近的 IO 上。
另预留 JTAG 作为固件更新端口,布完线渲染下,挺优雅:



丢去打样还得是哑黑有格调,啥走线也看不清,不通了直接报废都不用救:



到手后人肉贴个片,快乐地折腾了小半个下午:




【设计CPLD中继:软件】

一顿操作 CPLD 中继板都焊好了,结果 HDL 代码都还没写。
万一写废了或者选型有啥坑,这往返迭代想想都酸爽。

好在 Verilog 还没完全忘掉,配合着 Quartus 8.0 蹩脚的一行行写:



虽然 Verilog 用的不熟,但我看得懂 RTL 综合图啊。
Quartus 生成的这图很快就能确认代码正确性,毕竟本质上还是数字电路:



最终宏单元居然只用 25/64 个就实现了,看样子优化的不错。


【设计CPLD中继:调试与坑】

至此CPLD的软硬件差不多都有了,直接通电测试(主要是不会编testbench):



别看阵仗大,东西是一点也不复杂,也就磨合了几个小时就通了。
CPLD 成功模拟出了 HC595 与反相器,可由 Arduino 控制输出电平。

走到这一步按理说就要水到渠成:把 HC595 传输层塞进 u8g2_ra8835 的 HAL 层里,就该能正确亮屏。

然而是我想多了,毕竟不是神仙,哪有那种一弹指就千军万马破的神力。
又是个把小时移植 HAL,插好线,层层烧录好各级固件,效果居然是没效果:



任你敲破键盘改驱动,任你 C/C++, Verilog 还是 Matlab,
蓝屏就是蓝屏,没有丝毫的波动,没有丝毫的亮屏的影子。

这让脸往哪搁啊,一顿分析设计打板编程调试的,最后蓝屏了。
说实在满心掀桌的冲动。


【设计CPLD中继:重生】

所谓航天领域的 “归零”,就是这种士气跌落谷底时,近乎变态的从头再来。这又是一次切身的归零体验。

唯一可行的办法,就是从并行驱动开始(CPLD完全旁路),逐信号线加入 CPLD 驱动直至全部(CPLD完全工作)。

又是十几个小时的归零调试,经历了各种工装夹具杜邦线带来的神奇故障(实际是高频信号完整性恶化),
最终定位万恶之源是 LCD_RESET 复位线:



液晶 RA8835 工作在 5V 模式,中继 CPLD-EPM3064 工作在 3.3V 模式,用户代码 Arduino-UNO 工作在 5V 模式。

RA8835 的 LCD_RESET 输入有一级施密特触发器,释放电压高达 0.7Vcc= 3.5V,
超过了 CPLD_3.3V-LVCMOS 高电平极限,导致复位无法释放。
归零了不知多少时辰,原来液晶一直徘徊在复位态...



所谓三态门,专用于整治这类高电平不够高的顽疾,用上就立竿见影。
屏终于在 CPLD 的中继下被点亮了,四根IO,兼容HC595协议,优雅:



至此 320240 液晶不再全是并口线,硬件意义上把玩成了一只模块。


【封装u8g2驱动】

废了巨大的气力终于用 CPLD 实现了原 HC595 中继器的功能。
硬件上只需四根IO就可以稳定驱动 320240 液晶工作。

软件上不封装个 u8g2 派生类,都对不起这么完美的硬件折腾。



直接按照 u8g2-HAL 的套路来,从 class U8G2 派生一套私有驱动类,重写 HAL 层以下的:
数据传递接口 Transfer_RA8835_LCD320240();
基础绘图接口 Display_RA8835_LCD320240();

最后打包成一个完整的 class 就大功告成。

以前玩 12864 都是律诗绝句啥的,再多写不下;
到 320240 这里直接来 “春江花月夜”,传说的孤篇盖全唐:



至此 320240 液晶连驱动都已模块化,一只 class 搞定 u8g2,软件意义上同步把玩成了一只模块。

附上文中涉及的源码,整理不易,仅在本坛分享:

--------------------------------------------------------------


以上,从 NT7086 液晶原理讲起,记录下如何将 320240 把玩成各种意义上的模块。
最终成功把 EPM3064-CPLD 玩烂了,窥探到了人芯合一、要啥逻辑有啥逻辑的境界。

最后祝大家点屏把玩顺利!






后续:从模块化开始,把 LCD-320240 盘成 Windows 桌面副屏,并科普相关原理
https://www.mydigit.cn/thread-475524-1-1.html



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册 微信登录

x

打赏

参与人数 16家元 +470 收起 理由
eeerrr + 20 優秀文章
zzy_85569381 + 30 謝謝分享
dz20062008 + 30 優秀文章
2n3055 + 30 優秀文章
cushion + 30 優秀文章
jf201006 + 30 謝謝分享
springvirus + 30 妥妥的大咖!!
sunnyquan + 30
zzqqzzz + 30
对焦基本靠手 + 30

查看全部打赏

 楼主| 发表于 2024-9-29 14:52:39 | 显示全部楼层
b26359 发表于 2024-9-29 10:49
玩屏专家!好文分享!

感谢支持哈,祝玩屏愉快!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 14:56:19 | 显示全部楼层
mmxx2015 发表于 2024-9-29 10:51
买了一块晶联讯的320*240单色液晶屏,带铁框,ST75320主控,可以并口6800/8080驱动,也可以串口SPI驱动,带 ...

对,这类有 6800/8080 接口的默认就是配合硬件总线玩的舒畅。
后来 MCU 速度上来了,一层 HAL 代码就把下边的总线全屏蔽掉。

RAxx 就是只给并行总线模式,这才折腾了一圈 CPLD 中继。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:02:41 | 显示全部楼层
inthsunshine 发表于 2024-9-29 11:12
CPLD好像对付组合逻辑比较容易,信号延迟(比如生成一个延迟nclk的信号)比如不知道怎么搞,前阵子稍微看了些V ...

FPGA 相当于无限量LUT + 无限量寄存器的系统,小规模不适合玩;
CPLD 就是固定数目宏单元 + 可编程乘积阵的系统,规模可以一直小到 PLD(例如16V8),最适合替代几片 74HC

玩过 PLD 就知道可编程乘积阵的nb,只要乘积项不超过硬件限制,所有的组合逻辑都能给你编出来...

altera 家的 FPGA 甚至得外挂 flash,这点就很让人抓狂。
相比之下 CPLD 标配 eeprom,这个在感官上更接近带片上 flash 的单片机。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:05:02 | 显示全部楼层
猪小呆 发表于 2024-9-29 11:22
可以用逻辑分析仪更快的排查点不亮的原因吗?

具体到这个项目,逻辑分析仪也无济于事: 根本原因是 3.3V-LVCMOS 带不动 5V-施密特。

电平不兼容的问题,上逻辑分析仪会看到时序都对,然后屏还不亮,这不更抓狂。
唯一一点的优势,是逻辑分析仪可以更快把故障从时序范畴排除掉。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:06:31 | 显示全部楼层
wxhjsr 发表于 2024-9-29 11:43
高手啊,我等不会编程的玩不了

可以玩玩 Arduino 或者 python, 把精力集中在怎么造车上,而不是重复前人的轮子
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:12:22 | 显示全部楼层
cat_li 发表于 2024-9-29 11:53
能不能提供下接口定义,手头有一样的屏幕,没有接口信息

直接找型号,原厂家都还在: http://www.huayuanlcd.com/pro_view.asp?id=57
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:21:39 | 显示全部楼层
icespirit 发表于 2024-9-29 12:06
老大,请帮忙分析一下这块屏https://www.mydigit.cn/thread-458456-1-1.html,我的示波器还是模糊着等待解 ...

看了下原帖子,感觉不像偏光膜问题,更像是液晶本身发霉变质了一样。

曾收过一批旧 TFT 彩屏,点亮后中心有图案,边缘10-20px 的宽度有白边无显示。
把偏光膜完全扯下来,拿正常的中心去观察边缘白边,发现白边仍在,根本不赖偏光膜。
单纯的就是液晶分子老化了,得换屏才能救活那种。

你这个我也不好说具体哪里问题,但不通电都能看到晕影,通电反而像素亮度差异不大,
觉得更像是液晶分子本身的毛病
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:23:25 | 显示全部楼层
茶壹杯 发表于 2024-9-29 12:47
曾经1602都把茶折腾个够呛

我寄个3寸楼主帮忙看看? 站短个地址   

已发私信,好奇有啥症状? 太难了可搞不好
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:26:15 | 显示全部楼层
微醉 发表于 2024-9-29 13:47
你是玩屏专家,就一个字,服。这些屏要在我手里就是垃圾,其实都是宝。

大家一起学习进步!

关键还得感谢 u8g2 的作者,在这之前我也不怎么玩单色屏,一块 12864 都吃灰多少年;
玩了这个驱动类以后,各种稀奇古怪的屏都给剁手来玩
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:34:26 | 显示全部楼层
猪小呆 发表于 2024-9-29 15:12
三态门是在CPLD里实现的吗?所谓的“三态”是指5V、3.3V、0V三种状态吗?

CPLD 或者 FPGA 都能实现三态门, 参考 HC125、HC126,本质上就是个带使能的同相(或反相)缓冲器。
输出的三态分别是:高电平(H=3.3v)、低电平(L=0v)、高阻(Z).

一般玩总线的都逃不开三态门,以 8080 总线为例,8根数据线就是8个三态门,
写总线时处于 H/L 状态,驱动外电路电平;读总线时处于 Z 状态,读取外电路电平。

三态门配合上下拉电阻,可以在 Z 态拉到你想要的电压。
EPM3064 支持 Z 态上拉到 5V(注意很多芯片不支持拉超过 Vcc),这个就是专门兼容 5V 逻辑用的
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:37:12 | 显示全部楼层
mdmo 发表于 2024-9-29 15:17
这个屏幕还是有市场的, 就是越来越小众了. 恐怕只有需要宽温的时候,才 需要吧 ...

这个屏幕的偏压升压部分,居然有热敏电阻参与电压调整,目测是适配不同温度下的偏压差异。

单就这一点,就比一众 1602、12864 严谨许多,那玩意天天手拧对比度
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 15:58:17 | 显示全部楼层
icespirit 发表于 2024-9-29 15:53
对.不是偏光膜的问题,这种液晶屏估计是工艺的问题也不知道是其它什么问题,液晶屏是有2块液晶屏粘合组成 ...

从时序上,应该能用普通【不带控制器的 320240】替代的,毕竟 7086 的时序就那么几个样子。
具体到细节点上,可能时钟沿的极性略微有别。

如果要换,建议先拿逻辑分析仪掐一下时序,然后对照能买到的屏芯片手册,时序能对上就妥妥没问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 16:00:18 | 显示全部楼层
玛德陛下 发表于 2024-9-29 15:43
真是太厉害了,我已经放弃了

玩没资料的屏,有种变废为宝的快乐
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 16:26:49 | 显示全部楼层
icespirit 发表于 2024-9-29 16:21
你说的测时序是不是使用示波器测试一下 P1 P3 P4接口信号的波形图?

对,测一下液晶和示波器主机连线上的波形图。

然而示波器通道太少、存储时间太短,一般不适合测这种多数字信号的场合。
所以推荐用逻辑分析仪,某宝上usb那个就挺好用。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 16:28:41 | 显示全部楼层
icespirit 发表于 2024-9-29 16:01
我有示波器,能帮我分析一下吗?确认一下能不能用,若能用我就上咸鱼买了直接换了,中间这一层阴影太难受 ...

看信号定义名字,和 7086 差不多是兼容的;

但实际 7086 还有不同的级联方式(左右方向、像素镜像啥的),如果能有屏芯片的手册的话,直接和7086对照就行;如果没有,最好就是挂逻辑分析仪看下
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-29 16:32:51 | 显示全部楼层
mapleft 发表于 2024-9-29 16:21
感觉20元是否有点贵啊,

别拿 COG、OLED 那些来比较, 一片正规的 COB-12864 都不止这个价。

这种 STN 的大液晶在 320x240 这个规模,正规价格不下三位数。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-30 07:34:22 | 显示全部楼层
触景情伤 发表于 2024-9-29 21:07
有啥区别吗?温度范围还是稳定性啥的?怎么会贵那么多?

直观是面积差异,标准的 12864 面积够好几个 COG-12864 了。

COG、OLED 单色屏算是比较现代的设备,但经常被廉价手持设备用,结果就有点不上档次的固有印象了。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-30 07:36:02 | 显示全部楼层
wy2000 发表于 2024-9-29 22:28
玩得太溜了。这些屏10年前都是很贵的(去年一起换个320*240屏要了300打样)

上学那会去电子市场,思考怎么入坑液晶。 12864 一片大几十,再大直接上百了,都不好意思一片片问老板。

最后啥也没买,再往后就网购了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-9-30 07:44:40 | 显示全部楼层
icespirit 发表于 2024-9-29 18:39
花了些时间找到了列显示芯片M6698资料请看这里-》https://www.alldatasheetde.com/d ... 32/OKI/MSM6698.h ...

过了下手册,NT7086 大致相当于 HD66204/05 的二合一版本,通过模式引脚可以切换。

实际替换的话,应该是可以对应上的。

不过这些 LCD 驱动器有不少模式(大小端、传输方向),一般是液晶 PCB 做跳线来切换。
实际买板子的话,万一遇到哪个反人类设计,模式跳线给焊死了就比较麻烦
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 微信登录

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-7-19 10:06 , Processed in 0.234000 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

快速回复 返回顶部 返回列表