Погодите, господа, какой захват? Только прямой счет.
Вообщем, для простоты делаете так - на вход любого таймера подаете частоту с вашего внешнего прескаллера. В прерывании по переполнению этого таймера увеличиваете переменную типа int (если используете восьмибитный таймер). В общей сложности значение таймера плюс значение переменной будет 24 бита.
На другом таймере отмеряете одну секунду. По истечении секунды считываете в локальную копию значение служебной переменной и таймера. Разность между этой локальной переменной и ее предыдущим значением (которое нужно будет сохранить) и будет частотой в герцах.
Тонкости: Необходимо обеспечить проверку на синхронность чтения значения таймера и служебной переменной. Типа таймер переполнился, а переменная еще не увеличена. Второе - небольшая погрешность будет из-за неточного отсчета секундного интервала (за счет различного времени входа в прерывание). Это можно скомпенсировать чисто программным путем, а можно и забить.
--------------------
"Практика выше (теоретического) познания, ибо она имеет не только достоинство всеобщности, но и непосредственной действительности." - В.И. Ленин
|