|
—
本帖被 發騷友 设置为精华,作者+3000M币+5专家(2016-02-25)
—
(1) 需求篇
家里的一个钟控收音机。2英寸的数码管,很大。放在冰箱上,老远都看得清楚,就当一个LED数字钟用,收音机功能闲置。开饭、出门的时间都靠它掌握,责任重大! 问题在于这个数字钟两周时间就能快十几分钟,平均每天一分种左右。隔十天半个月就要去手工调整一下,不胜其烦。但是看着这么大的屏幕和造型又舍不得换,改造它的念头由来已久。 这个数字种使用的是钟控专用芯片LM8562,类似的还有TMS3450,LM8560,LM8561等,上个世纪很流行。它使用市电50Hz的频率进行计时。有些还是采用专用的双阴极数码管,有闹钟/睡眠功能。市电频率不准确,走时就不准,这个问题也由来已久,所以也有个专门的芯片MM5369配上3.58MHz的晶振,可以产生很稳定的时基频率配合这类数字钟芯片。现在都讲究互联网思维了,不想用这个片子了。
(2) 方案篇
为了能给LM8562校时,有两个技术问题要解决:(一)对外:如何获取到准确时间;(二)对内:如何设置时间
(一)获取时间的方案
a) 通过GPS的方案。数码之家的坛子里已经有数不胜数的帖子了,电路图/PCB/源代码都有公开的,C51/AVR/STM32芯片的都齐全。由于不需要GPS的定位精度和速度,只要时间,所以最烂的GPS都可以,剪线GPS十多块钱就能买到。+5V供电也方便,UART串口操作代码也很经典,调试简单。实在是个不错的方案。就是要拖个尾巴到窗边略显麻烦。
b) 通过电波钟,获取商丘的国家授时中心发出的时间信号,这是中国的BPC格式,15元的模块。另外沿海地区还可以收到小鬼子的JJY格式的时间信号。但是目前还不太稳定,白天没夜间信号好,模块本身抗干扰不行,输出端无法直驱单片机,还需要一个运放整理信号,电路复杂些,调试较困难,坛子里的帖子不多。 thomas: 《永不消逝的电波——Arduino制作BCD码电波钟》 http://www.geek-workshop.com/thread-7797-1-1.html
c) 通过互联网获取时间,有个NTP协议专门是干这事的。我们的PC,无线路由器都在用这个协议,指定一个互联网上的NTP Server,一来一回两个报文,作为Client的我们就能计算出当前的准确时间。我本来是想用这个方案的,后来发现有更简单的,就是从服务器的http报文头里面获取当前时间。这个时间是明文字符串,处理起来更容易,虽然理论精度不及NTP,但是用在数字种上足够了。devcang和我想到一块去了。那个数字钟只显示时和分,不显示秒,所以没必要做到秒同步,只要每天校对一次,消除累积误差就可以了。这类方案的不多,搜到坛子里的几个帖子提及,但都没有完整实践。我就选定这个方案了。 电波钟:http://bbs.mydigit.cn/link.php?action=tag&tagname=%B5%E7%B2%A8%D6%D3 renpeng009: 《基于NTP协议网络校时》 http://bbs.mydigit.cn/read.php?tid=1062532 d) 通过CDMA模块,从运营商的移动通信网获取时间。理论上有可能,也有不少困难,性价比不高。不研究。
e) 锁定广播电台的整点对时信号,"嘟嘟嘟嘟嘟,嘀" 的声音,通过锁相环LM567解出这个“嘀”信号后,给数字钟清零。管你快了还是慢了,到这一时刻,统统给我从整点开始。这还是我N多年前,从《中学科技》上看到的。这个方案无法知道当前到底是几点,只知道是个整点了。能消除累积误差,但是初始时间还需要手工设置一下。如果是电池供电的,设置一次就不会忘,问题不大。我的LM8562数字钟没装电池,掉电后时间就归零到凌晨12点了,有点麻烦。 (二)设置时间的方案
a) 废弃LM8562,保留LED屏幕,用单片机计时并驱动。获取到时间后,设置时间自然不在话下。不过改动工程量也是不少的,要不重新制作PCB,要不就会大量飞线。而且LM8562使用的正是双阴极数码管,驱动代码得好好找找。数码之家真是DIYer的大家庭,果然有mengfc网友贡献了双阴极数码管的驱动源代码。实在没有得意的办法时,这是一条退路。 mengfc: 《采用单片机驱动TMS3450数字钟的双阴极LED屏幕》 http://bbs.mydigit.cn/read.php?tid=1177273 b) 祭出IO模拟按键大法,这在我之前的《三个零件,给大金家用中央空调加装遥控功能》 中已经有成功应用。阅读LM8562的资料得知,它有一个时间调整的引脚,平时悬空(二分之一电源电压),接电源负极是分钟加,接电源正极是分钟减。没有单独的小时调整键,调整分钟,小时会自动进位。
举例来说,通过互联网获得当前时间是12:27分,那么单片机先通过IO脚控制LM8562断电再上电,这时LM8562复位到12:00开始计时。然后单片机控制另一个IO模拟按“时间调整”按键27次,LED时钟就调整到12:27了。同理,如果要调整到10:27分,就要模拟按键627次。
实际上,我设计为每天晚上12点到1点之间同步校时一次,这些按键所花费的时间可以忽略。
(3) 硬件篇 改造电路图,参见蓝色的部分。
继续阅读请打赏22M币,鼓励作者原创更多精彩文章,已有34人打赏支持 打赏
|