计数器模式下的定时器使用arduino mega 2560

时间:2014-01-06 13:10:34

标签: timer arduino avr atmega

我正在使用arduino mega 2560并且我想使用定时器1的计数器,我在定时器1计数器的引脚11上给出了100 Hz的时钟,我还配置了定时器-1寄存器B并设置了CS(时钟)选择)位但由于某种原因它不起作用。下面是我的代码,如果任何人可以在这里指出我的错误或修改代码来纠正它或只是提出任何建议,将不胜感激。我也附上了这个文件。

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.
}

1 个答案:

答案 0 :(得分:2)

当您声明并且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