打印
[AVR单片机]

用ICP1捕捉功能如何做到100ns时间的测量?

[复制链接]
1538|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
newmankinds|  楼主 | 2008-12-16 22:19 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
各位,我需要做个高精度时间差的测量.想用ICP1来做捕捉,结合TIMER1来测量时间.具体应用是发出一个脉冲,然后测量脉冲的返回时间,硬件上我用示波器测量返回时间从50ns--100ns到几十us.我在发出脉冲的同时,启动timer1(timer1从0开始记数据,计数频率用20Meg),将返回的脉冲接到icp1里用捕捉功能读取timer1的计数值,可以做到50ns的精度,可是在1us以内测出来的有问题,小于500ns的似乎测量不错来,我猜测估计是指令执行导致的,就是我启动TIMER1的过程中,指令时间占用了时间,导致读出来的TIMER1的值都是0或很大....奇怪的很,我都用中断做了,还有什么更好的方法来实现?

void DriverOut(void)// send 150ns pulse
{    
    uchar t;
     Driver_High;
    asm("nop");
    Driver_Low;    //send pulse    
        
    SyncFlag=True;    //new frame coming.start Timer1 counter.        
    TCNT1=0;        //reset timer1,and start to measure
    TIMSK1=(1<<TICIE1);        
}

void Timer1_Capture(void)//interrupt subfunction
{
      if(SyncFlag)
    {  
       TIMSK1=(0<<TICIE1);         
       SyncFlag=False;
       TimerValue.Word=ICR1
       DataOkey=True;   
    }
}
是否是我的程序不够精简导致短时间测量不出来

相关帖子

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

本版积分规则

42

主题

99

帖子

4

粉丝