我写了一个简单的程序来产生占空比为50%的PWM波。然后我在AtmelStudio中进行了调试。除OCR0之外的所有寄存器都被分配了各自的值。为什么OCR0没有赋值。ATmega32,快速脉宽调制。
#include <avr/io.h>
int main(void)
{
DDRB = (1 << PB3);
TCCR0 |= (1 << WGM01) | (1 << WGM00) | (1 << COM01);
OCR0 = 127;
TCCR0 |= (1 << CS02);
return 0;
}发布于 2017-10-06 17:11:16
所以不管怎样。
您在Atmega32上使用的是8位counter0。让我们看看你是如何设置它的:
// Set Pin B3 as output, others as input
DDRB = (1 << PB3);
// Set Clear on compare match + Fast PWM mode + Counter stopped
TCCR0 |= (1 << WGM01) | (1 << WGM00) | (1 << COM01);
// Set comparator value to 127
OCR0 = 127;
// Enable clkIO/256 from prescaler, turning on the counter
TCCR0 |= (1 << CS02);好吧。首先,有几件事:
我将从数据表的that version中读取。
现在,在快速PWM模式下,根据表38和40,计数器的行为如下:
这可能是你的问题。如果这些都是真的:
那么,您写入双缓冲区的值可能永远不会到达实际的寄存器。遗憾的是,数据手册并没有详细解释这是如何处理的。它也不知道在双缓冲处于活动状态时读取OCR0返回的是当前值还是等待值。
https://stackoverflow.com/questions/46599108
复制相似问题