我写了一个简单的程序来生成占空比为50%的PWM波。然后我去AtmelStudio进行调试。除OCR0之外的所有寄存器都分配了各自的值。为什么OCR0没有分配任何值。 ATmega32,快速PWM。
#include <avr/io.h>
int main(void)
{
DDRB = (1 << PB3);
TCCR0 |= (1 << WGM01) | (1 << WGM00) | (1 << COM01);
OCR0 = 127;
TCCR0 |= (1 << CS02);
return 0;
}
答案 0 :(得分:1)
无论如何。
你正在使用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是否返回当前值或等待值。