我正在使用arduino mega 2560,我想使用定时器1的计数器,我在定时器1计数器的引脚11上给出了100 Hz的时钟,我还配置了定时器1寄存器B并设置CS(时钟select)位,但由于某种原因它不起作用。下面是我的代码,如果有人能在这里指出我的错误或修改代码以纠正它或只是给出任何建议,我将不胜感激。我还附上了文件。
int val;
void setup()
{
startCounting();
}
void loop()
{
val =TCNT1;
Serial.println(val);
}
void startCounting() //Encoder FrequencyCounter Start
{
/* Timer 1 would be used for frequency counter. Using event counter mode of timer.*/
TCNT1=0x00; //Reset Timer 1 Counter.
TCCR1A=0x00;
TCCR1B=0x07; // To set all pins CSn2,CSn1,CSn0 to use external clock source on Tn Pin. Clock on rising edge.
//pin 11 for timer 1 will be used as an external clock.
}
最佳答案
正如您所说并且 CSn2:0 = 7,您正在尝试使用外部时钟源。然而,该模式下的输入引脚不是 OCnA(OC1A=引脚 11),而是 Tn,然后 Tn 将驱动 CLK(Tn) 并递增 TCNTn。
不幸的是,在 ArduinoMega 上,板上仅实现了 T0(D38) 和 T5(D47) 接头。其余的 T1、2、3 和 4 不是从芯片本身路由的。
!不要弄乱 Timer0。核心库使用它。
您可以尝试移至 Timer5 并使用 D47 上的 T5 作为 100Hz 输入。
如果您尝试创建频率计数器,我建议使用输入捕获。有关示例,请参阅 InputCapture.ino
关于使用 arduino mega 2560 的计数器模式定时器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20950769/