为什么atmega16a的timer0具有46.86 kHz的频率而不是12 MHz?

时间:2019-01-12 18:06:46

标签: c avr

最近购买了一个新的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){

    }
}

但是在示波器上,频率等于46.90 kHz。 enter image description here

保险丝位在下一张图像上: enter image description here

但是,如果我以1毫秒的延迟使LED闪烁,则我得到的频率约为2 MHz。

所以,请向我解释一下,这是怎么回事,以及为什么计时器工作错误(或我在哪里错了)。

1 个答案:

答案 0 :(得分:2)

这个频率对我来说似乎是正确的。如果您的时钟为12MHz,并且具有8位PWM,则您的PWM频率实际上为12MHz/256 = 46.875kHz