【问题标题】:Why timer0 of atmega16a have frequency of 46.86 kHz instead of 12 MHz?为什么 atmega16a 的 timer0 的频率是 46.86 kHz 而不是 12 MHz?
【发布时间】:2019-01-12 18:06:45
【问题描述】:

最近买了一个新的USB示波器,想测avr timer0的频率。有 12 MHz 晶体振荡器连接到 atmega 和 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。

保险丝位在下一张图片上:

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

所以,请向我解释发生了什么,以及为什么计时器会出错(或者我错在哪里)。

【问题讨论】:

    标签: c avr


    【解决方案1】:

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

    【讨论】:

    • 我刚刚在 atmega 的数据表中找到了这个公式,谢谢 :)
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多