世俱杯 2025

登录 免费注册 世俱杯 2025 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

单片机定时精度问题!

作者:我是小可 栏目:单片机
单片机定时精度问题!
大家好,我最近在设计一个单片机日历,

用C语言编写程序,发现定时不是很准,

而且相差很多,个人认为不应该这样啊?

不知道有没有什么好的办法可以解决问题,

在C语言里嵌入汇编可以解决吗?

请高手帮助解答,谢谢!

2楼: >>参与讨论
computer00
不关C语言的事,是你自己程序没弄好。
最好使用8952里面的定时器2做自动重装模式,这样会准确很多。

如果你用软件重装的话,要考响应中断及保护现成所消耗的时间,在重装时要将它们加上。

3楼: >>参与讨论
我是小可
多谢!
多谢,圈圈的解答,

但是,可能是我在处理中断的时候没有处理好,

用自动重转载模式,可以解决这个问题吗?

4楼: >>参与讨论
judge
相差多少啊。
一般12M的晶体一天能差10多秒。即使自动装的话
软件可以补偿。
32768的晶体吧。  我用30PPM的一天只差1秒。 不补偿。


5楼: >>参与讨论
awey
RE:
1、定时器用自动重装入方式
2、中断服务程序不要太长,更不能大于定时间隔。
3、不需要嵌入汇编

6楼: >>参与讨论
我是小可
回:judge
一般12M的晶体一天能差10多秒。即使自动装的话
软件可以补偿。

我也想过补偿的办法的,但因为用人眼观察出来的误差

就有差不多半秒了,这样补偿一次还可以,但时间长了

还是有累计误差的,


所以我想最好不用补偿的办法解决它

7楼: >>参与讨论
我是小可
回awey
如果用自动重装载的模式的话,

最大定时因该市 256us 吧

也就是说,中断的处理程序要小于这个时间就行吗?

8楼: >>参与讨论
judge
那肯定的
就算你再高的算法和处理技巧,误差一定存在。
看你要求是怎么样的。
1天差1秒和10年差1秒是不一样的。
要求高只能GPS对时了。

9楼: >>参与讨论
我是小可
回judge
呵呵,你误会了,我没有别的意思,

就是想让单片机内部的定时准一些,

不想用补偿的办法,

那样的话,感觉有些假 ,呵呵

10楼: >>参与讨论
maychang
“那样的话,感觉有些假”
此话看不懂。
那么什么是真的?你的钟走不准是真的还是走得准是真的?

11楼: >>参与讨论
qiangjidan
外部


12楼: >>参与讨论
computer00
也许他所说的假,是指不是每个时刻都是准的,
因为是软件隔一段时间修正一下,所以在某个时刻,是不准的,而过了这个时刻后,又变准了。

不过,一般来说,短时间的偏差还是可以接受的。就像你每天去电台对一下表一样。

13楼: >>参与讨论
awey
回楼主:

如果用自动重装载的模式的话,
最大定时因该市 256us 吧
也就是说,中断的处理程序要小于这个时间就行吗?

没错。
你可这样处理,假如定时是250uS,用一个变量累计中断次数,中断的处
理程序只让此变量加1即可,而在主程序里,判断此变量是否大于某一
值,比如200,即50mS,如果大于就执行处理,并把此变量减200,如果小
于200则不理会,这样处理程序的时间就不会受到限制了

14楼: >>参与讨论
computer00
如果用8952的话,用它的定时器2,就有16位的自动重装了。
如果是AVR的,就更不用说了。

15楼: >>参与讨论
kyflash
跑快了倒可以试试在中断里面加空操作调整
如果晶振不准等因素,你想做的准,不补偿怎么行啊。
定时不准,跟用C还是汇编关系不大吧,有兴趣可以去computer00师兄的BLOG看他以前的电子钟作品

16楼: >>参与讨论
conwh
应该加有补偿,因为晶振也有误差.
使用市电应该很准的

17楼: >>参与讨论
zhf0964
实际上要做好一个时钟难度相当地大!
建议楼主采用内置晶体、带TCXO的外置时钟芯片。
如:RX-8025,DS3232等等。
像你这样只用单片机的定时中断,又是用C语言来
编程,肯定是做不好的。

18楼: >>参与讨论
fushaobing
我建议用专用时钟芯片
要想时间准,就用时钟芯片,简单省事

19楼: >>参与讨论
松鼠的大树
关键是硬件
硬件决定了软件能达到的性能的上限。

如果用单片机定时器实现的话,首先要考察一下你的定时器加一对应的时间是多少,这个称为计时粒度;然后根据你的功能要求确定计时间隔,比如,1ms,10ms,100MS或者1s  ;查芯片手册或者做试验,弄清楚自动重装模式中自动重装这个过程消耗的单片机时钟周期,计算出它的时间长度;用你的计时间隔减掉重装的时间,就是你真正要实现的计时时间长度;看看这个实际的计时时间长度能不能被计时粒度整除,能的话,商就是计时器的计数值,不能的话,你的时钟是无论如何不可能不作修正就准确的。

另一方面,考虑到晶振的离散性,计时理论计算很准确,也最好还是做校准功能,允许用户定义校准间隔和调整值(+/-)。

供参考

20楼: >>参与讨论
gfs0521
软件就和大家所说的用自动装载模式
硬件你用的振荡器精度要高,这样就可以做得很精确了


参与讨论
昵称:
讨论内容:
 
 
相关帖子
请问各位大虾一个问题,急!!
请问行列式键盘的码值是怎么得来的?
请教单片机与ROM的通信
关于P89v51RD的PWM问题,看看我错什么地方?
请用过的前辈推荐仿真器


Copyright © 1998-2006 tgdrjb.cn 浙ICP证030469号