реклама на сайте
подробности

 
 
3 страниц V  < 1 2 3  
Reply to this topicStart new topic
> Измерение частоты ATmega168
Валентиныч
сообщение Apr 24 2007, 16:06
Сообщение #31


Профессионал
****

Группа: Свой
Сообщений: 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 Гц? Точнее - о какой достоверности подобных измерений идет речь?
Или я чего-то сильно не понимаю. smile.gif

P.S. В моем первом посте ошибка - потребная длина регистра, конечно, не 64, а 32 бита. Размахнулся... blink.gif


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
Guest_=AVR=_*
сообщение Apr 24 2007, 16:13
Сообщение #32





Guests






Какие "4 мгц на пределе"?? При наличии аппаратного СЧЕТЧИКА считать программно циклом опроса порта? Зачем?? Смотри пост #3, там все предельные факторы однозначно разжеваны
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 24 2007, 19:06
Сообщение #33


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 Гц? Точнее - о какой достоверности подобных измерений идет речь?
Или я чего-то сильно не понимаю. smile.gif

Вы говорите всё правильно, скажу только, что если уж вы решились мерять 10 МГц с такой точностью, то надо бы поставить опору, соответствующей точности, ну или по крайней мере раскошелиться на термокомпенсированный кварцевый генератор.

Есть относительно дешёвое решение - поочередно проводить измерения и калиброваться от хорошей опоры, это может быть радиосигнал, или GPS. То есть, используя секундные импульсы с GPS, сначала измерили частоту опорного генератора, используя ту же формулу и считая, что входная частота известна, затем измерили входную частоту, подставляя в формулу вычисления измеренную опорную частоту. Единственное существенное ограничение данного решения - кратковременная стабильность опорного генератора (на интервале 100 с) должна быть порядка 1Е-9 или лучше.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Apr 25 2007, 09:31
Сообщение #34


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(=GM= @ Apr 24 2007, 22:06) *
Попробуем разобраться с червём сомнения, который точит Валентиныча.

Да нет у меня, по большому счету, никаких сомнений. smile.gif Просто я в подобных вопросах реалист-скептик, привыкший все считать для наихудшего варианта.
Ваши рассуждения (и не только Ваши, уважаемый GM) в общем верны. Точнее - верны в частном случае. Здесь же речь идет о измерении частоты сигнала одного порядка с частотой клока, и весьма ограниченными аппаратными ресурсами.
Если бы у нас был в наличии таймер длиной 32 бита - никаких возражений не последовало бы.
Но максимум, что мы имеем в AVR - 16 разрядов, т.е. каждые 3,27... мс мы будем вынуждены вываливаться в прерывание по переполнению, тратя на это (фактически - прекращая счет) как минимум 5-6 машинных циклов. Свего за время 100 секунд таких пауз будет более 30 тысяч.
Развейте это мое сомнение, и я сниму шляпу перед Вами.

Цитата(=GM= @ Apr 24 2007, 22:06) *
... если уж вы решились мерять 10 МГц с такой точностью, то надо бы поставить опору, соответствующей точности, ну или по крайней мере раскошелиться на термокомпенсированный кварцевый генератор.

Это не я решил. Более того, я как раз уверен, что этого не получится.
Не сбрасываете со счетов, что вопрос задан в разделе для начинающих, поэтому давайте не будем ориентироваться на прецизионные термокомпенсированные клокеры, которые сами по себе - большая сложность, и уж тем более - на всякие внешние источники синхронизации, типа GPS, и т.д.
Исходим из возможностей "среднеститистической" Меги в руках не очень опытного юзера.
P.S. Сразу скажу - я не считаю себя даже средненьким программером. Скорее - так, ламер-любитель.


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
add
сообщение Apr 25 2007, 10:14
Сообщение #35


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Если бы у нас был в наличии таймер длиной 32 бита - никаких возражений не последовало бы.Но максимум, что мы имеем в AVR - 16 разрядов, т.е. каждые 3,27... мс мы будем вынуждены вываливаться в прерывание по переполнению, тратя на это (фактически - прекращая счет) как минимум 5-6 машинных циклов. Свего за время 100 секунд таких пауз будет более 30 тысяч.Развейте это мое сомнение, и я сниму шляпу перед Вами.

