felixch 发表于 2008-5-8 09:16:52

请教马老师一个精确定时的问题,您先前的帖子我看过了。[问题发在技术版了,不知您是否

抱歉,已经在技术版发了

http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1026765&bbs_page_no=1&bbs_id=1000


多谢!

felixch 发表于 2008-5-8 10:58:50

马老师在吗?给个建议我也就死心了。

machao 发表于 2008-5-9 19:56:20

我看过了.由于中断的响应,已及进入中断都不是完全确定的,因此无法做到非常准确的定时产生一个动作(严格的每隔n个CLK动作一次).

LZ原贴中有个变通的方法是可以考虑的,进一步做调整如下:

1.适当提高系统时钟的频率.

2.采用CTC方式:
    CTC方式计数器是不停的,它产生中断的间隔可以认为是准确的.不确定的是响应中断的时间,会有几个CLK的差别.而进入中断的过程到执行中断第一句指令需要的CLK也是确定的.因此主要是中断响应时间的调整和确定.

    假定定时的准确间隔时间为200(CTC方式,OCR2=200),那么设置OCR2=180,提前中断.TCNT2到达180后申请中断,并自动清零,开始从1开始计数,不会停止.TC2提前20进入中断,在中断中就检查TCNT2的值,到达20,产生动作,并清零TCNT2,然后退出中断.

    中断中的指令执行时间时固定的,这样可以调整掉中断响应时间的小的变化.

    当然,具体编写时需要考虑中断中的指令执行时间,但它是固定的,应该没有问题.(应根据中断服务程序汇编后的代码计算).

这样的话,应该能够保证前后只差1个CLK,如果系统时钟高的话,1个CLK的误差就更小了.
页: [1]
查看完整版本: 请教马老师一个精确定时的问题,您先前的帖子我看过了。[问题发在技术版了,不知您是否