mikkey finn » 04 май 2012, 19:46
Название неверное, а по сути вопроса - мега с аснхронным режимом таймера вполне подойдет для ТОЧНОГО определения. Для неточного тоже. Алгоритм такой:
0. Проводим расчеты, источник частоты должен быть стабилен, то есть кварцевый резонатор. Для асинхронного таймера - 32768Гц, другие таймеры - выбрать подходящий предделитель по даташиту. В результате расчета надо получить количество переполнений таймера, на заданный временной интервал, например для кварца 32768Гц 8-ми разрядный таймер за секунду переполнится 128 раз без делителя частоты.
1. запускаем таймер при запуске устройства, датчик, с которого снимаем частоту надо подключить к ноге "внешнее прерывание", например INT0, ногу настраиваем, например, на высокий уровень срабатывания
2. По прерыванию INT0 увеличиваем переменную импульсов датчика.
3. по прерыванию "переполнение таймера" уменьшаем переменную переполнений. Если переменная переполнений стала отрицательной при очередном уменьшении - ставим ей исходное значение, смотрим переменную импульсов датчика. В ней будет число импульсов(оборотов или чего-то еще) за заданный интервал времени - частота оборотов/импульсов.
4. по желанию - выдаем частоту в UART или на индикатор.
Это если софтово. Если аппаратно - задействуем два таймера - один в режиме счетчика внешних импульсов, другой в режиме измерителя. Переменная счетчика импульсов не нужна. Будет два прерывания все-равно - прерывание по переполнению таймера-измерителя времени, прерывание по переполнению таймера-счетчика импульсов(вдруг слишком быстро крутится?). Это уже на домашнее раскуривание. Примеры работы с таймерами есть у ДиХальта на easyelectronics.ru , рекомендую.