|
Измерение частоты ATmega168 |
|
|
|
 |
Ответов
|
Apr 24 2007, 16:06
|
Профессионал
   
Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712

|
Уважаемые, вспомним первоначальную постановку вопроса: Цитата(олесь @ Apr 22 2007, 17:17)  подскажите как правильно определить максимальную входную частоту, которую необходимо померять(очень точно,посчитав кажый импульс) за интервал времени сто секунд, частота опорного генератора 20мгц Если я правильно понимаю, человек интересуется способом (как?), позволяющим с максимальной точностью измерить частоту (какую?) за определенный интервал времени. Зачем ему это нужно, и что он с этими результатами будет делать - вопрос третий. ИМХО: для измерения макимально возможной частоты нужно минимизировать длительность промежуточных процедур. Например - по возможности исключить потери на вход/выход из прерываний. Это время, как известно, составляет в среднем 4 машинных такта. Плюс 2-3 такта на прочие действия. Какие уж тут 10 МГц на входе, при клоке 20 МГц? Очевидно, что простой опрос порта (2 такта ) с последующим инкрементом (2 такта для регистра длиннее 1-го байта) + неизбежные прочие "мелочи" (1-2 такта) - это тот минимум, ниже которого не опуститься. Т.е. реально на регистрацию одного события по входу будет тратиться не менее 4-6 машинных тактов. Отсюда вытекает максимальная частота входного сигнала - 4 МГц. На пределе! Второй вопрос - точность измерения. Здесь она определяется точностью задания "ворот". Относительную точность "клокирования" (в тактах) реализовать не сложно, а вот обеспечить долговременную стабильность частоты расхожего "контроллерного" кристалла весьма и весьма не просто. И далеко не факт, что в течение 100 секунд эта "опора" будет стабильной... Так что какие уж тут 0,02 Гц? Точнее - о какой достоверности подобных измерений идет речь? Или я чего-то сильно не понимаю.  P.S. В моем первом посте ошибка - потребная длина регистра, конечно, не 64, а 32 бита. Размахнулся...
--------------------
Закономерность: Чем больше узнаю, тем меньше знаю... Любые мнения, даже ошибочные, имеют право на существование. Чем лучше узнаю людей, тем больше нравятся собаки...
|
|
|
|
|
Apr 24 2007, 19:06
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Валентиныч @ Apr 24 2007, 12:06)  Уважаемые, вспомним первоначальную постановку вопроса. Если я правильно понимаю, человек интересуется способом (как?), позволяющим с максимальной точностью измерить частоту (какую?) за определенный интервал времени. Зачем ему это нужно, и что он с этими результатами будет делать - вопрос третий. ИМХО: для измерения макимально возможной частоты нужно минимизировать длительность промежуточных процедур. Например - по возможности исключить потери на вход/выход из прерываний. Это время, как известно, составляет в среднем 4 машинных такта. Плюс 2-3 такта на прочие действия. Какие уж тут 10 МГц на входе, при клоке 20 МГц? Действительно, в погоне за исчезающе малой ошибкой потеряли исходный вопрос(:-)... Прежде всего замечу, что если хочется мерить максимально точно, то на время измерения лучше забыть о прерываниях, или по крайней мере на моменты обработки начала и окончания окна. Цитата(Валентиныч @ Apr 24 2007, 12:06)  Очевидно, что простой опрос порта (2 такта ) с последующим инкрементом (2 такта для регистра длиннее 1-го байта) + неизбежные прочие "мелочи" (1-2 такта) - это тот минимум, ниже которого не опуститься. Т.е. реально на регистрацию одного события по входу будет тратиться не менее 4-6 машинных тактов. Отсюда вытекает максимальная частота входного сигнала - 4 МГц. На пределе! Второй вопрос - точность измерения. Здесь она определяется точностью задания "ворот" Попробуем разобраться с червём сомнения, который точит Валентиныча(:-). Для автора топика опишу вгрубе алгоритм измерения методом ворот максимальной частоты 10 МГц, поданной на ножку Т0. Таймер 1 работает в режиме измерения системного клока. 1) Исходное состояние счётчика0 и таймера1 - остановлены и обнулены. 2) Запустим таймер1 и таймер0 двумя командами Код sts 0x81,r12 sts 0x25,r13 После выполнения инструкций T1=Nнач=2, T0=Mнач=0, в регистрах r12, r13 соответствующие настройки CSij для останова. Все переменные - 32-разрядные. 3) Ждём СТО секунд (делая попутно какие-то вещи и учитывая переносы таймеров в Mкон, Nкон). 4) Остановим таймер1 и таймер0 двумя командами Код sts 0x81,r14 sts 0x25,r15 После выполнения инструкций T1=Nкон=2'000'000'002, T0=Mкон=1'000'000'000, в регистрах r14, r15 соответствующие настройки CSij для останова. 5) По формуле Fx=Fo*(Mкон-Mнач±1)/(Nкон-Nнач) вычисляем измеренную частоту Fx=20000000*(1000000000-0±1)/(2000000002-2)=10000000±0.01 Гц. Никаких чудес, никаких прерываний, частота на входе 10 МГц, точность результата не хуже ±0.01 Гц. Программы умножения 32х32 и деления 64/32 в Сети можно найти на каждом углу(:-). Фактически, мною приведена готовая программа измерения, если вы меня понимаете. Цитата(Валентиныч @ Apr 24 2007, 12:06)  Относительную точность "клокирования" (в тактах) реализовать не сложно, а вот обеспечить долговременную стабильность частоты расхожего "контроллерного" кристалла весьма и весьма не просто. И далеко не факт, что в течение 100 секунд эта "опора" будет стабильной... Так что какие уж тут 0,02 Гц? Точнее - о какой достоверности подобных измерений идет речь? Или я чего-то сильно не понимаю.  Вы говорите всё правильно, скажу только, что если уж вы решились мерять 10 МГц с такой точностью, то надо бы поставить опору, соответствующей точности, ну или по крайней мере раскошелиться на термокомпенсированный кварцевый генератор. Есть относительно дешёвое решение - поочередно проводить измерения и калиброваться от хорошей опоры, это может быть радиосигнал, или GPS. То есть, используя секундные импульсы с GPS, сначала измерили частоту опорного генератора, используя ту же формулу и считая, что входная частота известна, затем измерили входную частоту, подставляя в формулу вычисления измеренную опорную частоту. Единственное существенное ограничение данного решения - кратковременная стабильность опорного генератора (на интервале 100 с) должна быть порядка 1Е-9 или лучше.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Apr 25 2007, 09:31
|
Профессионал
   
Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712

