Таймер для генерации переполнения каждые 4 мс - PullRequest
0 голосов
/ 21 октября 2011

На atmega2560 (плата STK600) я использую Timer0, который является 8-битным таймером.Я хочу генерировать переполнение каждые 4 мс ... как установить таймер на 4 мс?(тактовая частота равна 8 МГц, я знаю о настройке таймера путем погружения (тактовая частота) / (предварительный масштаб), и когда счетчик сбрасывается, он генерирует прерывание переполнения. Но не уверен насчет установки для 4 мс!* Во-вторых, как только таймер переполнится и сгенерирует прерывание OVERFlOW, рассчитайте 1 секунду ... Как это сделать?

Заранее спасибо!

1 Ответ

0 голосов
/ 31 октября 2011

4 мс не будет возможно с прерыванием OVERFLOW:

F_CPU = 8 000 000 Гц

F_OVERFLOW = 1 / 0,004 с = 250 Гц

CYCLES_PER_OVERFLOW = F_CPU / F_OVERFLOW = 32 000, т. Е. Переполнение должно происходить каждые 32 000 тактовых циклов ЦП

CYCLES_PER_TIMER_TICK = 32,000 / 256 = 125 = значение предварительного масштабирования

125 недоступен в качестве прескалера, но вы можете использовать 128, если это достаточно близко для вашей цели (4,096 мс).
Если нет, вы можете использовать прерывание сравнения по таймеру вместо переполнения int. - Или сменить F_CPU ...

После того, как вы получите прерывание каждые 4 мс, вы можете увеличивать глобальную переменную для каждого прерывания, и каждый раз, когда значение переменной достигает 250, проходит еще одна секунда, и переменная может быть сброшена в 0 для подсчета в течение следующей секунды.

...