D03编号241021文件名如何实现准确的电子时钟.docx
- 文档编号:22863327
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:16
- 大小:25.42KB
D03编号241021文件名如何实现准确的电子时钟.docx
《D03编号241021文件名如何实现准确的电子时钟.docx》由会员分享,可在线阅读,更多相关《D03编号241021文件名如何实现准确的电子时钟.docx(16页珍藏版)》请在冰豆网上搜索。
D03编号241021文件名如何实现准确的电子时钟
如何实现准确的电子时钟?
用单片机做时钟(除了用专门的时钟心片外)在编写定时1秒的程序中,除了采用:
1。
一秒只装一次初值。
2。
装初值时加上定时计数器已经计的数。
3。
和标准对比修正初值
除了这些,还有什么方法?
RE:
如何实现准确的电子时钟?
-beijing/li_mu回复于2001-3-1517:
27:
00
用一个6502,他是32768赫兹时钟,
RE:
如何实现准确的电子时钟?
-shenzhen/soul回复于2001-3-1518:
03:
00
加上自动校时功能。
RE:
如何实现准确的电子时钟?
-广州/dongguang回复于2001-3-1520:
11:
00
mc146818,50B的用户RAM,10B的时钟简单吗?
RE:
如何实现准确的电子时钟?
-珠海/赵崇伟回复于2001-3-160:
06:
00
1,使用稳频晶振,很贵
2,单片机小心不要丢中断,会使时间变慢
3,使用gps授时
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-160:
13:
00
谢过各位了。
软件方面还有什么改进吗?
RE:
如何实现准确的电子时钟?
-南京/魏小龙回复于2001-3-167:
25:
00
最好配上收音头,1小时或1天收一次中央台的哨声用于校正,可保证累积误差最少
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-1611:
38:
00
好注意,谢谢
RE:
如何实现准确的电子时钟?
-珠海/PILUJUN回复于2001-3-1616:
29:
00
软件方面几乎没有什么方法了!
另外可以用双振子的MCU及高精度的晶振,如NEC的
MCU就有一个32768Hz的副振子,可以专用于时钟,极大地提高时钟的准确度。
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-180:
59:
00
正象大家所说,解决了软件问题之后,时钟的精度就取决于硬件了,影响晶体频率精度的主要因素是温度,如果能使晶体的温度恒定,定时精度可以提高。
RE:
如何实现准确的电子时钟?
-广东/晓奇回复于2001-3-181:
07:
00
春夏秋冬,这么大的温差,真的不好做。
恒温的精度也伤脑筋哪,我做了一个时钟大约3天左右差1秒,不是很稳定,也许就是温度问题。
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-181:
31:
00
我到临潼天文台去过,哪里的标准钟放在地下,温度恒定,专家说,现在的晶体可以达到-6次方精度,一天86400秒,约误差0.8秒,如果恒温,提高一个数量级没问题。
RE:
如何实现准确的电子时钟?
-广东/晓奇回复于2001-3-181:
53:
00
谢谢xinxin大虾,看来软件上的工夫确实已经做尽了,我还用上了闰nop同样还是有误差。
RE:
如何实现准确的电子时钟?
-xian/jiangyu回复于2001-3-189:
33:
00
xinxin老师,我忘记了从什么帖子里看到你在51定时器装一次初值的程序,你能讲讲原理吗?
我在杂志上看到的定时准确需要考虑中断响应时间,我在时钟程序的中断程序在后边,可是我怎么调定时精度都无法达到我的手表的精度,两天差1S左右,初值加1快,初值减1慢,我觉得好象不是晶体不稳的问题,是无法细调的问题。
请你讲讲。
晶体6M,计数50000次。
IN_TO:
PUSHACC
PUSHPSW
MOVA,#0B0H
ADDA,TL0
MOVTL0,A
MOVTH0,#3CH
DJNZ23H,NEXT
MOV23H,#10
INC22H
NEXT:
POPPSW
POPACC
RETI
其中22H放秒。
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-1810:
54:
00
你分析的对,确实是不能细调的问题。
在51定时器做电子钟的误差分析里,有3项:
1。
机器周期误差,由晶体频率相对变化的误差产生。
2。
中断响应延迟误差。
3。
调整精度产生的误差,就是计数初值改变1对应的时间差。
第1条是更精确定时问题,与硬件有关,楼上有讨论。
第2条你已经考虑过了。
第3条是你的程序问题:
可以这么计算,你的定时常数改变1,对应的1S定时改变了多少?
每1次中断,你的定时器计数50000,共10次,机器周期2US:
50000*10*2US=1S,定时常数改变1,设计数器改为50001,则定时间隔为:
50001*10*2US=1.000020S,改变了20US,每天86400S,共计86400*20US=1.7S
当然两天改变超过1S。
即使你把晶体频率提高到12M,每天也会差0.85S.
采用1S装一次初值,可以使调节精度增加8-10倍:
中断程序为:
IN_TO:
DJNZ23H,T0_END
MOV23H,#8
PUSHACC
PUSHPSW
MOVA,#0E0H
ADDA,TL0
MOVTL0,A
MOVTH0,#5EH
INC22H
POPPSW
POPACC
T0_END:
RETI
其思想是:
计数器每次溢出后继续由0在计数,同样是500000次计数,500000=8*65536-24288,其中24288=5EE0H,如果计数初值改变1,则对应的计数值改变为:
8*65536-24287=500001,也就是改变了1个机器周期,只有2US,一天0.17S.
调节精度提高了10倍。
这个帖子发出后,我也在想进一步提高的办法。
采用稳频晶体是硬件上的考虑。
在软件上还有什么办法可以更细的调节?
受晓奇兄“润”的启发,我想,采用另一个计数器,1分钟装一次初值,那细调精度就可以提高60倍,到达每分钟时,再对秒计时的采取“润”修正,但这只是个想法,实现起来还有困难,比如两个计数器的优先问题,会不会相互影响……。
望大家出高招。
RE:
如何实现准确的电子时钟?
-shenzhen/yap回复于2001-3-1811:
03:
00
还是程序问题,定时准确确实需要考虑中断响应时间.对于你的应用,加1快,不加1慢,假如误差正好为0.5的话,计数50000次的误差率为0.5/50000=1/100000,那么一天的误差为86400/100000=0.864秒,所以两天差1秒也就不足为奇了(手表也有误差的).
给你一个软件解决的办法供参考,用此方法可以达到软件上的零误差,计时精度完全取决于晶振的精度.
其实也很简单,不用给定时器装任何初值,定时器总是从0到65535后自动翻转,然后你计中断数n,用n去计算时间.对于6M的频率,每个中断的时间为131072us.
还有些算法技巧,自己去琢磨吧.
RE:
如何实现准确的电子时钟?
-广东/晓奇回复于2001-3-1811:
20:
00
定时还是要以秒为单位,把秒单位误差消除到最小以后,一般会出现日误差,或数日误差1秒,我的做法是把这个误差秒摊算为多少个nop,在把这个nop有选择的插入在rewrite之前,这样的修正解决了一点精度问题,这是从世界时润秒里抄来的,如果想简单还可以:
假定是3天快一秒,则每3天在后半夜润上1秒,神不知鬼不觉,不过这样的钟别卖给“夜猫子”,给夜猫子的最好在白天润秒好一点:
)
我自己做的钟还没有调好呢,主要是实验了一下,找到了解决的办法以后就不再有那么浓厚的兴趣了,有点“叶公好龙”。
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-1811:
29:
00
晓奇兄,你如果找到了好的办法,也告诉我们,让我们分享。
我有一种增大计数器计数位数的方法,不知对你有用没用?
我是想用在日修正里,用T1计一日,T1一日中断一次。
实际方法也很简单,就是更改TH1.7,发现是1了就清0,同时计下清0的次数,到达一天时才允许T1中断。
RE:
如何实现准确的电子时钟?
-xian/jiangyu回复于2001-3-1811:
38:
00
我理解了,xinxin和shenzhen/yap说的是相同的道理,不过xinxin的更详细,还给出了程序,并且计算了初值,8次中断,其中7次是和yap说的初值为0一样,只有一次装初值。
谢谢楼上几位了。
RE:
如何实现准确的电子时钟?
-广东/晓奇回复于2001-3-1811:
43:
00
xinxin的长时间中断一次的做法确实让我大受启发,我用at89c51,一个扫描键盘和显示,一个定时算秒,资源好像就这么多了,我当初编定时好像是每秒钟重装ct090几次,还算了一个表,逐个分频法试,如果一早有xinxin的办法,就不用那么辛苦了:
)
RE:
如何实现准确的电子时钟?
-xian/jiangyu回复于2001-3-1811:
54:
00
有用就好。
不过具体实现起来还有一点一定要注意,就是把TH0.7由1清为0的时候,要查一下TL0.7,如果TL0.7=1就别清TH0.7,只有在TL0.7=0时才清TH0.7,也就是要避开进位的可能。
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-1812:
20:
00
jiangyu:
看来你电话里说的问题已经解决了,我还没试呢。
RE:
如何实现准确的电子时钟?
-shenzhen/yap回复于2001-3-1812:
24:
00
为什么要装初值?
不要因为计算问题去牺牲精度,我就是把我的计时单位定义为1个中断(0.131072)秒,只是在显示时再去换算成以时分秒为单位的时间.
RE:
如何实现准确的电子时钟?
-上海/tyw回复于2001-3-1816:
21:
00
各位讨沦了半天,想干什么?
要这样精确的时钟,我的看法是如果作为分时计度器之类的
抄表系统终端计时,靠晶振是不够的,十年以后的累计不可想象.我的方法是用中央台校
时信号校准,看似复杂一点,但大批量加工时,可把校时装置模块化.最好用短波10M信号,
能加入频率锁相电路,性能更可靠.中波的我做过,电容器用高频蜡封固,开了一年也不逃
台,中波优点是频带较宽.
RE:
如何实现准确的电子时钟?
-景洪市/suncat回复于2001-3-1819:
47:
00
32768Hz的晶体,加上一个24分频就可以了,价格也就0.5+1.2元。
RE:
如何实现准确的电子时钟?
-景洪市/suncat回复于2001-3-1819:
49:
00
32768Hz的晶体,加上一个15分频就可以了,价格也就0.5+1.2元。
RE:
如何实现准确的电子时钟?
-深圳/hunterluo回复于2001-3-1823:
42:
00
时钟源的精度是问题的关键,软件只是为了显现这个精度,并不能提高精度,
32768的精度不高(在5--10PPM)左右,进行温度补尝差不多是唯一办法了,或象手表那样带在身上,就很准了。
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-1913:
14:
00
总结一下:
外加晶体震荡除非是恒温或稳频晶体能提高精度,用普通方法外加普通晶体确实无法提高精度。
单片机用的晶体据说可达到1-5PPM,比普通手表的晶体5-10可能还要稍高,至少可以说差不多相同的精度吧。
上边软件的讨论目的是在把软件的资源发掘到最大。
RE:
如何实现准确的电子时钟?
-郑州/谢占军121回复于2001-3-1915:
50:
00
我想了解89c51的串行通讯,以及用vb6.0编写通讯程序.
RE:
如何实现准确的电子时钟?
-扬州市/sldz回复于2001-3-2022:
22:
00
利用50赫芝交流电压过零点脉冲作门开关,对ALE+RD的脉冲进行记数,然后将记数值与初值通过一定的算法比对修正。
RE:
如何实现准确的电子时钟?
-Nanjing/星星回复于2001-3-2120:
17:
00
楼上的讨论使我糊涂了,好象说定时器中断可能产上几个不确定的机器周期的误差。
其实用定时器可做的不多计或少计一个机器周期!
没有累计误差。
我的定时器每秒中断100或200次,用这10mS或5mS做钟基准,也没因软件产生多大误差。
我的钟精度只与晶体有关。
我可没有定时器单独做钟,还要用这5-10m做采样、测试、键盘等。
提高时钟精度应设法提高晶体的精度。
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-2123:
09:
00
to上海/tyw:
请较详细介绍用电台报时信号校准时钟的方法。
RE:
如何实现准确的电子时钟?
-广东/晓奇回复于2001-3-2123:
50:
00
请到c51论坛上艘一下“时钟”,那里曾经有过一轮“博杀”
RE:
如何实现准确的电子时钟?
-深圳/hunterluo回复于2001-3-2123:
53:
00
一般买到的通用晶体(单片机本振用)不作校准使用,精度在几十PPM,比钟表的要差些,一般通信用的晶体是5PPM,10PPM,小于2PPM,一般都要温度补尝了。
1PPM的价格在10元以上,体积一般都大很多,进口仪器用1PPM的温补晶体要一千多!
!
RE:
如何实现准确的电子时钟?
-Nanjing/星星回复于2001-3-227:
52:
00
那儿有较便宜的1ppm晶体?
价格多少?
RE:
如何实现准确的电子时钟?
-上海/tyw回复于2001-3-259:
53:
00
收音头可用普通外差式收音机(如有一种袖珍式的用耳塞听的调频调幅收音机就很合用),直接从喇叭或耳机插口取出信号(可能要作一些电平调整),输送到二个带通滤波器的输入端,一个调到1600Hz,一个调到1000Hz(最后一响),带通可用LM567做,外围另件少.(也可用LM324做,较复杂)在时钟分计时到58分时对两个带通输出端采样,如能测出带通输出大于0.5秒就计一次数(小于0.5秒有可能是音乐声),1600Hz计数5次,1000Hz计一次,条件满足,就对你的电子钟分十位,个位清零.如果清零前分十位为"0",则时个位不处理,分十位不为"0',则还需对时个位加"1".在每小时的58分左右能符合1600Hz大于0.5秒且连响5次再加1000Hz一次只能是报时信号.这个概率足够大了.收音机调到550KHz(中央台),频带较宽,不易跑台,复盖面广,不用天线.用调频段,容易实现锁频,但复盖面不大(100Km方园),郊区收不好.短波复盖面广,易锁频,但通频带窄,要天线锁相环,中波可用LM567(500K)或CD4046做,但几百pf的变容二极管不好找.短波锁相(即压控振荡器)价格较贵(20多元).
不过我用中波试过,密封双连把拉线盘拆掉,调好频率后用高频蜡固定,用了一年很正常(室内!
).
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-2513:
34:
00
讲的很详细,谢谢TYW。
RE:
如何实现准确的电子时钟?
-广州/jw5th回复于2001-3-264:
07:
00
买一只信誉不错的石英表,(年误差不超过2秒,如RADO等),其余的不必祥述了吧。
RE:
如何实现准确的电子时钟?
-深圳/jasum回复于2001-3-2611:
12:
00
用单片机做时钟,如果用32.768KHz的晶振,再使用一个定时中断,软件处理容易,精度由硬件影响.若用其它频率作为定时器的时钟源,软件处理绝对不要引起累积误差,所以计数为循环计数,不置初值,因此装初值,加补偿绝对不可取,这是初学者常犯的错误,若无人指点,会一直被此问题困扰.
RE:
如何实现准确的电子时钟?
大家请注意,没有误差-郑州/syj回复于2001-3-2616:
44:
00
我来说几句,你们可以用8031的定时中断方式2
计数初值自动装入,误差当然就没有了
只不过1秒钟中断次数较频繁,对其他程序有
一点影响,我做过这么1个万年历,准确度是
DS12887的300多倍(12MHZ/32。
768KHZ)
不行给我发EMAIL
RE:
如何实现准确的电子时钟?
-绵阳市/yunlong_z回复于2001-3-2620:
14:
00
jiangy先生:
那段程序里是不是还应该考虑ADDA,TL0和MOVTL0,A所占有的周期?
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-270:
33:
00
实际上,初值5EE0H是理论值,象ADDA,TL0之类的固定误差可以通过对初值的微调加以修正。
如果1S的计数有500000次,可以修正到1/500000。
RE:
如何实现准确的电子时钟?
-Nanjing/星星回复于2001-3-279:
59:
00
TOtyw:
前几声应是800Hz.
你可能调在谐波上了。
RE:
如何实现准确的电子时钟?
-Nanjing/星星回复于2001-3-2710:
08:
00
如果真需要很高精度,
建议买个GPS接收头
它每秒都有数字输出,精度不比中央台差。
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-2713:
16:
00
GPS的精度就高多了,但是RMB数得4位呀。
对于民用,电台校时足够了。
RE:
如何实现准确的电子时钟?
-广州/vectorlee回复于2001-3-2717:
31:
00
程序准有个鸟用!
!
!
!
在这行谁都知道晶振没几个准!
!
!
!
RE:
如何实现准确的电子时钟?
-广东/晓奇回复于2001-3-2718:
22:
00
醉翁之意不在酒啊,老兄。
主要是讨论编程思路、技巧。
RE:
如何实现准确的电子时钟?
-广州/jw5th回复于2001-3-287:
15:
00
定时系数非自动重载方式的软件导致的定时误差来自两个因素:
1、定时器计数溢出后,定时器立即停止计数,要等当前正在执行的指令运行结束后的下一个机器周期,才能响应中断,每次响应前执行到哪一条指令不可预测,导致的延迟也就不可预测。
2、定时系数重载后,定时器才重新开始计数,因此而导致的延迟可以预测。
RE:
如何实现准确的电子时钟?
-Lianyungang/makesoft回复于2001-3-2810:
19:
00
不同意楼上的说法‘定时器计数溢出后,定时器立即停止计数’。
RE:
如何实现准确的电子时钟?
-广东/晓奇回复于2001-3-2813:
01:
00
溢出后会自动继续计数,只不过是从零开始.
RE:
如何实现准确的电子时钟?
-广州/jw5th回复于2001-3-2818:
51:
00
Sorry,是我的错,我把其他CPU的特性搬到51来了.
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-3-2818:
52:
00
定时器是独立于CPU的硬件计数器,51CPU只管理启动和装初值。
一旦定时器启动之后,就一直在计数,正象makesoft和晓奇所说的在定时器溢出后会从0重新开始计数,不存在等待问题。
定时的误差除了晶体自身的误差(主要指晶体的频率漂移误差,而晶体频率偏离标称值的固定的绝对误差是可以修正的)以外,就是来自从定时器溢出中断到装初值这段时间的误差,由于从溢出到响应中断的时间不确定,所以存在不定的误差。
还有上边提到的修正精度问题。
采用1秒装1次初值就是为了提高定时修正精度的。
在装初值时加上计数器已经计的数值,就是为了解决从定时器溢出到装初值之间的不确定误差的。
深圳/jasum的特殊晶体32768晶体选择有独到之处,免除了装初值的误差。
RE:
如何实现准确的电子时钟?
-上海/tyw回复于2001-3-2819:
03:
00
Sorry,前几声应是800Hz.最后一响,中央台为1000Hz,上海台为1600Hz.
RE:
如何实现准确的电子时钟?
-guangzhou/wuyingjie回复于2001-3-300:
53:
00
我曾考虑过类似的钟,用PIC单片机,双晶振,16位计数器产生秒中断,即秒误差不大于1/32786,如果有误差(肯定有),设定修正值,每天清除一次误差,每月再清一次,每年还要清一次。
这样经过几年的经验积累,这钟的准确度应该很高。
就算温度影响,一个地方每年的平均气温相差不大,就算晶振不准,这钟也都很准了。
理论上,每年误差小于1秒。
我估计10秒以内应该是不成问题的。
晶振不在于准,而在于稳。
如果高兴用个大功率(5W)电阻来恒温,也没什么难的。
当然,如果有广播对时,我上面说的也就意义不大。
美国、英国、日本、意大利等已有了实时间无线广播(每分钟一帧),中国也可能会实现的。
那时的广播钟任何时刻分钟都是准确的。
RE:
如何实现准确的电子时钟?
-广州/jw5th回复于2001-4-17:
55:
00
在广州的朋友可以试一试接受139.000MHz的信号,每5分钟一帧,512BPS夹杂在寻呼信号中发送。
RE:
如何实现准确的电子时钟?
-绵阳市/yunlong回复于2001-4-211:
05:
00
wuyingjie:
请问如何用大功率电阻来对晶体恒温?
请指点。
RE:
如何实现准确的电子时钟?
-苏州/lyghj回复于2001-4-417:
44:
00
以前在《无线电》杂志(应该在85年以后,95年以前)上看到有这样一种思路:
彩色电视信号的副载波信号要求要有很高的稳定性,CCTV的电视信号中的副载波好象是用原子钟稳频的。
所以可以利用这个信号来稳定时钟,不过这样虽然收音头可以省掉了,但要多加了个高频头和相应的中放电路。
RE:
如何实现准确的电子时钟?
-广东/晓奇回复于2001-4-417:
50:
00
可以选择合适的ptc恒温吧?
lm399稳压源好像就有恒温电路
RE:
如何实现准确的电子时钟?
-深圳/小麦回复于2001-5-2123:
01:
00
经过这番讨论,我想大家都懂了,我真是收益不少呀!
RE:
如何实现准确的电子时钟?
-西安/xinxin回复于2001-5-221:
02:
00
还有人来E-MAIL问调节精度问题,回答如下:
(以6MHZ晶体为例)
采用方式1定时1S=10*(65536-15536)*2US,如果初值15536修改1时,调节量为1S/50000,一天就是1.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- D03 编号 241021 文件名 如何 实现 准确 电子 时钟
![提示](https://static.bdocx.com/images/bang_tan.gif)