打印

拿牛刀杀**的感觉

[复制链接]
楼主: aolin
手机看帖
扫描二维码
随时随地手机跟帖
41
zhiwei| | 2007-7-25 12:43 | 只看该作者 回帖奖励 |倒序浏览

51好久没有玩了

定时器好像有重装的,用重装模式,忘了是不是要通过软件才能设置重装,如果是的话就有软件延迟,软件误差无法避免;如果纯硬件重装的话,软件上不会有误差的,算法误差也不会有,误差只是晶振误差了。不过51的重装不好用,如果用avr,定时器全是自动重装的,溢出后自动清0,绝对不会有误差!

使用特权

评论回复
42
车载音响| | 2007-7-25 17:41 | 只看该作者

回gyt:27楼在置初值的时候发生外部中断怎么办?

使用特权

评论回复
43
gyt| | 2007-7-25 18:02 | 只看该作者

很简单

进行补偿就可以了

使用特权

评论回复
44
5880527| | 2007-7-25 19:37 | 只看该作者

出个变态的题目

12MHZ晶振,51单片机,用一个脚(任一脚都可以)输出500HZ的方波脉冲,软件无误差。如果你做好了那LZ的问题就很轻松的解决了

使用特权

评论回复
45
conwh| | 2007-7-25 21:01 | 只看该作者

这个钟还没有开始计时呀

使用特权

评论回复
46
why_buaa| | 2007-7-26 00:22 | 只看该作者

自动重装无累计误差!

  每次中断响应差几个周期又有什么关系呢?定时器跑到了不管你响应没响应都会重装初值继续跑,你只要在这个周期里的任何时间响应了,把累加值加上,不要漏了就可以了。如果你怕响应不过来,你完全可以设成跑满63356中断一次的模式。
  要理解累计误差的概念。几个周期的响应时间虽然是不定的,但是它不会影响到定时器的下一次中断的准确到来。定时器是硬件自动跑的,与你响应不响应无关!你只要不漏记一次中断,你的误差就永远不会超过一次定时器周期!
  同理,不管定时器的周期是多少,你只要准确的记下了中断的次数,并且已知周期的准确时间,你就可以算出当前的准确累计时间 ,误差永远是在一个定时器周期之内!
  
  用51做时钟,时钟精度其实完全在晶振上。不要在中断的响应时间上白费力气,和中断响应完全没有关系。要保证精度,就用准确点的晶振,一般低频的比高频的准一些。但是还有一个很重要的因素是外部温度,这一点几乎是无法克服的。

使用特权

评论回复
47
ayb_ice| | 2007-7-26 07:44 | 只看该作者

建议大家去分析RTX51 TINY的系统定时器中断...

另外配合RTX51 TINY的os_wait2(K_IVL, ticks),如果你搞明白了什么叫K_IVL就差不多了...
51的232通信为什么喜欢用11.0592MHZ的晶振....
就拿标准的51 12M晶振做RTC,这东东只用一个中断T0中断绝对可以搞定,51的中断响应时间在3~9个周期,如果10MS中断一次T0的初值是65536-10000 = 0xD8F0
在中断中可以这样送初值ORL TL0,#0F0; MOV TH0,#0D8H,这样只要中断响应小于16个周期不会产生任何误差...
方法很多这里不一一列举...

使用特权

评论回复
48
后学| | 2007-7-26 12:48 | 只看该作者

为什么不考虑晶振误差?

使用特权

评论回复
49
新好男孩| | 2007-7-28 09:24 | 只看该作者

一点不成熟的想法,没有试验过.

已经找到方向了,正在验证中!
27楼说的方法是行不通的:
1, 定时器中断重装定时器时,你根本不知道从定时器溢出到中断响应已经过了多少指令周期,所以那个所谓的补偿值是很难准确去算出来的!
(

T0定时,T1计数.启动T0定时器后立即开启T1计数.
T0进入中断后关T0和关T1.用T1减T0的定时重装值.不就可以计算出定时器溢出到中断响应已经过了多少指令周期了吗?下面怎么补偿就不用我说了吧/

)
2, 避开TL0的重装值一点意义都没有! 12MHz晶体,不用TL0的重装值,每次定时中断永远都是256US的整数倍,不可能得到整毫秒或秒的.这样的重装跟不要重装是区别不大!

使用特权

评论回复
50
ayb_ice| | 2007-7-28 09:28 | 只看该作者

看来有些人是教不会了...

使用特权

评论回复
51
cooperate| | 2007-7-28 09:31 | 只看该作者

请7楼赐教:如何实现1天<1秒?





ayb_ice 发表于 2007-7-20 10:49 侃单片机 ←返回版面    

7楼: 精度没有任何问题,可以做到1天<1秒... 

关键是功耗太大,不适合电池供电... 
 

使用特权

评论回复
52
ayb_ice| | 2007-7-28 09:48 | 只看该作者

我已经说的很清楚了...

使用特权

评论回复
53
cooperate| | 2007-7-28 09:54 | 只看该作者

请7楼赐教:如何实现1天<1秒?疑惑中.....

    如果市面上常见的20ppm的晶振,其误差是1.728秒/天.即使用10ppm的晶振,其误差也已经是0.864秒/天。10ppm以下的晶振恐怕很难找到。而温度的变化使晶振偏差10几个ppm完全可能,这样即使不考虑什么其它的误差,也很难做到1秒/天的水平。
    

使用特权

评论回复
54
gyt| | 2007-7-28 10:30 | 只看该作者

无话可说:)

使用特权

评论回复
55
ayb_ice| | 2007-7-28 11:23 | 只看该作者

实际误差一般小于理论误差...

使用特权

评论回复
56
JJG| | 2007-7-30 12:38 | 只看该作者

可以做时钟,已有成品了,我就在用,误差还能接受.

使用特权

评论回复
57
寒雪纷飞| | 2007-8-3 23:42 | 只看该作者

误差是难免的,我用的12M的每小时都误差2--3分钟

使用特权

评论回复
58
gyt| | 2007-8-4 09:46 | 只看该作者

楼上的误差太大了

程序可能有错误

使用特权

评论回复
59
conwh| | 2007-8-4 10:04 | 只看该作者

误差肯定会存在的,关键就是如何修正和你具体的精度要求

以及软件补偿的要求。如你需要整点补偿,那么你就在整点上补偿一下;如果你要求是秒时刻,那么你就在秒上补偿;如果你还要在毫秒、微秒,那么就再精确一点,如果需要在n秒上的精确,那就得换片子了。

前面有位朋友说输出500K的方波,如果要精确一点的,就用PWM的输出。

使用特权

评论回复
60
su_mj000| | 2007-8-4 11:59 | 只看该作者

震荡晶体本有离散误差

震荡晶体又有温度系数,但离散误差是主要问题。建立一个定时器
重置表,可以将误差调至最小。廿年前就试过,误差可以调到每天误差
几秒钟。

使用特权

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

本版积分规则