受电子广告牌的启示,正好手头有一块5x8的LED点阵,一时兴起,做了一个流动的电子钟。平时放在案头,可以显示时间、温度,也不失为一实用制作。
功能特色
可“流动“显示时间及温度,采用DALLAS 1-wire的DSl8B2O作为温度探头,采用DSl302实时时钟,外加后备电池,时间可以保存数年之久。
硬件设计
电路原理图如下图所示。电路以ATMEL的AVR单片机ATmega8(以下简称M8)为主控芯片。
DSl302是MAXIM一款带涓流充电的时钟芯片,采用外部32.768kHz的晶振工作。可通过CPU对其编程设置进行工作。它还可以采用后备电池对内部RAM的数据进行断电保护,在电压为2V时,电流只有300nA。平时工作时还可以对其进行涓流充电,数据可保存达数年之久。在这里则只用到了一些最基本的功能。
DSl8B2O相信大家都已经听说过很多次了,它的特点就是简单,但有时候太简单了,也给我们数据读写工作带来了不便,但它还是不失为一款很经典的数字温度探头。使用时注意需要在数据口上装一个4.7kΩ的上拉电阻,以保证数据输入输出。
LED采用5x8的共阳极的LED点阵。如果手头没有,可以直接采用8x8的共阳极点阵(不过要浪费3排LED了),也可以修改一下代码,改用共阴的LED点阵。
ISPCOM是对M8进行ISP编程的接口,编程的软件采用牧马编程软件,该软件的特点是:编程速度快,使用方便,在重新编译后能自动再次对芯片进行ISP编程。ISP电缆原理图如下图所示。其中,560x4的4个电阻用来限流。经过一段时间的使用,感觉性能比较稳定。
本电路共4个按键:SB1为模式按键,按动此键可依次显示为时间,温度、小时、分钟调整;SB2为复位按键,按动此键可复位M8;SB3、SB4为Down和Up键,在显示时间或者温度状态,按Up可以加快数字流动速度,按Down则减慢速度。在小时或者分钟调整状态,则起数据加减功能,在调整好时间后,再接动SBI,就设定时间完毕,时间开始运行。
软件设计
简单流程图见下图,源程序见本期配刊光盘。
软件采用ICCAVR编写,该软件能够利用代码工具生成M8初始化代码,简化了程序员的工作。软件原理如下:
1.M8进行I/0口初始化,其中PCO-PC4为段码,PDO-PD7为扫描码,均设置为输出,PBI、PB2、PC5作为按键输入端设置为输入,PB3为DSl302使能,PB5为DSl302时钟,设置为输出,其他也均设置为输出。
2.DSl302和DSl8B2O的初始化。
3.开辟显存,用于存放显示数据,避免重复计算查询,提高了效率(不过是以牺牲RAM资源为代价的)。4.查询键值,并根据不同的状态显示不同的数据。
注意事项1.DSl8B2O需要在Data脚加上拉电阻,不然可能会遇到读出数据不正常的现象;2.在M8和DSl8B2O、DSl302的电源脚附近最好需要加入滤波电容,笔者就遇到过M8频率高了运行不正常的现象,后来加上滤波电容就没有再出现过;3.本电路都是数字器件,可直接在万用电路板焊接电路,一般只要电路连接正常就可正常工作(当然,考虑美观性等就由读者自行决定);4.本电路只完成了上面所述工作,更主要的是完成了基本的接口,有兴趣的读者可以在此基础上加以改进,以实现更多的功能。
制作好的电路见下图。