一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 8515|回复: 23
收起左侧

万年历集大成之毕业版

[复制链接]
发表于 2014-9-5 20:53 | 显示全部楼层 |阅读模式
本帖最后由 gongzhu 于 2014-9-5 22:06 编辑

入门单片机的一年就是和万年历较劲的一年,从单独的DS1302到辅助GPS授时,再到DS12C887,直至DS3231才获得一个满意的结果。

DS1302对晶振要求太过,难得通过调节晶振电容把频率调到位(本人用电桥在100个30p瓷片电容中筛选出两个使1302日误差在1s内),可是春夏秋冬四季温度的影响也会再次乱掉晶振频率,虽然玩1302的人都不得不在程序里进行二次修正,但总感到有些别扭——假使在一个经常停电的环境中,误差照样会被累计起来。
在工作中发现一些工业仪器仪表中使用DS12C887作为时钟,发现精度比1302强得不是一个档次,因而淘了5个DS12C887(国产的)过来玩,谁知一经测试日误差几乎恒定于2s左右,依然不能满足自己的要求(要求不高,年误差不要超过一分钟,即周误差不超过1s),原装进口又玩不起。
后来不得不打DS3231的主意,一经测试,精度异常合乎要求,通过GPS时钟对比发现周误差基本上都在1s左右,价格上比DS12C887还便宜得多,更何况其还带温度输出。虽然温度64秒才更新一次,虽然误差±3,对于气温测量基本上足够用了,又省去了DS18B20的花销。
单片机入门时对LCD12864感兴趣过,自从玩过一遍万年历后就对12864失去兴趣了,感觉正常使用还是数码管或LCD240128更实在。
自己没有其他高级玩家的条件可以自己做板子,反正10*10cm的板子打板也不贵,也不会专业的PCD软件就学Sprint-Layout自己动手画图,差不多半个月时间画好了控制板和数码管显示板(显示板是10*15cm的,打样要200,0.36和0.56的数码管)。
忐忑中淘的板子寄到了(说实话对pcb的层概念还是朦朦胧胧,好在卖家直接收Sprint-Layout文件,省得自己转换出错的危险),发现跟自己想想的差不多,数码管显示板除了两个二位数码管的公共端搞反了,控制板有几个小毛病(DB9串口、usb供电、12864)都无妨大碍。说实话对处女作还是相当满意的,毕竟没有作废掉。

调试后发几张照片到QQ群中显摆了下,结果好几个朋友要向我“订制”,想想既然作为“产品”,留有毛病的一代控制板还是觉得不踏实。
于是重新修改图纸,又重新打板,还增加了3位的gps接口,这下二代板基本上算是功德圆满了。

万年历之集大成版横空出世:
89C51+DS3231+DS12C887+240128(12864)+红外+DS18B20+GPS+数码管
DS3231既可以使用贴片,也可以使用一种现成的插件式模块。

看到一些帖子说如果DS3231使用5V供电会导致日误差偏大到10几秒,反正我测试过没出现这个问题(5.2V后串了个二极管实际电压4.6V),一代板没有使用3.3V,二代板增加了3.3V转换。
LCD12864(ST7920)和LCD240128(T6863)不能同时使用,其共用了大部分IO,对比度设置成通过跳线选择二选一。
所谓的数码管是使用MAX7219串行控制(3个IO:DIN、LOAD、CLK),串行控制的优点是省IO,不方便的是调整时间时想使单个数码管闪烁或亮度发生变化不好实现。

LCD240128是21针的,一代板子上设计是20针,二代板子是21针,可以直接使用20针,将LCD240128上一二针脚在背面短接即可,即将LCD240128上第一针FG废掉(边框地)。
再就是难找现成的21针排母,拿40针排母改造实在浪费。

调试中解决了两个难题:
第一个是MAX7219的DOUT端输出问题,前级会干扰后级。
第二个是GPS和DS3231时钟同时使用时会出现串口中断异常导致死机的问题。

使用LCD240128时发现满屏每秒刷新一次会比较吃力,网上查询需更换20M以上晶振,后用STC12C系列单片机(即1T单片机)+12M晶振就行了。

