2014-06-20 1 views
4

Я использую счетчик времени на моем atmega 328p. Я посмотрел на реализацию функции arduino millis, и я немного смущен, почему они используют прерывание переполнения таймера, которое выполняется каждые 1,024 мс (freg = 16MHz, 64 prescaling), когда они могут использовать Output Match Match Interrupt, которое может быть настроено на триггер точно каждые 1 мс (OCR0A = 249). Есть ли какое-либо преимущество в использовании таймера Overflow Interupt и какие-то исправления для подсчитанных мс по сравнению с переходом Output Match Match, который выполняется точно каждые 1 мс? Или почему они его используют?Почему Arduino использует прерывание каждые 1,024 мс в миллисекундной функции?

ответ

1

Значение счетчика TCNT используется для расчета микросекунд за пределами прерывания. Использование совпадения сравнения для определения TOP-значения приведет к точной прерыванию, но усложняет вычисление более тонких микронов по мере того, как TCNT сбрасывается. Использование сравнения соответствия для значения не TOP (для генерации PWM) не генерирует периодическое прерывание 1 мс.

Я лично использую как второй таймер для выборки TOP значения, определенного регистром OCRxA.