【发布时间】:2017-10-05 21:55:14
【问题描述】:
我正在做一个项目,为此我需要来自两个不同 ADC 的两次测量以及与它们相关的两个不同 PWM 信号。测量值存储在变量freq 和duty 中。正如名称所述,我希望一个 PWM 信号的频率根据freq 的值而变化,而另一个必须根据duty 改变其占空比。问题是第一个信号可以正常工作,但第二个不行。
我正在使用 ATmega328p。我尝试使用常量值而不是变量duty,但同样的事情发生了。代替 PWM 信号,输出引脚 (OC0B) 始终设置为高电平,即 5 V DC。功能真的很简单:
//Timer0 configuration
TCCR0A = 0b00100011;
TCCR0B = 0b00001001; //Fast PWM, no prescaler, non-inverted, out OC0B
OCR0B = duty;
我已经三重检查了TCCR0 寄存器的值,但一切似乎都是正确的。什么可能导致这种行为?
【问题讨论】:
-
this web page 上对此进行了广泛的讨论。
-
您可能想使用模式 3 而不是模式 7。或者您忘记设置
OCR0A。 -
@EdgarBonet 对不起我的无知,但你是什么意思?我不明白您所说的“模式 3”或 7 是什么意思。另外,如果我想使用 B 输出,为什么要设置
OCR0A?