找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3610|回复: 2
收起左侧

1632pixelsLED点阵时钟固件升级笔记

[复制链接]
ID:60076 发表于 2014-4-27 16:45 | 显示全部楼层 |阅读模式
   三年前,我制作了这个16*32led点阵的单mcu实时时钟,并用汇编编写了近2k行即便是现在看来都很吃力的程序,不得不佩服年轻时的干劲。当时程序实现了年,月,日,星期,时间,和温度的流水显示,感觉显示较为累赘,同时,当时以字节IO的形式进行像素扫描,显示的均匀性极差。现在在翻出已开始泛黄的电路板后,觉得可以用c对其性能进行改善和精简,也不乏能被改造成为一件实用性极高的电子时钟。  

      为改善显示亮度的均匀性,可以考虑采用使用中断的单像素点点亮扫描的方法,整个一帧的像素点数是512个,考虑到100Hz的帧屏,那么单像素的点亮时间可达19.5us,在20MHz左右主频的条件下还是比较好实现的,但实际编程的效果却不如人意,由于单像素的点亮占空比很低,为1/512,因此显示亮度相当的差,虽均匀性高,但低亮度的显示仍不能提供好的观看体验,遂放弃。考虑到一般的显示不需要所有512个像素点的同时点亮,因此可以考虑只对其中点亮的像素给予点亮时间,而不需要点亮的像素点便给与略过,这样可以节省近一半的点亮时间,使显示亮度提升到原来的两倍左右,但即便如此,在较强的光线下也还是很难对显示字符进行分辨。










    绕了一大圈后,最后还是不得不考虑采用字节扫描的方式显示,一个字节中由于点亮像素点数的不同和上拉或下灌电流的有限,使得显示结果极不均匀。在这里,我考虑采用了不同像素点下显示占空比不同的策略进行亮度补偿。这样,总算实现了显示亮度和显示均匀性的两者兼顾。
    一次偶尔在动车上的闲暇,发现车厢两边的速度时间显示字符比较漂亮,遂立刻用云笔记把字符码抄录了下来,想着或能某天能用上,这次时钟的升级正是个不错的机会,因此,也就很自然的用到了升级时钟字符的显示上。
    时钟使用的是我非常喜欢的一款达拉斯公司的3231实时时钟芯片,芯片带温度补偿功能,因此走时异常精准(年偏差两分钟左右)。芯片允许对内部的温度寄存器进行读取,原版的时钟便使用了这一温度传感源作为温度显示的来源。时钟走时温度补偿所需的温度精度不高,因此温度显示的精度也就很有限了,考虑到室温环境的温度传感显示是个比较实用的功能,因此,后续的升级过程中加入了精度达到0.5度的单线数字温度传感器18B20。
在起初的调试过程中发现从18B20读取的初次温度值总是85度,通过搜索才发现,是由于其温度转换时间不够所致,因此后续以增加转换温度的方式解决(12位精度下需要最多750ms的温度转换时间)。另外,由于单线18B20读写时序对时间精度的高要求,因此在其内存操作的过程中因对所有中断进行屏蔽。




    传统的调节一般采用机械点接触按键的方式实现,从动于触摸操作的潮流,升级过程中采用了使用AD感应手指触摸的方法实现触摸调试功能的实现。单点的AD端的采集值是很随机的,因此还是要加入多次采集比较的去噪思想来提高采集的可靠性。
    此次的软件升级,着实让我体会了把做“码农”的艰苦和辛酸。其中多个看似无端的bug中总会有那么几个顽疾会使你疯狂、崩溃和无助。当然,这也说明了自己码码经验的匮乏。这也正是自己喜欢软硬件结合DIY的原因,两者各有其味,相补相长,实现有血有肉。



回复

使用道具 举报

ID:61326 发表于 2014-5-4 11:55 | 显示全部楼层
没有资料
回复

使用道具 举报

ID:78901 发表于 2015-5-4 23:05 | 显示全部楼层
没有资料,发个共享程序
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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