我正在做一个项目,我需要两个不同ADC的两个测量值以及两个不同的PWM信号。测量值存储在变量freq
和duty
中。如名称所示,我想要一个PWM信号的频率根据freq
的值而变化,而另一个必须根据duty
更改其占空比。问题是第一个信号工作正常,但第二个信号没有。为什么没有PWM信号出来?
我正在使用ATmega328p。我试过使用一个常量值而不是变量duty
,但发生了同样的情况。代替PWM信号,输出引脚(OC0B
)始终设置为高电平,即5 V DC。该功能是非常简单的:
//Timer0 configuration
TCCR0A = 0b00100011;
TCCR0B = 0b00001001; //Fast PWM, no prescaler, non-inverted, out OC0B
OCR0B = duty;
我有三重检查TCCR0
寄存器的值,但一切似乎是正确的。什么可能导致这种行为?
有关于它的[这个网页]上的广泛讨论(http://www.avrfreaks.net/forum/solved-atmega328p-output-pwm-oc0a-and-oc0b)。 –
您可能想使用模式3而不是模式7.或者您忘记设置“OCR0A”。 –
@EdgarBonet对不起,我的无知,但你是什么意思?我不明白“模式3”或7是什么意思。另外,如果我想使用B输出,为什么要设置'OCR0A'? – Tendero