Прочитал всю тему. Ясно стало следующее :
-здесь собрались Сишники а также Сишники ,которые естественно знают ASM.
-создание 1-сек. интервала требуется не для создания этого интервала просто так , а для вполне конкретного практического применения. 70-80 процентов это частотомеры.
По причине специфических особенностей МК (в отличие например от программируемой
логики) сделать приличный (по точности) прибор на одном МК , без дополнительной
обвязки , да еще и на дешевом китайском кварце и при этом размером со спичечный
коробок или пачку сигарет - это утопия. Про кварц я не говорю - он создает временнУю
и температурную погрешность . Для многих применений такая пргрешность вполне приемлема. Уж лучше использовать старые советские кварцы с военной аппаратуры.
Проблема в совместном использовании T/C0 и T/C1 для счета и для формирования
интервала (или наоборот - разница небольшая ,хотя есть) с использованием прерываний
(и опять неважно : по переполнению или по совпадению) без внешней обвязки МК (а вот
это важно , дальше будет понятно). Исходя из такого построения программы получается
вот что : ATtiny2313 , кварц 10 МГц ,максимальная измер. частота 4 МГц , до 1 МГц ошибки нет или (+/-1) , как и должно быть.С увеличением частоты начинает появляться ошибка. По расчетам так и должно быть. Смотри :
http://vrtp.ru/index.php?showtopic=2211&st=1800
Сообщение 270908 от 11.04.2010
Выход предлагаемый с использованием Т/С2 и часового кварца хорош . От устраняет проблему в совместном использовании T/C0 и T/C1, плох только сам кварц в плане стабильности и отсутствия термостатирования . Но и опять же для многих применений это вполне приемлемо.
Еще немного о требованиях к частотомерам , а также к измерителям периодов и длительностей (импульсов).
Если нужно измерить частоту переменного тока в сети или скорость вращения двигателя
любимого автомобиля или например скорость вращения пропеллера авиамодели ,где
допустима погрешность 0,1- 1,0 процент , то вариант (описаный выше ) состояший из МК,LCD-дисплея и еще 4-5 резисторов и конденсаторов более чем достаточен. Таких
программ в сети много.Я не упрекаю их и их создателей . С заложеной в них точностью
они делают свое дело. Не будем терять на это время.
А теперь решение проблемы приличных (по точности ) приборов , но конечно же
не навороченых промышленных монстров.
Вот любопытная ссылка :
http://www.herbert-dingfelder.de/fre...q_counter.html
Интервал измерения формируется двумя внешними двоичными счетчиками 74НС4040 ,не контроллером.
А в качестве счетных регистров используются 3 байта
1) младший - внешний счетчик 74НС4040 (не весь - только 8 бит)
2) средний - TCNT1L
3) старший -TCNT1H
АНАЛИЗ:
- При измерительном интервале 0,128сек трех байт вполне достаточно для измерения
заявленой частоты 70 МГц
- Входная частота на МК примерно 0,3 МГц
- И самое главное- Т/С1 работает в режиме аппаратного счета без прерываний . Вот за
это автору 5++
- Выбор формирования интервала на внешних счетчиках .... ну это выбор автора.
Видимо Т/С0 занят чем-то другим.Мне просто лень разбираться в сишном коде.
Хотя начинал именно с Си , с СVAVR .
Вот на таком принципе есть смысл делать прибор:
Т/С0 на прерываниях формирует измерительный интервал (в моем случае
1 / 0,25 сек - 10 000 000/2 500 000 тактов)
Т/С1 в режиме счета без прерываний с внешним счетчиком (в моем случае 74НС590)
производят счет.
Входная частота ‹= 10 МГц (в моем случае 7-разрядный LED -индикатор)
Задающий генератор - внешний -"Гиацинт" 10 МГц
Погрешность 1-2 / 10 000 000 ("Гиацинт" это обеспечит)
МК - ATmega 16 ( надо много ног , хотя программа помещается в tiny2313)
Прибор настольный , очень небольшой , питание 220В, для таскания в кармане не предусмотрен.
Программа написана. Отлажена в симуляторе.Жду посылку с недостающими деталями для
отладки в железе.