打印
[AVR单片机]

M64 timer0定时偏差过大的问题

[复制链接]
2539|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
reflecter|  楼主 | 2009-3-26 23:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
/*
 *调试时一个疑惑,为何下述TMR0应用,示波器测量,发现偏差将近1半:
 *8分频,定0.5ms,测高/低脉宽在300us
 *8分频,定0.1ms,测高/低脉宽在60us
 *32分频,定2ms,测高/低脉宽在1.16ms
 *
 *
 */
#ifdef USING_TMR0
ISR (TIMER0_OVF_vect)
    {
        
        
        TCNT0=TMR0_LOAD;
        
        if(bit_is_set(PORTB, PB3))
            PORTB &=~_BV(PB3);
        else
            PORTB |=_BV(PB3);
        
    }
#endif    

思路解释:
Winavr + Avrstudio,
4MHz,8分频,TMR0_LOAD随定时时长而变.每次溢出,取反PB3(有更快捷的操作方式?),所谓高/低脉宽时长,即在PB3口测得.
调试察看过上述代码的汇编程序,理论推算下来,对PB3口操作前后,耗时均在16us左右.

初始化TMR0代码如下
#ifdef USING_TMR0
        TCNT0=TMR0_LOAD;
        TIMSK = _BV(TOIE1);
        TCCR0= _BV(CS01);
        #endif    

不解了...
望高人指点一二!

相关帖子

沙发
hotpower| | 2009-3-27 00:11 | 只看该作者

估计是RC惹得祸

使用特权

评论回复
板凳
reflecter|  楼主 | 2009-3-27 00:42 | 只看该作者

不可以编辑贴的?刚忘了说,用的内部RC,官方说3%误差

使用特权

评论回复
地板
BitFu| | 2009-3-30 11:27 | 只看该作者

不会那么多

你的软件说明,输出波形周期是定时器中断周期的两倍
这可能是你说差一半的原因。

使用特权

评论回复
5
reflecter|  楼主 | 2009-4-1 10:16 | 只看该作者

回4楼

奥,我的测试程序思路是,每到了预定计时长,进入中断,取反PB3.
我的注释,看来是不够直白:说“定0.5ms,测高/低脉宽在300us”,是说,当初测低/高脉宽在300us(而不是理论上的500us)
不过问题已经解决了,来接贴的。
确实是内部RC的问题,换用了外部4MHZ无源晶振,完全符合的。
咱们顺便拓展开议下。
关于内部4MHZ振荡器的校正,如何实现的?有哪位英雄作过?Atmel的文档,看得人晕乎(这方面Atmel得学学Microchip,个人认为,本人无意挑起两者争端,那属于这两家公司高管之间的问题)
在Avrstudio里如何写校正数据的?地址以及数据?

使用特权

评论回复
6
dai_weis| | 2009-4-1 17:13 | 只看该作者

几乎所有的下载软件都有导航模式,为何非要在那里画勾勾

使用特权

评论回复
7
reflecter|  楼主 | 2009-4-2 11:35 | 只看该作者

7楼的回答不对题的,有IDE为何不用

不过依旧谢谢

使用特权

评论回复
8
Karlshen| | 2009-11-2 22:08 | 只看该作者
有可能是示波器没有调好
这种问题在实验室里挺常见的

使用特权

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

本版积分规则

5

主题

23

帖子

0

粉丝