|
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统 驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe |
我的时钟 |
作者:zhangxu198 栏目:单片机 |
我做了一个时钟,运行了还不到12小时,就有慢了四秒了,不知道什么原因,我已经把重新加载TH0和TL0的时间算进去了,怎么还会慢?请高手指点,难道要把中断里面的指令时间全算进去吗?谢谢 |
2楼: | >>参与讨论 |
作者: zgl7903 于 2006/9/1 19:44:00 发布:
个人见解 晶振不准,LZ的时间相对精度和晶振精度是一样的,设法匹配晶振要求的电容,或者使用微调电容来修整 |
3楼: | >>参与讨论 |
作者: 5880527 于 2006/9/1 21:39:00 发布:
你把那定时中断的开头部分贴出来大家分析一下看看 |
4楼: | >>参与讨论 |
作者: conwh 于 2006/9/1 22:11:00 发布:
后面修正一下 |
5楼: | >>参与讨论 |
作者: taoest 于 2006/9/2 0:05:00 发布:
自动重载 要用自动重载, 你的时钟肯定还有按键、显示、通信什么的,总会有偶然的打断重要程序。 如果用自动重载的定时器,就不怕了。 如果还是不准,那就是晶体的问题了。 通常的晶体误差《200ppm 如果用普通的晶体,12小时误差4秒,一点都不奇怪。 |
6楼: | >>参与讨论 |
作者: starlite_jason 于 2006/9/2 15:14:00 发布:
用单片机做时钟,肯定有这个问题了。。。 主要是由晶体引起。。。频率漂移 |
7楼: | >>参与讨论 |
作者: zhangxu198 于 2006/9/2 16:09:00 发布:
现在已经慢了二十秒了,我运行了38小时 zg17903说的微调电容哪有?是不是变容二极管? taoest说的打断重要程序,我给定时0优先级最高了,应该不会。你说的自动重装,我把重新加载的时间算进了,我想应该也可以。 starlite_jason说的频率漂移,我用的是那种外形是铁的那种。上面写的精度是12.0000M,假使由于温度等有这个问题出现也应该不会这么大吧? 5880527说的中断程序我写在下面了,请帮忙看一下呀,谢谢 多谢各位关注! T0_INT: MOV TH0,#HI ;加载高字节 MOV TL0,#LO ;加载低字节 INC DEDA MOV A,DEDA CJNE A,#CU,TT1 ;到0。5S吗?到了LED取反 CPL WLED MOV DEDA,#0 INC DEDA1 MOV A,DEDA1 CJNE A,#CO,TT1 ;是否到了1S? MOV DEDA1,#0 INC SEC MOV A,SEC CJNE A,#60,TT1 ;是否一分钟到了 MOV SEC,#0 INC MIN MOV A,MIN CJNE A,#60,TT1 ;是否一小时到了 MOV MIN,#0 INC HOUR MOV A,HOUR CJNE A,#24,TT1 ;是否24H到了 MOV SEC,#0 MOV MIN,#0 MOV HOUR,#0 TT1: RETI |
8楼: | >>参与讨论 |
作者: squarelook 于 2006/9/2 17:20:00 发布:
不要依靠单片机自己来计时 误差很大,加个PCF8563,效果会很好! |
9楼: | >>参与讨论 |
作者: ymc8 于 2006/9/3 16:47:00 发布:
可能很正常 请告诉时钟频率、定时器初值。 没有对中断响应时间进行补偿(可能每次中断都不一样) to squarelook:“不要依靠单片机自己来计时,误差很大”严重不同意,依靠单片机自己来计时完全可以做到误差只取决于晶振误差,甚至可以做到比只使用硬件电路的(同一个晶振)的时钟精度更高(因为可以采用软件温度补偿等等),许多产品已在应用。 |
10楼: | >>参与讨论 |
作者: 5880527 于 2006/9/3 20:49:00 发布:
你的程序理论上就有误差 同意楼上的,楼主你没考虑到每次中断电脑响应的时间不一致,你需要每次进入中断时对TH0,TL0进行补偿,一般只补偿TL0就可以了,比如MOV A,TL0 ADD A,#LO MOV TL0,A MOV TH0,#HI(TH0如果有进位也要补偿),这里的L0的值要进行严格计算或者试探了。单片机做的时钟应该可以精度很高,在软件方面理论上可以没有误差。我没做过电子时种。 |
11楼: | >>参与讨论 |
作者: 5880527 于 2006/9/3 20:58:00 发布:
另外 楼上有几位提到了晶振的精度影响,我从没关心过这个,不知道它的误差是不是固定的,还是随温度有很大漂移,我的感觉是在温度变化不大的情况下那个影响很小吧。如果温漂很小,那在程序上对晶振的原始误差进行补偿后做出来的时钟应该比我们常用的墙上挂的钟还准的。 |
12楼: | >>参与讨论 |
作者: 5880527 于 2006/9/3 21:27:00 发布:
我也反对squarelook 很多时候不是外部时钟可以解决的,比如在时间短到秒以下级别时(这样的情况对单片机来说最多了),你通过外部时钟总需要通讯或查询什么的吧,那也要时间啊。而且那要增加成本的,你怎么不用个GPS来定时呢 |
13楼: | >>参与讨论 |
作者: dellric 于 2006/9/4 1:19:00 发布:
没有补偿 MOV TH0,#HI ;加载高字节 MOV TL0,#LO ;加载低字节 这已经造成误差,建议使用重装载,或者把LO加2试一下 |
14楼: | >>参与讨论 |
作者: mgarm 于 2006/9/4 8:26:00 发布:
程序问题,单片机可以实现时钟的。 |
15楼: | >>参与讨论 |
作者: 后学 于 2006/9/4 8:54:00 发布:
如果你要求时间比较准确,还是用RTC更好些, 如果你要求时间比较准确,还是用RTC更好些,比如DS12C887, 用单片机无法排除一些外部的偏差, 比如晶振什么的,仅仅依靠程序没法做到很准确的时钟,~~ |
16楼: | >>参与讨论 |
作者: starlite_jason 于 2006/9/4 9:19:00 发布:
晶体震荡频率很容易受到外界的影响 晶体震荡的频率是比较稳定的,它对温度的敏感也不大,除了温度以外,负载电容的影响也很大,所以假设在一个恒温的状态下,基本可以认为晶体的震荡是稳定的,但是它的误差是存在的,通常可以通过调节负载电容来减小这个误差,所以12个小时慢4秒是非常正常的,你可以通过软件来做这个补偿,但是换了另外的一块PCB,情况又会不同,所以如果你要非常精确的时间,还是要用RTC,RTC也是需要校准的,但它本身存在一些校准电路,所以存在的误差比晶体震荡产生的要小,通过外部的电容补偿,可以把精度缩小到一个月一秒或更高 |
17楼: | >>参与讨论 |
作者: liukejj 于 2006/9/4 11:16:00 发布:
re 晶震的频率在常温下应该波动不大,我个人认为是电容的问题,还有程序是可以通过补偿方式校准的,可以设计一个动态补偿程序,这样就算换了板子或者环境误差应该都不大 |
18楼: | >>参与讨论 |
作者: gyt 于 2006/9/4 11:26:00 发布:
很明显是程序有问题 没有进行补偿。补偿以后,可以做到很准的。 |
19楼: | >>参与讨论 |
作者: zhangxu198 于 2006/9/4 20:04:00 发布:
回复5880527 你说的补偿,我也想过这个问题,不过按你上面这样的写法好像越来越慢了,本来慢了是慢了四秒,到时可能慢得更多了,是不是应该把ADD改成SUBB?多谢你的指点。 |
20楼: | >>参与讨论 |
作者: aearo 于 2006/9/4 20:34:00 发布:
要算指令 周期 的 是否 有显示延时程序 这个程序要注意 |
21楼: | >>参与讨论 |
作者: 5880527 于 2006/9/4 20:34:00 发布:
肯定该用ADD,追上延迟的时间 用我说的那个方法补偿时,你的LO要比原来程序里的大一点才是,可能要大个2、3吧,因为在进行补偿时定时器也在运行 |
22楼: | >>参与讨论 |
作者: xwj 于 2006/9/4 21:16:00 发布:
51的定时器是向上加的,这时的加就是减 设 中断间隔为A(常量) 进 中断前TL0已经计数了x(不确定) 修正程序需执行时间为 B个周期(常量,可以有指令确定) 中断触发值10000H(16位,也是常量) 那么怎么去消除x的影响呢? 这就不用多说呢吧? 不明白的话 自己去仔细想想哦 |
23楼: | >>参与讨论 |
作者: 5880527 于 2006/9/4 22:15:00 发布:
肯定应该是ADD,追回延迟的时间 LO比你以前程序的要大2左右,我没算过 |
24楼: | >>参与讨论 |
作者: ymc8 于 2006/9/5 13:10:00 发布:
普通的RTC并不比单片机做得准确,只是停电处理容易 |
25楼: | >>参与讨论 |
作者: yuntian 于 2006/9/5 18:07:00 发布:
建议你这样. 永远不要写TH0,TL0,只是读中断标志就可以了,溢出后,用一个计数器加上65536就可以了.这样精度只取决于晶振了. |
26楼: | >>参与讨论 |
作者: ritamm66 于 2006/9/5 18:15:00 发布:
没有时钟芯片始终是不准的 |
27楼: | >>参与讨论 |
作者: dyidtm 于 2006/9/5 18:59:00 发布:
中断响应是否立即?为什么不用T2? |
28楼: | >>参与讨论 |
作者: NE5532 于 2006/9/5 20:58:00 发布:
用RTC吧,看我的。 http://blog.21ic.com/more.asp?NAME=NE5532&id=15629 误差在10min/year内 |
29楼: | >>参与讨论 |
作者: ymc8 于 2006/9/7 8:49:00 发布:
“误差在10min/year内”还需要用RTC?笑话! 只用单片机就可以做到误差在 1 min/year 内,并不需要很高级的晶体,只是断电保护需要仔细考虑。 |
30楼: | >>参与讨论 |
作者: zhangxu198 于 2006/9/8 20:17:00 发布:
不写TH0,TL0那就不好算时间了,都是不是整数了 不写TH0,TL0那就不好算时间了,都是不是整数了 |
31楼: | >>参与讨论 |
作者: zhangxu198 于 2006/9/12 23:15:00 发布:
用逻辑门电路怎么样呀? 以前读书的时候用数字电路做过,但是在一块板用了好多飞线,整整一大捆,焊得头都大了,没有焊完。因为那个时候老师急着要我们交,交上去了。发下来后就没焊下去了,因为分数都打完了。现在真后悔没把它做完,不该为了分数下来就放弃。 |
|
|
免费注册为维库电子开发网会员,参与电子工程师社区讨论,点此进入 |
Copyright © 1998-2006 www.dzsc.com 浙ICP证030469号 |