最近购买了一个新的USB示波器,并试图测量avr timer0的频率。 atmega连接了一个12 MHz的晶体振荡器,并且将timer0设置为快速PWM模式而无需预分频器。这是代码:
#include <avr/io.h>
int main(void)
{
DDRB = 0x08;
TCCR0 |= (1<<WGM00)|(1<<WGM01)|(1<<COM01)|(1<<CS00);
OCR0 = 128;
while(1){
}
}
但是,如果我以1毫秒的延迟使LED闪烁,则我得到的频率约为2 MHz。
所以,请向我解释一下,这是怎么回事,以及为什么计时器工作错误(或我在哪里错了)。
答案 0 :(得分:2)
这个频率对我来说似乎是正确的。如果您的时钟为12MHz
,并且具有8位PWM,则您的PWM频率实际上为12MHz/256 = 46.875kHz
。