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

标签 timer arduino avr atmega

我正在使用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/

相关文章:

c - 虚拟时间已过

c++ - 有没有更简洁的方法来做到这一点? C++ 中频

arduino - 使用 "big sound"模块和 arduino 创建分贝计

c++ - AVR 在类构造函数中分配内存

c++ - 更换 PC 后 Sleep() 变得不太准确? (C++)

Javascript setTimeout 不允许间隔低于 100 毫秒

java - 等待物体完成移动,然后执行操作

node.js - 如何将皮诺奇连接到 apache couchdb

c - 我如何发送测量温度的字符,以便在我的串行捕获程序中可以查看它(使用 Realterm 或 Putty)

c - AVR:C 微 Controller 中的设置位