Arduino 的输入捕捉(ICP)怎么不行呢?
想用Arduino的PB0口来读取PWM的电平变化,以便计算信号频率。但是按照寄存器设置后,发现进不了中断。哪里出了错误?ICP1这个口,对于触发的电平有要求吗?datasheet上没有说呢?下面是例程,很简单,就是循环然后等中断:int i=0;
/* Initial Function*/
void ICPinit(){
SREG = 0;
TCCR1B = (1 << CS12) | (1 << CS10);//1/1024
TCCR1B = (0 << ICNC1) | (1 << ICES1);// Enable Noise Canclation & Set the Rising edg detect
TIMSK1 = (1 << ICIE1);// Enable the Input Capture Interrupt
ICR1 = 0;// Clear the ICR
TCNT1 = 0;// Clear Counter1
SREG = 0x80;// Enable the Total Interrupt
}
void setup(){
pinMode(8,INPUT); // 这是对应Mega328的12#脚
ICPinit();
}
void loop(){
while(1){
digitalWrite(13,HIGH);
}
}
#pragma interrupt_handler timer1_CAPT:11
void timer1_CAPT(void)
{
digitalWrite(13,LOW);
i = ICR1;
TCNT1 = 0;
} lz既然已经用avr的寄存器操作了,何必对GPIO的操作还使用arduino呢...
不知道你是否用jtag,发现进不了中断的?
我在msp430用过捕获模式, 计数器要设置为连续计数,不能设为计数至某个值然后归零,否则的话,没有设置计数基准的话,计数器值永远是0....
你可以看下 会不会是这个问题
我不懂avr ,只能提供给你一个可能的思路了 本帖最后由 Freeman 于 2012-8-10 16:55 编辑
┏ωǒ┛菰独 发表于 2012-8-10 15:09 static/image/common/back.gif
lz既然已经用avr的寄存器操作了,何必对GPIO的操作还使用arduino呢...
不知道你是否用jtag,发现进不了中断的 ...
谢谢你的回复手头没有jtag仿真器啊。所以想用13脚的LED来监测一下。 我也是新手,觉得arduino还是方便些的,只是偶然用到这个功能,才看了看寄存器的操作。
关于第二段话,我也在奇怪这个问题,到底TCNT2有没有开始计数呢,每次读出来都是0,但是datasheet上也没找到特别的话啊,我就设置了WGM12:0 = 0这三位规定它工作模式为normal,不就应该可以工作了吗?还非要打开计数器溢出中断它才会开始计数吗?
谢谢您的帮助 搞定了…… Freeman 发表于 2012-8-11 02:27 static/image/common/back.gif
搞定了……
可否把搞定了的程序贴出来大家学习下 关注,楼主或是谁能把解决思路说说吗?
页:
[1]