请教马老师一个精确定时的问题,您先前的帖子我看过了。[问题发在技术版了,不知您是否
抱歉,已经在技术版发了http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=1026765&bbs_page_no=1&bbs_id=1000
多谢! 马老师在吗?给个建议我也就死心了。 我看过了.由于中断的响应,已及进入中断都不是完全确定的,因此无法做到非常准确的定时产生一个动作(严格的每隔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]