打印

怎么样才能用单片机做出一个精确的时钟

[复制链接]
楼主: he119
手机看帖
扫描二维码
随时随地手机跟帖
81
wacke| | 2008-6-13 10:23 | 只看该作者 回帖奖励 |倒序浏览

原来还有0.01ppm的晶振

0.01/1000000 * 365 * 24 * 60 * 60 = 0.3165s 
看来要做好一个手表还真不容易.

使用特权

评论回复
82
fsaok| | 2008-6-14 06:05 | 只看该作者

要用0.01ppm?

按楼上的说法,10ppm的晶振,10/1000000 * 30 * 24 * 60 * 60 = 25.92s 是每个月的最小误差,

只能用0.01ppm的天价的晶振。真的是这样吗?

没有金刚钻,哪敢接瓷器活

使用特权

评论回复
83
lbcumt| | 2008-6-15 12:02 | 只看该作者

时钟

可以用 DS1302 时钟芯片做啊。

如果要只用单片机的话,一定要注意定时的长度,另外还有中断程序中重新赋值之前错过的时间,如果在中断程序的开始就对定时器赋值的话,应该在赋给的数值里减去 5 - 8 us 。

使用特权

评论回复
84
xwj| | 2008-6-15 12:12 | 只看该作者

嗯.... 建议用原子钟

哪个够精确.

使用特权

评论回复
85
bojiazu| | 2008-6-15 12:22 | 只看该作者

1ms的延时程序

考虑下每条语句的延时
12m提供一个1ms的延时程序:
DELAY:MOV R6 ,#02#
DELAY1:MOV R7,#0FFH
DJNZ R7,$
DJNZ R6,DELAY1
RET

使用特权

评论回复
86
wacke| | 2008-6-16 23:48 | 只看该作者

那是工程计算的最坏情况,

但一般你的运气不会那么差,所以可能买的是30ppm类型的晶振,但你用到的那个快快慢慢的一年下来算平均或许也在0.01ppm之类.但你要保证在要求的误差之内就不能那么做了.
不光这样.还有你用的电容的温飘也会影响精度.所以要做好可不是一件容易的事.

使用特权

评论回复
87
fsaok| | 2008-6-17 08:17 | 只看该作者

问题其实并没有那么困难

一个晶振,它的参数误差分为三部分,

一是离散性误差,就是说大家常说的晶振的ppm,主要是这个部分构成,

二是温度漂移,这个比较低,一般只有10ppm左右,有一些有温度补偿的可以做到0.3ppm。

三是晶体老化,一年不到 0.01ppm,这个基本可以忽略。

对于离散性的误差,完全可以用软件进行修正,时钟只需要精确到秒,为什么不可以来个每秒润几ms,每小时润几ms,每天润几百ms?

晶振的频率一定要是秒的某个整数的倒数,那就太书袋。


回到楼主的问题,楼主的问题其实没有那么复杂,他只是用了教科书上的教条,忽略了重设时钟时MCU所需要的时间。所以实际有那么大的误差。

---------------------------------------------------------------------

想想我以前做过的几个时钟,

一个是为了97香港回归而做的时钟倒计时,挂在广场上,走了一年多,不过只是显示到小时,估计误差到分是没有人管了,而且到了97那天就不再用,具体怎么样也没有人管了。

一个是公众场所用的时钟,显示到分,有时用于其他信号呼叫,这产品已经有10多年,从来没有用户提出过时钟误差。

一个是宾馆用的门锁,有时间要求,超时就不让进去,不过这产品是三个月就换电池一次,所以时间实际也没有那么要求高。

一个是便携式的数据采集系统,不过这个时钟每次回pc的时候就和pc对齐一下。

认真想想,确实俺在20楼有些吹牛成分。

使用特权

评论回复
88
wacke| | 2008-6-18 15:36 | 只看该作者

软件修正说起来容易做起来难

原理是很简单,把晶振的离散性误差修正回来,但首先要知道这个误差是多少才能修正吧?现实的情况你很难很准确的知道这个误差是多少。要做一个产品不可能先让他走上一年后来看误差了几秒,再修改程序吧?

使用特权

评论回复
89
学习世界| | 2008-6-19 01:37 | 只看该作者

没有难度的问题。

定时器用8位自动重装就不会有误差了(晶振精度问题不考虑)

使用特权

评论回复
90
AIRWILL| | 2008-6-19 09:13 | 只看该作者

好热闹哦

晶振的精度确实是很高的, 看看程序吧, 好象楼主的分析结果都淹没了, 没有看到分析结果

使用特权

评论回复
91
芯路锂程| | 2008-6-19 11:12 | 只看该作者

我用义隆做

   五小时,差了15分钟。电源3-4.5V干电池供电,波动的。温度也是波动的。
老板说在正负30分钟,就行了,笑死我了!

使用特权

评论回复
92
tigerots| | 2008-6-19 15:29 | 只看该作者

差太多了

每十分差24秒太多了,你再计算一下你的定时器初值是否正确,我上学时用AT89S51+12M晶体一天差2,3秒的样子。。

使用特权

评论回复
93
LFSLY| | 2008-6-19 15:45 | 只看该作者

年青人,做事要有耐心哪

使用特权

评论回复
94
liu_z2004| | 2008-6-20 06:42 | 只看该作者

一年不差10S,用T0,不管是6M,11.0592,12M等晶振

一年不差10S,用T0,不管是6M,11.0592,12M等晶振

使用特权

评论回复
95
lza| | 2008-6-20 15:33 | 只看该作者

还能发贴?

想精确,就程序做到知道每条汇编指令在干什么,了解元件的标准参数变化范围,就可以实现可能实现的误差范围,想跟别人准,就同步别人的时间,如果自己再牛点,发布自己的标准时间也行,呵呵,废话

使用特权

评论回复
96
dld2| | 2008-6-20 15:36 | 只看该作者

从88楼学到一点

使用特权

评论回复
97
HE119| | 2008-6-21 10:06 | 只看该作者

学到了很多东西

虽然时钟没有做准,但从各位大侠的回复中学到了很多东西
学会了思维方法,学到了书上没有的东西,也许这是大侠们的经验吧!
感谢各位了!

使用特权

评论回复
98
从一开始| | 2008-6-21 14:05 | 只看该作者

可以用时钟芯片啊

要想可靠的话,最好用时钟芯片。比如说DS12c887,效果就很好吗。

使用特权

评论回复
99
xiaojia234| | 2008-6-21 14:16 | 只看该作者

用GPS模块嘛

用GPS模块嘛,  调都不用调, 永远北京时间

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则