|
本帖最后由 machao 于 2015-7-13 17:41 编辑
我看到也使用过一些开发学习板,早期推出的板上通常有一块8*8的点阵模块,而现在的一些板子上则使用了16*16的点阵模块。采用这样的模块主要是能更好的显示汉字和图形。
但是很多学生最后给出的设计实物都有一个通病,就是显示亮度不均匀,效果不好,再看那代码,根本就是杂乱无章,又臭又长。问道原因说是网上的参考代码,或实验板所配光盘的例程。但让他们自己去找出问题,基本都是摇头的放弃的。
实际上,很多实验板上16*16模块的驱动电路是有问题的,大都是按照8*8模块“继承”下来,连软件也是如此。所以把它们整理一下,作为练手题讨论,因为这个DD是设计涉及到硬件和软件,以及两者之间综合与平衡。
下面从基本原理和硬件开始做些分析:
首先,大家都知道点亮这样的点阵模块的方法是通常采用动态扫描方式,每次扫描点亮一行(称为行扫)或一列(称为列扫),对于8*8的模块行扫还是列扫很多人是不注意的,不会根据硬件驱动方式去评定应该使用哪种扫描方式,因为8*8产生的亮度不均现象不是那么明显。
另外就是要考虑到完成驱动点阵模块扫描任务,其CPU的占有率应该尽量的少,让CPU可以有更多的时间做其它的任务。因为显示模块通常在一个应用中只是其中的一个外围设备。
先制定基本的扫描间隔2ms。如要保证显示均匀不闪烁,“刷屏率”必须大于25帧。倒算一下:设定每行扫描点亮时间为2ms,那么刷一屏的时间为2*16=32ms。这样每秒种的刷频率为 1000/32=31.25帧,大于25帧。要效果好的话, 最好刷频率达到50帧,但这样驱动点阵模块扫描任务对CPU的占有率将增加,使得CPU作其它事情的时间减少。
在CPU的系统时钟频率不变的情况下:
如果行扫描间隔为2MS(31.25刷新率),如何估算其CPU的占有率?扫描间隔为2ms,既是意味者2个毫秒就要执行一次点亮一行的代码。假定这些执行代码需要0.05ms(在KILE中具体可以查看到产生的汇编指令条数作估算),那么CPU占有率为0.05/2 = 0.025,即为2.5%,此时CPU有97.5%的空余。
如果行扫描间隔为1MS(62.5刷新率),那么扫描间隔为1ms,既是意味者1个毫秒就要执行一次点亮一行的代码。同样假定这些执行代码需要0.05ms(系统时钟频率不变),那么CPU占有率为0.05/1 = 0.05,即为5%,此时CPU有95%空余。
0.05ms是50us,能执行多少条指令?评估一下如果用STC51,工作在12M,1T方式,其平均一条指令的执行时间为2T=2/12m = 0.17us。50us/0.17us = 294条汇编指令。(标准51工作在12M,其平均一条指令的执行时间为2us,50us/2us = 25条指令,这基本上已经不能够完成行扫描的任务了)。这里还没有考虑中断进入的时间,现场保护的时间,以及现场恢复时间和中断返回时间。
以上可见,如果合理的硬件设计能使扫描点阵的执行指令减少,那么CPU的效率也会提高。
一个练手题,可能只是针对一个模块,但是在练手时,需要考虑到这个模块可能是将来一个比较复杂产品的一个组成部分,一个用于显示的外设,CPU还要作更多的事情,还要作其它的复杂计算。如果这样一个模块的实现需要CPU全力为其服务的话,这样的练手层次就比较低了。
待续。。。。。。
|
|