数码之家

 找回密码
 立即注册
搜索
查看: 4873|回复: 77

从晶体管讲起,科普下 NT7086 系列 LCD 液晶屏代码该怎么写(原创)

  [复制链接]
发表于 2023-7-18 03:14:07 | 显示全部楼层 |阅读模式

爱科技、爱创意、爱折腾、爱极致,我们都是技术控

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

x
首先感谢大家的支持!前些天写了一篇点亮 NT7086 液晶的帖子:https://www.mydigit.cn/thread-402876-1-1.html

原帖受限于篇幅,特地没过分展开,避免过早纠结于细致的技术点以至于忘了点屏大业。

应大家的呼声,今展开一段细致科普,从晶体管讲起,一路介绍到该怎么写 NT7086 驱动代码。
本质上是介绍数电中串入并出移位寄存器的驱动,熟悉此部分的朋友可以直接跳过本帖,当然也欢迎讨论。


【晶体管构建逻辑门】

这里仅以 PMOS-FET 晶体管为例构建逻辑门,实际工程中会有更为复杂的晶体管结构,但基本功能不变。

如下图所示,一只开关 SW1 切换 IN 端电压状态(12V/0V),经过 Q1 驱动后,带动灯泡 L1 工作。
当 SW1 拨至 L 端时,Q1 导通,L1 点亮;
当 SW1 拨至 H 端时,Q1 截止,L1 熄灭。

01a-NOT.gif

电路实现了开关状态(IN)到灯状态(OUT)的一个映射。把关键电路抠出来,就是传说中的【非门】,符号如下:

02a-NOT.png

若规定电池负极电位(0V)为低电平(L),电池正极电位(12V)为高电平(H),则非门的逻辑描述为:
当 IN=L 时,输出 OUT=H;
当 IN=H 时,输出 OUT=L.

至此,获得了“非门”的构建思路。


再考虑另一个略复杂的电路,如下图,两只开关 SW1,SW2 切换状态,经 Q1,Q2 综合驱动,带动灯泡 L1 工作。
当 SW1,SW2 不全拨至 H 端时,Q1,Q2 不全截止,L1 点亮;
当 SW1,SW2 全都拨至 H 端时,Q1,Q2 全都截止,L1 熄灭。

01b-NAND.gif

电路实现了双开关状态(IN1,IN2)到灯状态(OUT)的一个映射。同样抠出关键电路,就是传说中的【与非门】,符号如下:

02b-NAND.png

同样规定高低电平,则与非门的逻辑描述为:
当 IN1,IN2 不全为 H 时,输出 OUT=H;
当 IN1,IN2 全都为 H 时,输出 OUT=L.

至此,获得了“与非门”的构建思路。

实际的逻辑门还有更多种,但构建思路、构建方法大同小异,因而不多作介绍。


【逻辑门构建RS触发器】

在简单逻辑门的基础上稍加组合,就可以构成复杂的数字逻辑电路,不忘点屏初衷。
这里尝试构建 RS 触发器,最简单具有“记忆”功能的数字电路,是静态内存 SRAM 的基本构成。

如图所示,两只与非门反扭在一起,就是最经典的 RS 触发器。~S 和 ~R 为输入端,Q 和 ~Q 为输出端。

11-RS-FF.png

依照与非门的逻辑功能,可以推导出 RS 触发器的逻辑功能,如右侧表格所示。

当输入端 ~S,~R 均为 H 时,输出端 Q,~Q 保持前一刻的状态不变;
当输入端为其他状态组合时,输出端可以设定为相应状态(注意一般不使用 H,H 输出态)。

至此,获得了“RS触发器”的构建思路。


【RS触发器改进为D触发器】

然而 RS 触发器并不好用,输入端有一定的冗余,因而尝试升级为 D 触发器。

如图所示,在 RS 的基础上,再加一层“使能层”(U3-U5),就构成了更为复杂的 D 触发器。

12-D-FF.png

同样依照 RS 的逻辑功能,可以推导出 D 触发器的逻辑功能,如右侧表格所示。

当输入端 CK=L 时,输出端 Q,~Q 保持前一刻的状态不变;
当输入端 CK=H 时,输出端 Q=D,输出端 ~Q 为反相的 Q.

拿逻辑门画的 D 触发器太费墨水,索性简化一下符号,获得【常规 D 触发器】:

13-DFF-SIMP.png