Таймер то зачем останавливать.. он продолжает считать пока Вы обрабатываете прерывание .. причем тут 16битные или 32-ух битные таймера..?


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Apr 25 2007, 10:27
Сообщение #36


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(add @ Apr 25 2007, 13:14) *
Таймер то зачем останавливать.. он продолжает считать пока Вы обрабатываете прерывание .. причем тут 16битные или 32-ух битные таймера..?

Пардон, что он продолжает считать?


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
add
сообщение Apr 25 2007, 10:35
Сообщение #37


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Пардон, что он продолжает считать?

Цитата
мс мы будем вынуждены вываливаться в прерывание по переполнению, тратя на это (фактически - прекращая счет)

Фактически прекращать счет не надо! вообще не надо. В обсужденнии про измерения частоты (другая ветка), все это обсуждалось. Вываливаемся в прерывание не останавливая (аппаратного ) счетчика (хоть 8битного).. , счетчик продалжает считать интервал времени, А мы в это время (если 8битный таймер то за 256клоков, если 16 то за 65536 ) должны обработать прерывание..(увеличить к примеру 32-ух битную переменную)..можно хоть год так чтитать.. неговоря о 100секундах.. и точность будет привязанна только к погрешностям опоры..(кварца)


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Apr 25 2007, 10:59
Сообщение #38


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Повторю вопрос - что считаем?
Если внутренний клок, то без проблем. А как считать внешние события в те моменты (4-5 циклов), когда обрабатывается прерывание по переполнению? Возникают пропуски? Или "захват" - автономная аппаратная функция?


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
add
сообщение Apr 25 2007, 11:11
Сообщение #39


Местный
***

Группа: Свой
Сообщений: 345
Регистрация: 10-10-05
Пользователь №: 9 459



Цитата
Если внутренний клок, то без проблем. А как считать внешние события в те моменты (4-5 циклов), когда обрабатывается прерывание по переполнению? Возникают пропуски? Или "захват" - автономная аппаратная функци

Внешние считаются так же на аппаратном уровне. т.е. обработка прерываний переполнения таймера от внешней частоты идет параллельно аппаратному увеличению таймера(внешняя частота заведена на вход счета таймера).


--------------------
Если задачу можно решить, то не надо тревожиться. А если нельзя решить, то тревожиться бесполезно.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 25 2007, 13:09
Сообщение #40


Ambidexter
*****

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



Цитата(Валентиныч @ Apr 25 2007, 05:31) *
Здесь же речь идет об измерении частоты сигнала одного порядка с частотой клока, и весьма ограниченными аппаратными ресурсами.
Если бы у нас был в наличии таймер длиной 32 бита - никаких возражений не последовало бы.
Но максимум, что мы имеем в AVR - 16 разрядов, т.е. каждые 3,27... мс мы будем вынуждены вываливаться в прерывание по переполнению, тратя на это (фактически - прекращая счет) как минимум 5-6 машинных циклов. Всего за время 100 секунд таких пауз будет более 30 тысяч.
Развейте это мое сомнение, и я сниму шляпу перед Вами

Ну, шляпу снимать не надо, это лишнее(:-). Пока я добрался до работы, вам уже ответили, но вижу всё же у вас остались кое-какие сомнения, так что дополню.

Да, прерывания будут и много, но я не вижу проблем с их обработкой, даже в том случае, когда два прерывания от двух таймеров наложатся во времени. Вы просто упускаете из виду, что раз запущенный таймер работает всё то время, пока его не остановят, следовательно, перерывов в счёте не будет.

И уж если говорить о количестве прерываний по переполнению и о времени обработки, то надо бы говорить о прерываниях от 8-битного таймера0, которые будут следовать каждые 25,6 мкс для входной частоты 10 МГц. Но даже этого времени (примерно 250 команд) с лихвой хватит, чтобы обработать два наложившихся прерывания от обоих таймеров. Даже если любитель будет писать на си(:-).

Конечно, 32-битного таймера нет, да он и не нужен, вместо него прекрасно справляется программная эмуляция двух старших байт. А для таймера0 - даже трёх байт.
Цитата(Валентиныч @ Apr 25 2007, 05:31) *
Более того, я как раз уверен, что этого не получится.
Не сбрасывайте со счетов, что вопрос задан в разделе для начинающих, поэтому давайте не будем ориентироваться на прецизионные термокомпенсированные клокеры, которые сами по себе - большая сложность, и уж тем более - на всякие внешние источники синхронизации, типа GPS, и т.д.
Исходим из возможностей "среднеститистической" Меги в руках не очень опытного юзера.

