为什么 atmega16a 的 timer0 的频率是 46.86 kHz 而不是 12 MHz?
Why timer0 of atmega16a have frequency of 46.86 kHz instead of 12 MHz?
最近新买了一个USB示波器,想测avr timer0的频率。有一个 12 MHz crystal 振荡器连接到 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。
所以,请向我解释发生了什么,以及为什么计时器会出错(或者我错在哪里)。
频率对我来说似乎是正确的。如果你的时钟是 12MHz
并且你有一个 8 位 PWM 你的 PWM 频率实际上是 12MHz/256 = 46.875kHz
.
最近新买了一个USB示波器,想测avr timer0的频率。有一个 12 MHz crystal 振荡器连接到 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。
所以,请向我解释发生了什么,以及为什么计时器会出错(或者我错在哪里)。
频率对我来说似乎是正确的。如果你的时钟是 12MHz
并且你有一个 8 位 PWM 你的 PWM 频率实际上是 12MHz/256 = 46.875kHz
.