发明 D 触发器的歪果仁闲的蛋疼,将两个常规 D 触发器串联,又出现了神奇的【边沿型 D 触发器】。
注意在符号上,CK 脚旁边有 > 符号的是“边沿型”,没有的是常规型:

14-DFF-EDGE.png

可以证明,边沿型 D 触发器仅在 CK 的上升沿(即从 CK=L 到 CK=H 的瞬间)更新 Q=D,其他情况下 Q,~Q 均保持不变。

一般将边沿型 D 触发器的 CK 称作“时钟端”,D 称作“数据端”。

至此,获得了“边沿型 D 触发器”的构建思路。


【D触发器级联为移位寄存器】

有了边沿型 D 触发器能干什么? 串起来搞事情!点屏!

如下图所示,八只边沿型 D 触发器首尾相接、时钟 CLK 并联,形成了一个特殊的电路。
电路输入有两个脚 DAT,CLK,输出有八个脚 Q0-Q7.

15a-ShiftREG.png

按照边沿型 D 触发器的特性,每次 CLK 上升沿,触发器们同时将 D 的状态更新至 Q.
即当 CLK 出现上升沿时,Q6更新至Q7, Q5更新至Q6, Q4更新至Q5, ... ,Q0更新至Q1, DAT更新至Q0.

Q0-Q7 的状态整体右移了一位,故而得名【移位寄存器】。

实际上走到这一步,我们已经造出了一片 74HC164,8bit串行移位寄存器(DIP14封装):

15b-HC164.png

至此,获得了“移位寄存器/HC164”的构建思路。


【移位寄存器升级锁存】

有了移位寄存器,还有什么可追求的? 显然是优雅,大愚若智的优雅,屏还是要点的。

如下图所示,在移位寄存器 Q0-Q7 的基础上,再装八个边沿型 D 触发器,最终输出 Qa-Qh:

16a-Shift LAT.png

后装的八个触发器不再是串联,而是逐一接在移位寄存器上,实现一个“同步锁存”的功能。
后台 Q0-Q7 移位工作的同时,前台 Qa-Qh 可以锁存住某个状态保持不变,故而得名【带输出锁存的移位寄存器】。

优雅到这一步,就出现了鼎鼎大名的 74HC595,8bit带输出锁存的移位寄存器(DIP16封装):
这片将近 60 岁芯片,至今仍活跃在大街小巷的广告牌上,甚至连脚序都没改过。

16b-HC595.png

至此,获得了“带锁存的移位寄存器/HC595”的构建思路。


画一条分割线,硬件讲到这里,差不多够写代码了。


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


【NT7086串行驱动】

液晶驱动器 NT7086,实则就是类似于 HC595/HC164 的移位寄存器。下图摘抄自 NT7086 手册:

20-NT7086.png

可以看到 NT7086 的核心是一个带锁存的 80bit 移位寄存器。
从构建上来说,需要 80 个边沿型 D 触发器来作移位,然后再 80 个边沿型 D 触发器来作锁存。

对于移位寄存器的软件驱动,一般是按下图时序来进行:

21-Shift.png

以 8bit 移位寄存器为例,当输入了 8 个 CLK 正脉冲,并同步在 DAT 上输入相应电平(1=H, 0=L),
就可将输出端 Q0-Q7 设定为预想的样子。例如上图中 DAT 输入了 10110010,最终 Q7-Q0 的状态就被设定为 10110010.

硬件上只用了两根线(CLK,DAT),经过移位寄存器就可以控制八个独立的输出(Q0-Q7),这就是移位寄存器的作用。
对于 NT7086,移位寄存器有 80bit 长度,相当于两线输入(CLK,DAT),八十线输出(Q0-Q79)。

在软件上,基本就是写代码使得 CLK,DAT 按照预设的样子输出电平,大体如下:

22a-RawLoad.png

实际上会用循环、指针等技巧,来避免代码太长,大体长这样:

22b-LoopLoad.png

对于 Arduino 环境,直接用 shiftOut 函数就可以驱动移位寄存器,简单粗暴:

22c-shiftOut.png


【NT7086点屏】

实际点屏过程中,还需要参考 NT7086 手册上的工作时序,了解与理想 164/595 的差异,以便程序额外照顾:

23-NT7086-4bit.png

至此,如果 C 语言功底还行的话,基本就能点亮基于 NT7086 的低配版液晶了,例如刷二进制计数图案:

24-lcd.JPG


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


以上,从晶体管讲起,科普下 NT7086 系列液晶代码该怎么写。

最后祝大家点屏顺利!