DS12C887+LCD12864,DS3231+LCD12864,DS3231+LCD240128显示时间功能都已做好,调整及闹钟未作。

主攻的DS3231+GPS+数码管+自动校时,有GPS优先使用GPS时间,否则使用DS3231时间。GPS时间有效达10分钟以上自动校准DS3231时间。
对“前辈”们的农历和星期转换函数(nongli.h)做了重大修改:
1、将传入参数由BCD码改为了10进制,更符合正常思维,省的颠来倒去。
2、将2000年前的变量数据都清理了,节省了300多Byte空间,转换函数的世纪形参也省掉了。反正我们又不靠它玩四柱八字来算卦
源程序还在“老化”中,等稳定一段时间再发上来!


发图:
控制板正反面:
00.jpg


数码管和控制板组合:
04.jpg


数码管+DS3231+GPS(右下“24”是gps的秒,测试ds3231用的):
03.jpg


ds3231+12864:
02.jpg


12C887+18B20+240128:
06.jpg


3231+240128:
07.jpg



最后顺带说明一下,10*10的控制板有多打10块,需要的可以留言或私信,买板子的大部分源程序(只做了显示,没做调时、红外等功能)可以免费相送.
板子原理图如下(不会仿真软件,windows画图画的):

原理图

原理图


支付宝先款的优惠如下:
买一块pCB送一块恒流恒压充电板——空板,5*5cm,按矿坛坛友设计的电路;
买两块pCB送一块一代板——即第一次设计的有瑕疵的板子,DB9串口手动简单修改下仍然能使用,会出图说明如何修改。


不放心的移步淘宝二手链接:

http://2.taobao.com/item.htm?spm=2007.1000622.0.0.Q5T09C&id=41050512083

拍前旺旺联系修改快递费,或拍下后留言“一乐坛友”,不留言不发。江浙沪皖快递费7元,其他非偏远10元,全峰或快捷快递(散户只能拿到这个价钱了)。
还有5个国产DS12C887,四个原价8.9,一个原价7.3,仅拿出2个测试了下,都没挂锡,5元一个随万年历PCB出
FPO[CW1DJX6}RQE4X9%YJ22.png

5~ULRJG@~$_25@]4@]O]T`6.png







发表于 2014-9-5 21:18 | 显示全部楼层
i2c的通信可以放定时器函数里面做等待,这样程序不会出现瞬间的卡顿。再有就是建议用595加上4转16译码器扫描数码管,动态显示12线扫描。做好很难,但是这样做可以练习程序内任务调度。

点评

确实加了定时器才好转了。再就是串口中断只接收数据不处理,处理通过完成标识传给main()去处理解析  发表于 2014-9-5 21:58
发表于 2014-9-5 21:51 | 显示全部楼层
很不错,支持下!
发表于 2014-9-5 22:08 | 显示全部楼层
支持,看好GPS校时
 楼主| 发表于 2014-9-5 22:16 | 显示全部楼层
我的DS3231用的是淘宝现成的模块:
08.jpg

发表于 2014-9-5 23:22 | 显示全部楼层
技术不错顶一个
发表于 2014-9-6 08:10 | 显示全部楼层
真厉害学习了
发表于 2014-9-6 10:50 | 显示全部楼层
能否共享个源代码学习下?

点评

待测试稳定后会发的  发表于 2014-9-6 10:57
发表于 2014-9-6 12:11 | 显示全部楼层
楼主下一版可以用贴片元件全放背面了。

点评

曾经这么想过,而且贴片单片机IO更多更好扩展,但眼睛不太好,自己玩玩焊贴片比较吃力  发表于 2014-9-6 12:14
发表于 2014-9-6 14:08 来自手机 | 显示全部楼层
有兴趣,想买两块板。楼主pm一下,我要带儿子,今晚再联系你。可以吗?

点评

可以为你留两块板到今晚10点  发表于 2014-9-6 14:34

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-5-18 17:24 , Processed in 0.078790 second(s), 45 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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