我遇到了arduino到期计时器的问题。首先让我解释一下我对它们的了解。我不知道是否有办法为普通计时器解决这个问题。到期计时器的特点:
1)他们总是从零开始,
2)它们用作UP-COUNTING或UP-DOWN计数定时器,
3)每个定时器有两个比较寄存器。
我的项目涉及在采样时间(周期)内工作的情况,即定时器运行一段采样时间,并根据比较寄存器中的值,输出TIOA和TIOB切换。我正在以上下模式工作。现在问题是当我在比较寄存器中为零时,我期望整个周期的输出为零(在TIOA和TIOB上)。但是计时器也会切换输出以进行零比较。也就是说,而不是得到零总是我得到一个方波(2 *周期)作为其时间段。这也是其他计时器的常见问题吗?
你们可以建议我解决这个问题吗?
提前致谢。
#include <AdvaDueTC.h>
int default_clock = 1;
int RCcntS = 2187*2;
int period0 = 65536;
int a = 2180;
int b = 0;
void subrtn()
{
changeTC_TC3_Period(RCcntS); // loading sampler TC3 with RCcntS
changeTC_TC0_Period(RCcntS/2,a,b); // loading timer TC0 with RCcntT
}
void setup() {
setupTC3_Interrupt(period0,default_clock ,subrtn);//setup sampler interrupt
setupTC_TC0_Timing(period0, default_clock);
}
void loop() {
// put your main code here, to run repeatedly:
}
使用的函数是:
此处TC3处于UP模式,TC0处于UPDOWN操作模式。 TIOA0和TIOB0用于获得切换输出(即REG_TC0_CMR0,ACPA,BCPB设置为3)。这里TIOB0正在切换,我希望在整个时期内保持一个阀门(0或3.3v)。
感谢您的建议。
答案 0 :(得分:0)
当我在比较寄存器中为零时,我期望零输出
我希望每次打勾都会触发输出两次(UP和DOWN)(我想你称之为句号),因为计时器每次都会溢出。
解决方案是关闭计时器比较。
这对我来说似乎是一个PWM,也许你会使用专用的HW
获得更好的结果答案 1 :(得分:0)
是的,你说的是对的。起初我无法得到它但是这个MCU定时器可以选择设置或清除整个周期的定时器输出值。因此,在不使用TOGGLE的情况下,我使用这些选项来获得所需的操作。