打赏

参与人数 14家元 +393 收起 理由
2n3055 + 30 謝謝分享
cushion + 30 優秀文章
兰陵 + 30 謝謝分享
亲爱的混蛋 + 30
aping365 + 30 優秀文章
zzqqzzz + 30
kkdkj + 30 謝謝分享
慕名而来 + 30 優秀文章
hongo + 30 優秀文章
bj549 + 21 優秀文章

查看全部打赏

本帖被以下淘专辑推荐:

发表于 2023-7-18 06:50:43 来自手机浏览器 | 显示全部楼层
强贴留名,感觉能加精了
回复 支持 反对

使用道具 举报

发表于 2023-7-18 08:52:51 | 显示全部楼层
谢谢楼主的科普,讲解的真详细。
回复 支持 反对

使用道具 举报

发表于 2023-7-18 08:55:33 | 显示全部楼层
学习了

    感谢楼主分享
回复 支持 反对

使用道具 举报

发表于 2023-7-18 08:59:13 | 显示全部楼层
科普强帖,前排留名
回复 支持 反对

使用道具 举报

发表于 2023-7-18 09:17:25 | 显示全部楼层
妙啊                                       
回复 支持 反对

使用道具 举报

发表于 2023-7-18 10:52:08 | 显示全部楼层
看了一遍,字都认识
回复 支持 反对

使用道具 举报

发表于 2023-7-18 10:53:53 | 显示全部楼层
每个字都认识,连起来就不认识了
回复 支持 反对

使用道具 举报

发表于 2023-7-18 11:19:45 | 显示全部楼层
pMOS与nMOS刚好相反啊,我们常用的是NMOS,为什么?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 11:20:54 | 显示全部楼层
wfzdm 发表于 2023-7-18 06:50
强贴留名,感觉能加精了

感谢支持!
回复 支持 反对

使用道具 举报

发表于 2023-7-18 11:23:26 | 显示全部楼层
没学过数字电路的简直就是在看天书。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 11:28:09 | 显示全部楼层
zdylong 发表于 2023-7-18 11:19
pMOS与nMOS刚好相反啊,我们常用的是NMOS,为什么?


跟半导体工艺有关:P 型半导体需要掺杂 III 族元素(铝、镓、铟),而 N 型半导体掺杂 V 族元素(砷、锑、磷)。

两种掺杂的成本、难度有差异,结果导致两类型半导体的制造成本有出入。
最后就对应到晶体管上,NPN 型、N 沟道 的管子更容易做出来,同样工序下做出来更健壮.....
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 11:33:33 | 显示全部楼层
wxhjsr 发表于 2023-7-18 11:23
没学过数字电路的简直就是在看天书。

的确会这样,每一步构建都在升维;

反过来每次升维,对原有电路的设计都是降维打击。
回复 支持 反对

使用道具 举报

发表于 2023-7-18 12:01:27 | 显示全部楼层
t3486784401 发表于 2023-7-18 11:28
跟半导体工艺有关:P 型半导体需要掺杂 III 族元素(铝、镓、铟),而 N 型半导体掺杂 V 族元素(砷、锑 ...

所以如果限制了镓出口,是不是连CPU都造不出来了?毕竟CPU里有几百亿个晶体管,而PMOS需要掺杂镓?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-7-18 12:07:25 | 显示全部楼层
猪小呆 发表于 2023-7-18 12:01
所以如果限制了镓出口,是不是连CPU都造不出来了?毕竟CPU里有几百亿个晶体管,而PMOS需要掺杂镓? ...

理论上有影响,但实际影响多大这个难说,毕竟矿产不是一家独大。

反过来加工的技术,仍在卡脖子。
回复 支持 反对

使用道具 举报

发表于 2023-7-18 13:10:14 | 显示全部楼层
请教楼主帮忙看看我的这个与非门电路的工作原理,我用逻辑分析仪测M端有9ms高+6ms低的波形输出,但它的震荡原理我不太明白,先谢了!


段码屏辅助电路图.jpg
回复 支持 反对

使用道具 举报

发表于 2023-7-18 13:34:15 | 显示全部楼层
这才是真正的高手!
回复 支持 反对

使用道具 举报

发表于 2023-7-18 15:01:00 | 显示全部楼层
学习了

    感谢楼主分享
回复 支持 1 反对 0

使用道具 举报

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

本版积分规则

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

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-4-27 23:04 , Processed in 0.280800 second(s), 30 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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