之前写了一篇图像的发展,因为app的bug导致了全篇文章尽毁。隔了两天还是把内容写上来。个人理解能力有限,受师傅陈阳指点开窍,会搜集一些有趣的知识,希望大家会喜欢。
ps:默认按所有电子器件共阴来讲。
半导体开始发光
20世纪中后期,随着半导体技术的发展,led被发明出来。这发光不再需要热量(白炽灯,钨丝灯),不再需要高压(日光灯)。只要很小的电压和电流就能让它发亮,直接激发出光。
led,也叫发光二极管。既然作为二极管,它当然也有二极管的特性:
- 单向导电性,反向接二极管不仅不会发亮,而且还会阻止电流通过
- 需要一定电压激发,一个led的激发电压在1.8~3.0V之间,同时需要注意发光二极管并不能在高压上长时间运行,比如普通的二极管在5v上马上就会被烧毁。但用来整流的二极管,都有很高的电压上限。
实验一下加了可变电阻的led,对于led亮度变化和转动角度变化是否同步。
发光LED不只有一种色彩
led现在发展出来有很多颜色的单色管子:
- 每种管子激发压降不同,比如红色led管子需要1.8v,白色的需要3.0v。
- 管子发光方式不同,有整个led为一个颜色然后发光发出另一种颜色,比如红发红,白发蓝(白代表透明)。
- 管子形状和材料不同,像带颜色的管子一般发散射光,有一些管子有聚光效果,可以把光源集中到前方很小区域
多种led构成了缤纷的世界,夜晚不再单调。
双色led,多色led,多led封装
既然led颜色有多样,可不可以把两三个led放到一起。答案是肯定的。
双色led有三个引脚,一个共阴,两个控制颜色的阳极,比如红绿、红蓝双色,当充电时红色指示灯闪烁,当播放时蓝色、绿色指示灯常亮。
多个同色led也可以封装到一起,起到同样面积上更大光亮的效果,大功率的led也是利用这一点,在这个面上放置很多led来实现这个效果。
彩色led,同一个led嵌入红绿蓝三色。四根线控制。
同一led可以有不同的表达意义,指示灯不仅能指示开启还能提示低电量。
控制led的亮暗 - PWM
led并不具备电阻的特性,所以也就不能靠串接可变电阻来降低,如果你尝试了,会发现led亮暗变化并不明显,这是什么原因呢?
首先led作为二极管,内部的PN节有电子膜将电路截断,如果想接通它,必须给它足够的电压,将这层电子膜戳破,这时就是闭合的电路。
假想在开路时接一个电阻,二极管两端电压其实还是电源电压(这里假设只串了电阻),也就是多少电阻串接二极管只要电源电压超过二极管的阀值,就可以导通,只不过电流大小被电阻限制而已。而电流的变化对led亮度的影响虽然会有变化,但是不好控制,因为电阻需要从某一值一直到无穷大范围才能控制led的亮度,这也不呈现y=ax比例变化。
所以如何控制led的明暗?led不需要像白炽灯和荧光管一样需要一个预发亮过程,而是通电瞬间亮,断电瞬间灭。pwm应运而生。
pwm是电子ic以一个极快的速度开关led电路,一开一关构成了一个完整周期,如果开的时间比关的时间相对长,那么led就变亮,如果关的时间相对的变长,那么led就变暗。
pwm方波不止用来控制led,还可以控制电机转速等
led队列
将多个led排成一排,就行成了led队列,比如常见的5050和ws2812(彩色),ws2801(彩色)。
led列表可以让led显示的更加有意义,比如音乐的动态音量显示。
如何控制led队列?led队列可以设计成整体控制,用于做成条形光源。做成单体控制,可以做成更多变化效果。
单体控制每个led都有一个锁存器,用于显示led变化。
led彩灯可以布置圣诞树,可以制作流光溢彩,可以做成几列只做成led点阵,发挥你的想象力和创造力
led数码管
将7个长条二极管摆成数字8,就有了数码管。数码管只需要7或7+1方案来设计,也就是8+.小数点或钟表的8+:冒号。
可以组成多段数码管来显示更多的数字。
单端数码管的阴极共用,一般为8+1=9pin设计方案,8个阳极+1个阴极。多段数码管pin脚数量为8+n,比如4段数码管为8+4=12pin。
多段数码管时就需要类似pwm一样轮巡刷新每段上的数字。这个频率要求50hz以上(整体刷新频率),100hz更好。这样不会导致闪烁。
数码管可以用更少的pin脚来显示更具体的内容
led点阵
将led行列都堆叠起来就行成了led点阵,驱动原理其实和数码管相似,一般为8x8点阵,这样设计是因为0xff可以控制一列,轮巡8次就能对整体做出刷新。
引脚数量需要8+8=16pin,如果是8x8x4阵列,那么是8+8*4=40pin。
对于led点阵,单片机的驱动就有些力不从心了。一般小型单片机io口从6~20多个不等,如果完全用单片机驱动8x8x4肯定找不到合适的单片机。
方便的驱动这些led
74149,74595诞生了,他们的诞生不是为了替代单片机,而是实现对单片机的扩展。149为移位寄存机。595为锁存器。他们都通过spi来实现将时间周期信号变化为扩展io信号。比如一个周期传递了一个0xff到芯片上。他们会把芯片的内容展现出来,也就是把0xff转变成他们8个引脚上的8个io高低电位。锁存器是在发送更改信号时才更新。而移位寄存器则每次传递一次信号就更新一次。
max7219,max7221的出现。149和595只是扩展了端口,但还是需要不停的对设备进行刷新。所以应运而生的7219这类芯片,内部自带BCD模块,自己周期性对数码管、点阵led进行刷新,而单片机只负责传输数据,这样就解决了单片机程序上循环的压力。
这样驱动起来方便多了,他们都支持级联,虽然并没有要求级联数量限制(理论上无穷大),但是级联过多会导致传递响应过慢。
12864 和 1602
这样的显示阵列led,都有独立的控制芯片。
1602是由两行16列字符组成,每个字符由5x8点阵组成,算下来应该是80x16分辨率构成,因为点阵分布是按照字符划分的,所以分辨率并不是平均分布在整个屏幕上。这只是为了优化数字显示。
12864则比较直观,由128x64分辨率构成。相比1602内部包含更多的字库,贵一些还包含汉字库。
这些作为标准都制定了对应的协议,在上世纪80年代这种屏幕在编程上很普遍。
液晶屏和led不同,它不进行发光,消耗电能更低,光由专门的led背光板提供。
led液晶板与显示器
更高密度的led显示器,1080或4k分辨率,就要求更好的驱动芯片,也要求更大的数据量和刷新速度。虽然没有了解到这部分,但是技术发展的确实很厉害。
对于高速控制信息也是有技巧的,不过对于液晶屏控制可以做到逐行扫描,即便1080i的影片进入控制ic时也会转化成p逐行扫描图像。降低一倍刷新率即可。
网上有教你如何将废旧笔记本液晶屏改装成笔记本副屏的教程,淘宝买到便宜的液晶板驱动。锻炼动手能力。
先说这么多,以后有需求再补充。
码字不易,尤其还被吞了一篇文章。这篇在此基础上完善的,又不明白的请讨论。有金币的可以施舍 :P