Почему таймер0 atmega16a имеет частоту 46,86 кГц вместо 12 МГц? - PullRequest
0 голосов
/ 12 января 2019

Недавно купил новый USB-осциллограф и попытался измерить частоту avr timer0. К ATMEGA подключен кварцевый генератор 12 МГц, а таймер 0 настроен на режим быстрого ШИМ без прескалера. Вот код:

#include <avr/io.h>

int main(void)
{
    DDRB = 0x08;
    TCCR0 |= (1<<WGM00)|(1<<WGM01)|(1<<COM01)|(1<<CS00);
    OCR0 = 128;
    while(1){

    }
}

Но на осциллографе частота равна 46,90 кГц. enter image description here

Биты плавкого предохранителя на следующем изображении: enter image description here

Но если я буду мигать светодиодом с задержкой в ​​1 мс, я получу частоту около 2 МГц.

Итак, пожалуйста, объясните мне, что происходит, и почему таймер работает неправильно (или где я ошибаюсь).

1 Ответ

0 голосов
/ 12 января 2019

Частота мне кажется правильной. Если ваши часы 12MHz и у вас 8-битный ШИМ, ваша частота ШИМ на самом деле равна 12MHz/256 = 46.875kHz.

...