最近买了一个新的USB示波器,并试图测量avr timer0的频率。有12个MHz晶体振荡器连接到atmega和timer0设置为快速脉宽调制模式,没有预分频器。代码如下:
#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。

熔断位在下一幅图像上:

但如果我用1ms的延迟闪烁发光二极管,我得到的频率约为2 MHz。
所以,请给我解释一下,到底是怎么回事,为什么计时器会出错(或者我哪里错了)。
发布于 2019-01-13 02:14:28
这个频率对我来说似乎是正确的。如果你的时钟是12MHz,并且你有一个8位的脉宽调制,那么你的脉宽调制频率实际上是12MHz/256 = 46.875kHz。
https://stackoverflow.com/questions/54162455
复制相似问题