[an error occurred while processing this directive] [an error occurred while processing this directive]
Ответ:
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)
[an error occurred while processing this directive] [an error occurred while processing this directive]

Отправлено Леонид Иванович 21 мая 2002 г. 02:06
В ответ на: Ответ: отправлено Vallav 20 мая 2002 г. 11:15

От момента "1. Запускается таймер." до момента
"2. Читается входной пин. Ловится переход 1-0." таймер успеет насчитать неизвестно сколько, особенно, если входная частота низкая. Ведь говорилось не о частоте 300 КГц, а о частотах до 300 КГц, т.е. о низких частотах. Количество переходов Вы тоже предлагаете считать программно. Это снижает максимальную измеряемую частоту и вносит погрешность в том случае, если, например, в системе имеются другие прерывания. В идеале, процесс измерения частоты должен вестись аппаратно. Однако архитектура таймеров AVR не позволяет этого сделать.
При измерении частоты должен задаваться один параметр: время измерения (он же - точность измерения). Процесс измерения следующий:
1. Таймер1 программируется на интервал времени ожидания перехода на входе. Если за это время переход не обнаружен, то входная частота принимается равной нулю.
2. При обнаружении перехода входного сигнала Таймер1 начинает отсчет измерительного интервала (например, 0.1 сек), Таймер2 начинает счет входных периодов, а Таймер3 начинает счет периодов тактовой частоты.
3. По окончанию формирования интервала Таймером1 по очередному переходу входного сигнала останавливаются Таймеры2 и 3. Входная частота равна Fclk*(Таймер2/Таймер3).
Таймеры2 и 3 должны производить счет в неких временных воротах, что аппаратно на AVR не реализуется. Делать это программно просто несерьезно, так как точность привязки напрямую определяет точность измерения частоты.


Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru