数码之家

 找回密码
 立即注册
搜索
查看: 10450|回复: 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 10:49:06 来自手机浏览器 | 显示全部楼层
玩屏专家!好文分享!
回复 支持 反对

使用道具 举报

发表于 2024-9-29 10:51:36 | 显示全部楼层
买了一块晶联讯的320*240单色液晶屏,带铁框,ST75320主控,可以并口6800/8080驱动,也可以串口SPI驱动,带FSMC接口的STM32单片机模拟8080接口驱动很方便,使用RAxxxx的好像只能并口6800/8080驱动。
回复 支持 反对

使用道具 举报

发表于 2024-9-29 11:12:37 | 显示全部楼层
CPLD好像对付组合逻辑比较容易,信号延迟(比如生成一个延迟nclk的信号)比如不知道怎么搞,前阵子稍微看了些VHDL,也装了Quartus, 3064全新也买了几片,usb blaster也买了,就是还没实际烧写过,后来又暂停

CPLD还是有兴趣学学
回复 支持 反对

使用道具 举报

发表于 2024-9-29 11:22:57 | 显示全部楼层
可以用逻辑分析仪更快的排查点不亮的原因吗?
回复 支持 反对

使用道具 举报

发表于 2024-9-29 11:43:21 | 显示全部楼层
高手啊,我等不会编程的玩不了
回复 支持 反对

使用道具 举报

发表于 2024-9-29 11:53:30 来自手机浏览器 | 显示全部楼层
能不能提供下接口定义,手头有一样的屏幕,没有接口信息
回复 支持 反对

使用道具 举报

发表于 2024-9-29 12:06:43 | 显示全部楼层

G321EV

本帖最后由 icespirit 于 2024-9-29 21:43 编辑

老大,请帮忙分析一下这块屏https://www.mydigit.cn/thread-458456-1-1.html,我的示波器还是模糊着等待解决方案





G321EV

本帖子中包含更多资源

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

x
回复 支持 1 反对 0

使用道具 举报

发表于 2024-9-29 12:22:35 | 显示全部楼层
一个字:帅气!
回复 支持 反对

使用道具 举报

发表于 2024-9-29 12:35:08 来自手机浏览器 | 显示全部楼层
记号学习!谢谢分享!
回复 支持 反对

使用道具 举报

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

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

回复 支持 反对

使用道具 举报

发表于 2024-9-29 13:47:43 | 显示全部楼层
你是玩屏专家,就一个字,服。这些屏要在我手里就是垃圾,其实都是宝。
回复 支持 反对

使用道具 举报

发表于 2024-9-29 14:43:15 | 显示全部楼层
看起来的确不错,性能提升不少
回复 支持 反对

使用道具 举报

 楼主| 发表于 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:04:38 | 显示全部楼层
有水平,有技术,有手工,有money!上半年折腾墨水屏,刚找到点头绪,屏线撕裂了,连代码带屏都垃圾箱了
回复 支持 反对

使用道具 举报

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

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

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

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2025-5-2 11:33 , Processed in 0.280801 second(s), 15 queries , Redis On.

Powered by Discuz!

© 2006-2025 MyDigit.Net

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