亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino 的内部定时器

组件和用品

Arduino UNO
× 1
LED(通用)
× 1
电阻 220 ohm
× 1

关于这个项目

概览

如果您需要计算准确的时间,您需要使用计时器,但通常使用 Arduino 的内部计时器并不那么容易,所以在本教程中,我尝试以简单的方式解释如何使用它们。

使用计时器非常重要,因为在 delay() 函数期间您不能做任何事情,但是使用计时器您可以做任何事情,因为当时刻到来时,它会激活中断。

我使用TIMER0是因为它是最简单的定时器,也许以后我会解释其他定时器。

工作原理

首先要看ATmega328P的datasheet。

这是计数器框图,看看这个你可以理解它是如何工作的。

预分频器从一个时钟周期接收一个脉冲,然后将其传递给控制逻辑,因此控制逻辑将 TCNTn 寄存器加 1。

现在我们可以将 TCNTn 的值与特定值进行比较。当TCNTn寄存器到达这个值时,就知道过了特定的时间。

此方法称为“比较时清除计时器”的 CTC 模式。 TCNTn 寄存器的值与 OCRn 寄存器进行比较,当发生比较匹配时,TOVn 产生中断。

另一个重要的是预分频器,通过它您可以创建时钟的不同分频,实际上 16MHz 太多了,但是,多亏了预分频器,您可以创建它的一些约数。这取决于TCCR0B寄存器的配置。

另一个重要的事情是确定OCRn寄存器的值来计算特定的时间,你需要一点数学。

我知道所有这些看起来都太复杂了,但我相信下面的代码会解决每个问题。

在这种情况下,我们每 0.001 秒激活一个中断请求。

 TCCR0A|=(1< 

最后设置预分频器很重要,因为在这条指令之后定时器开始计数,如果你需要停止它,你必须重置TCCR0B的所有位。

下面是一个例子。

代码

  • 内部定时器
内部定时器Arduino
/*该程序使用内部定时器每 1 秒打开和关闭引脚 13 上的 LED*/int timer=0;bool state=0;void setup() { pinMode(13,OUTPUT); TCCR0A=(1<=1000){ state=!state;定时器=0; } digitalWrite(13,state); }ISR(TIMER0_COMPA_vect){ //这是中断请求定时器++;}

示意图


制造工艺

  1. Arduino Spybot
  2. FlickMote
  3. 自制电视 B-Gone
  4. 主时钟
  5. 找到我
  6. Arduino Power
  7. Tech-TicTacToe
  8. Arduino Quadruped
  9. Arduino Joystick
  10. 数控机床
  11. Earth_Analyzer
  12. 家庭监视器