|
Цитата(=GM= @ Apr 24 2007, 22:06)  Попробуем разобраться с червём сомнения, который точит Валентиныча. Да нет у меня, по большому счету, никаких сомнений.  Просто я в подобных вопросах реалист-скептик, привыкший все считать для наихудшего варианта. Ваши рассуждения (и не только Ваши, уважаемый GM) в общем верны. Точнее - верны в частном случае. Здесь же речь идет о измерении частоты сигнала одного порядка с частотой клока, и весьма ограниченными аппаратными ресурсами. Если бы у нас был в наличии таймер длиной 32 бита - никаких возражений не последовало бы. Но максимум, что мы имеем в AVR - 16 разрядов, т.е. каждые 3,27... мс мы будем вынуждены вываливаться в прерывание по переполнению, тратя на это (фактически - прекращая счет) как минимум 5-6 машинных циклов. Свего за время 100 секунд таких пауз будет более 30 тысяч. Развейте это мое сомнение, и я сниму шляпу перед Вами. Цитата(=GM= @ Apr 24 2007, 22:06)  ... если уж вы решились мерять 10 МГц с такой точностью, то надо бы поставить опору, соответствующей точности, ну или по крайней мере раскошелиться на термокомпенсированный кварцевый генератор. Это не я решил. Более того, я как раз уверен, что этого не получится. Не сбрасываете со счетов, что вопрос задан в разделе для начинающих, поэтому давайте не будем ориентироваться на прецизионные термокомпенсированные клокеры, которые сами по себе - большая сложность, и уж тем более - на всякие внешние источники синхронизации, типа GPS, и т.д. Исходим из возможностей "среднеститистической" Меги в руках не очень опытного юзера. P.S. Сразу скажу - я не считаю себя даже средненьким программером. Скорее - так, ламер-любитель.
--------------------
Закономерность: Чем больше узнаю, тем меньше знаю... Любые мнения, даже ошибочные, имеют право на существование. Чем лучше узнаю людей, тем больше нравятся собаки...
|
|
|
|
Сообщений в этой теме
олесь Измерение частоты ATmega168 Apr 22 2007, 14:17 Валентиныч Вопрос поставлен не корректно.
За 100 секунд можно... Apr 22 2007, 14:31 =AVR= В лоб (используя таймер в режиме счетчика) - теоре... Apr 22 2007, 15:41 zorromen А если логику приделать ... счетчик например ... т... Apr 22 2007, 15:42 CD_Eater Если подсчитывать количество периодов измеряемого ... Apr 22 2007, 15:51 WHALE Цитата(CD_Eater @ Apr 22 2007, 16:51) Есл... Apr 22 2007, 17:47 CD_Eater ЦитатаА меандром-то зачемВ ДШ озвучено требование ... Apr 22 2007, 21:29 Dopler http://electronix.ru/forum/lofiversion/index.php/t... Apr 22 2007, 23:00 =AVR= Не совсем так. Здесь автору вопроса нужно мерять м... Apr 22 2007, 23:14 =GM= Цитата(Dopler @ Apr 22 2007, 20:00) http:... Apr 23 2007, 00:51  demaven Точность измерения на 100-секундном интервале сост... Apr 23 2007, 07:53   =GM= Цитата(demaven @ Apr 23 2007, 03:53) Уваж... Apr 23 2007, 12:50   defunct Цитата(demaven @ Apr 23 2007, 06:53) Точн... Apr 23 2007, 13:25    =GM= Цитата(defunct @ Apr 23 2007, 09:25) Точн... Apr 23 2007, 13:56     defunct Цитата(=GM= @ Apr 23 2007, 12:56) Добавлю... Apr 23 2007, 14:04      mse Цитата(defunct @ Apr 23 2007, 15:04) Тут ... Apr 23 2007, 14:30      =GM= Цитата(defunct @ Apr 23 2007, 10:04) Тут ... Apr 23 2007, 14:33       defunct Цитата(=GM= @ Apr 23 2007, 13:33) Это что... Apr 23 2007, 18:11        =GM= Цитата(defunct @ Apr 23 2007, 14:11) погр... Apr 23 2007, 19:32         defunct Цитата(=GM= @ Apr 23 2007, 18:32) Да с че... Apr 23 2007, 22:22          =GM= Цитата(defunct @ Apr 23 2007, 19:22) Для ... Apr 23 2007, 22:54           defunct Цитата(=GM= @ Apr 23 2007, 21:54) Я утвер... Apr 24 2007, 00:23            =GM= Цитата(defunct @ Apr 23 2007, 21:23) 1 ил... Apr 24 2007, 01:29             defunct ЦитатаКак это не важно? Это очень важно, ошибка ум... Apr 24 2007, 14:18              mse Цитата(defunct @ Apr 24 2007, 15:18) Умен... Apr 24 2007, 14:49               defunct Ок, приношу всем кого задел свои извинения.
Я здес... Apr 24 2007, 15:40              =GM= Да, интересное кино. Я смотрю, вы отвечаете только... Apr 24 2007, 15:23  =AVR= Цитата(=GM= @ Apr 23 2007, 01:51) Метод з... Apr 23 2007, 15:41   =GM= Цитата(=AVR= @ Apr 23 2007, 11:41) Captur... Apr 23 2007, 16:19 =AVR= ЦитатаНадо-то всего два прерывания на одно измерен... Apr 23 2007, 16:56   =GM= Цитата(Валентиныч @ Apr 25 2007, 05:31) З... Apr 25 2007, 13:09    Валентиныч Цитата(=GM= @ Apr 25 2007, 16:09) Не знаю... Apr 25 2007, 13:59     =GM= Цитата(Валентиныч @ Apr 25 2007, 09:59) О... Apr 25 2007, 14:30 =AVR= Какие "4 мгц на пределе"?? При наличии а... Apr 24 2007, 16:13 add ЦитатаЕсли бы у нас был в наличии таймер длиной 32... Apr 25 2007, 10:14 Валентиныч Цитата(add @ Apr 25 2007, 13:14) Таймер т... Apr 25 2007, 10:27 add ЦитатаПардон, что он продолжает считать?
Цитатамс ... Apr 25 2007, 10:35 Валентиныч Повторю вопрос - что считаем?
Если внутренний клок... Apr 25 2007, 10:59 add ЦитатаЕсли внутренний клок, то без проблем. А как ... Apr 25 2007, 11:11 олесь спасибо всем участникам информация очень помогла May 5 2007, 13:52
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|