极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 16376|回复: 3

整理翻译了一下TimerOne和TimerThree的中断函数文件

[复制链接]
发表于 2015-9-6 13:06:12 | 显示全部楼层 |阅读模式
本帖最后由 TilaMaker 于 2015-9-6 16:22 编辑

Timer1
这个库是用来配置ATmega168/328中的16位硬件计时器。在芯片上有三个硬件计时器可用,通过不同方式的配置可以实现不同的功能。这个库的开发初衷是用来寻找一种方式快速并且简单地设置PWM周期或者频率,但是现在已经拥有了计时器溢出中断和一些其他的功能。它可以简单地与其他的计时器共同工作。

这个计时器的精度取决于你的芯片速度和频率。计时器1的时钟速度通过分频器或者因子来进行设定。这个分频率可以设定的值:1,8,64,256或者1024。

对于16MHz:
分频 每一次计数的时间最大周期
1 0.0625uS 8.192mS
80.5uS 65.536mS
644uS         524.288mS
256 16uS2097.152mS
102464uS 8388.608mS



通常情况下:
最大周期=(分频)*(1/频率)*(217)
每次计数的时间=(分频)*(1/频率)

安装方法:
直接将TimerOne.h库文件解压缩到Arduino/libraries/
库下载地址:


自己独立开发和更新的TimerOne库也是可以使用的,可以用来支持更多硬件和更加高效的代码。

Timer3
特别注意:Timer1可以用在Mega上,但是无法支持OCR1A,OCR1B&OCR1C这三路输出引脚,它只支持A&B。OCR1A连接在Mega的11引脚,OCR1B连接在Mega的12引脚上。为了能够使用这三个引脚中的一个,我们需要通过一个指定引脚匹配。1引脚将匹配到11引脚上,2引脚将匹配到12引脚上(这些都是对于Mega)。目前Timer3仅仅用来在Mega上进行测试。

安装方法:
直接将TimerThree.h库文件解压缩到Arduino/libraies/

库下载地址:



代码详解:
结构函数:
  1. Timer1.initialize(microseconds);
复制代码

必须先调用这个函数,因为我们需要先指定计时器的频率(微妙),默认情况下是设定为1秒。
特别注意:在Arduino官网上写得是Note that this breaks analogWrite() for digital pins 9 and 10 on Arduino. 哪位大神能翻译一下(请给我们发邮件[email protected]或者到我们的论坛留言www.tilamaker.com)。

  1. Timer1.setPeriod(microseconds);
复制代码

在库被初始化后设定一个新的周期。这个库的最小周期(最高频率)支持1microsecond(1Mhz),最大周期为8388480微妙(8.3秒)。
特别注意:这个周期的设定将会改变中断和两个PWM输出的平率与duty cycles simultaneously(应该怎么翻译?)。

运行控制函数:

  1. Timer1.start();
复制代码

打开计时器(中断),从一个新的周期开始。

  1. Timer1.stop();
复制代码

关闭计时器(中断)。

  1. Timer1.restart();
复制代码

重启计时器(中断),从一个新的周期开始。

  1. Timer1.resume();
复制代码

恢复运行被停止的计时器(中断),不会开始一个新的周期。

PWM信号输出函数:

  1. Timer1.pwm(pin,duty,period);
复制代码


在指定的pin口产生一个PWM波形。对于Timer1的输出pin口分别为PROTB pins 1和2,我们只能用这两个口,如果我们用其他的口将会被忽视。在Arduino上,他们分别是数字输出引脚9和10,所以用这两个参数也是可以正常运行的。对于Timer3的输出引脚是PORTE和对应Arduino Mega的2,3&5。占空比是指定为一个相当于10位的值(1024),也就是0到1023之间。
特别注意:
period是一个可选择的参数,如果我们输入了这个参数,那么函数将会以我们给出的参数(微妙)作为周期。

  1. Timer1.setPwmDuty(pin,duty);
复制代码

设定一个新的PWM,但是不会重新配置这个引脚。这个函数相对于pwm()要快一些,但是必须在pwm()被调用后才能使用。

  1. Timer1.disablePwm(pin);
复制代码

停止使用引脚的PWM功能。之后这个引脚将会被释放,可以通过digitalWrite()进行控制。

中断函数:

  1. Timer1.attachInterrupt(function);
复制代码

打开中断,每当计时器的周期停止时调用括号中的中断函数。

特别注意:
当你在一个高频率中使用一个复杂的中断函数时,CPU有可能不在进入主循环,此时你的程序将会“死机”,在设定中断周期时,要进行优化处理。

  1. Timer1.detachInterrrupt();
复制代码

关闭中断函数。




我们自己做了一个wiki,希望对大家有帮助http://wiki.tilamaker.com/

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

发表于 2015-9-7 08:51:55 | 显示全部楼层
写的很好哦,建议你和站长 @弘毅 联系一下,更新到论坛的大Wiki里面去
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-9-8 15:32:11 | 显示全部楼层
幻生幻灭 发表于 2015-9-7 08:51
写的很好哦,建议你和站长 @弘毅 联系一下,更新到论坛的大Wiki里面去

谢谢支持,但是里面有一些地方可能翻译的不是很对,还不知道怎么修改呢
回复 支持 反对

使用道具 举报

发表于 2016-4-3 09:23:57 | 显示全部楼层
这么好的帖子支持一下
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 需要先绑定手机号

Archiver|联系我们|极客工坊

GMT+8, 2024-4-18 12:50 , Processed in 0.042628 second(s), 20 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表