在一个小项目里面,用PIC16F913来主控,用来记录N个脉冲的时间,时间精确到10us,看了下资料,晶振可以最高20M 20M/4分频可以到5M。但是看了下第定时器的中断,软件模拟了下,进中断和出中断就要3.XX个US,如果加上脉冲捕获进中断的时间,一起的误差会不会超出10US的范畴???(思路是:一边捕获脉冲。一边开个5US的定时器片,一直累加。当脉冲捕获到N值时,关定时器。看定时了多少个5US) 刚接错PIC,不知道这样可行不?高手路过,喵喵。。。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
如果脉冲频率很慢,可以借助软件定时,即开启定时器溢出中断,中断时软件计数加1.
定时器应该设置成循环方式。
这样一来,中断源增加到2个。pic16只有一个中断入口,所以中断时应先查计数,后查
定时。中断延时误差是个常数,可以用软件修正。
-----------------------------------------------------------------------
谢谢su_mj000 的关注,
看了下pic16f914的技术手册:
设计方案为: 将timer1的设置为外部计数模式。将脉冲信号从TICKI引脚输入,TMR1寄存器记录。使用PIC内部资源的捕捉 / 比较 /PWM (CCP)模块中的比较模式, 用16位CCPRx寄存器值与TMR1寄存器的值进行比较。 当发生匹配时,CCPx模块可产生软件中断。比如说我需要设置1000个脉冲计时,置CCPRx为1000的值,同时清TMR1寄存器值。当来一个脉冲的话。TMR1寄存器值+1,一旦与CCPRx发生匹配时,产生软件中断,中断里面设置为关定时器。
(原文件名:2.JPG)
定时器使用Timer0 模块的8位定时器 :每定时一个周期(00~FF)加一,(加一在定时中断里面做)当捕获模块发生匹配中断时,关定时器,同时读TTimer0模块寄存器值,通过系统时钟可以换算出时间为: (256*N+ TTimer0模块寄存器值)*FOSC/4 其中N为加一次数。如果需要更高精度,可以补偿进定时器进中断处理的时间【(N*进中断到出中断的时间)+捕获匹配进中断和出中断时间】。
(原文件名:3.JPG)
这样的方案是否可行? 感觉这样操作容易点,也容易控制精度。
一周热门 更多>