Не знаю почему вы говорите. что вопрос задан в разделе для начинающих, разве его передвинули? Оценка точности, приводимая выше, не учитывает погрешности опорного генератора, т.е. я считал, что ΔFo/Fo=0, хотя это не так. Для учёта надо относительную погрешность генератора добавить к относительной погрешности применяемого метода. Где-то я читал (не помню, а искать лень), что кратковременная нестабильность современных кварцевых генераторов на интервале одна секунда достигает 1Е-12, ну пусть будет 1Е-10 на интервале 100 секунд, всё равно наша погрешность (1Е-9) на порядок выше. Так что результат вполне приемлен для радиолюбителя средней руки, я уж не говорю о начинающих. Даже если не применять неких специальных мер к улучшению. В программу можно встроить программную подстройку окна и делать проверку пару раз в год на эталоне, если уж сильно нужна абсолютная точность.

Итак, главным результатом является то, что измерение входной частоты, доходящей до половины тактовой частоты процессора вполне возможно на голом микроконтроллере, с хорошей точностью и недорого.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Валентиныч
сообщение Apr 25 2007, 13:59
Сообщение #41


Профессионал
****

Группа: Свой
Сообщений: 553
Регистрация: 17-02-05
Из: Свердловская обл.
Пользователь №: 2 712



Цитата(=GM= @ Apr 25 2007, 16:09) *
Не знаю почему вы говорите. что вопрос задан в разделе для начинающих, разве его передвинули?

Виноват - перед этим что-то смотрел в разделе для чайников, видно - "наложилось".
Что касается непрерывности работы таймера, это мне известно. Но был уверен, что внешние события обрабатываются только по прерываниям. Если это не так, то должен согласиться с Вашими доводами, и... снять шляпу! a14.gif
Однако, в попытке "сохранить лицо" выскажу еще одно сомнение:
Если не изменяет память, минимальное время, необходимое для обработки "захвата" - 50 нс. А это как раз период клока. И 10 Мгц гарантированно будут обрабатываться только в том случае, если входная и тактовая частоты синхронны (и синфазны?).
Или я опять чего-то не учитываю?

Цитата
Даже если любитель будет писать на си.

Пишу исключительно на асме. Си - не знаю.


--------------------
Закономерность: Чем больше узнаю, тем меньше знаю...
Любые мнения, даже ошибочные, имеют право на существование.
Чем лучше узнаю людей, тем больше нравятся собаки...
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 25 2007, 14:30
Сообщение #42


Ambidexter
*****

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



Цитата(Валентиныч @ Apr 25 2007, 09:59) *
Однако, в попытке "сохранить лицо" выскажу еще одно сомнение: Если не изменяет память, минимальное время, необходимое для обработки "захвата" - 50 нс. А это как раз период клока. И 10 Мгц гарантированно будут обрабатываться только в том случае, если входная и тактовая частоты синхронны (и синфазны?).
Или я опять чего-то не учитываю?

Ну, выше я вам привёл пример измерения 10 МГц с помощью метода ворот, а не захвата. Про метод захвата я где-то говорил, что он работает до Fо/5, в нашем случае до 4 МГц. Недавно, правда нашёл способ, как на некоторых МК, атмега128, мерять частоту до Fо/2, т.е. до 10 МГц, как и в методе ворот. Точность к сожалению всего в два раза выше, чем при методе ворот, но иногда и это существенно.

Насколько я понимаю, как работает атмега, длительность нуля и единицы входного сигнала ВСЕГДА не должна быть меньше, чем один такт процессора, поскольку в МК практически на каждом пине стоит синхронизатор, но входная частота не обязана быть синхронной по отношению к тактовой частоте процессора.

Итак, сигнал частотой 10 МГц будет гарантированно обрабатываться, если он будут меандром со скважностью два, несинхронным к тактовой частоте.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
oles_k76
сообщение May 5 2007, 13:52
Сообщение #43


RF
***

Группа: Свой
Сообщений: 321
Регистрация: 12-04-06
Из: Berlin
Пользователь №: 16 046



спасибо всем участникам информация очень помогла cheers.gif


--------------------
теперь питание компьютера можно отключить
Go to the top of the page
 
+Quote Post

3 страниц V  < 1 2 3
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 14:21
Рейтинг@Mail.ru


Страница сгенерированна за 0.01486 секунд с 7
ELECTRONIX ©2004-2016