|
首先感谢大家和网站的支持!书接前文
整个夏天忙着敲代码没顾上来发帖,这临近国庆终于得闲,给去年的一个帖子来个“下半场”。
对于点屏的执念,大概是入坑二次元开始的。去年科普了下 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
打赏
-
查看全部打赏
|