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

 
 
16 страниц V  < 1 2 3 4 5 > »   
Reply to this topicStart new topic
> три частоты на АТмегу 128 с использованием таймеров, оределить изменения каждой частоты
rezident
сообщение Apr 10 2007, 03:41
Сообщение #31


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Так, хорошо хоть работу схемы захвата я понимаю верно. smile.gif
Цитата(=GM=)
Входная частота подается на ножку ICPn, которая является частью схемы захвата (input capture unit). Схема захвата работает следующим образом. По фронту импульса входной частоты содержимое таймераn переписывается в специальный регистр (ICRn).

Т.е. получается, что как обычно таймер тактируется опорной частотой, которая является асинхроной по отношению к входной измеряемой. Поэтому захват фронта измеряемой частоты произойдет с точностью до 1 такта опорной.
Цитата(=GM=)
Количество импульсов входной частоты можно считать программно, но можно и другим таймером0 (счетчик М)

ОК, посчитали мы импульсы и зафиксировали схемой захвата фронт последнего импульса с точностью опять же +- 1 период от опорной частоты.
Кстати, а переполнения таймера вы учитываете? При тактовой 16МГц за 1 сек измерения у 16-битного таймера произойдет 244 переполнения.
Ладно. Дальше. Пускай измеряемая частота была 169999Гц. Тогда за время счета 170000 импульсов мы получаем схемой захвата число 16000094. Вычисляем по вашей формуле Fx=16000000*170000/16000094(+-2)=169999,001Гц(+-0,02Гц).
Хм. cranky.gif И вправду получается неплохое разрешение! a14.gif
Go to the top of the page
 
+Quote Post
add
сообщение Apr 10 2007, 09:41
Сообщение #32


Местный
***

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



хелп! запутался в конец!
Ув.=GM=, поясните пожалуйста.
Цитата
По фронту импульса входной частоты содержимое таймераn переписывается в специальный регистр (ICRn).

а что за содержимое в таймере?(что собственно мы там насчитали?) Неивестное время до начала вх. импульса?
Цитата
Выждали примерно (!) секунду, включили прерывания Capture Unit опять, сработало, в прерывании записали время т2 и выключили прерывания Capture Unit

Здесь я так понял время прошедшее до первого фронта после интервала "примерно одна секунда".
И собственно непонятно причем здесь это?:
Цитата
Зная количество периодов входной частоты, (т2-т1)

Да вот еще до кучи цитата:
Цитата
Евстифеев(Atmel_AVRTiny_Mega) ..стр 284. "следует понимать, что между изменением состояния вххода блока захвата копированием счетного регистра в регистр захвата проходит некоторое время. Эту задержку вносит синхронизатор и детектор. Величина задержки состовляет 2.5 ..3.5 машинных цикла...

Тут как быть с 2.5...3.5?


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


Ambidexter
*****

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



Цитата(rezident @ Apr 10 2007, 00:41) *
ОК, посчитали мы импульсы и зафиксировали схемой захвата фронт последнего импульса с точностью опять же +- 1 период от опорной частоты.

Немного подправлю. Любой фронт вы фиксируете с точностью в диапазоне (0,1) такт, значит оба фронта фиксируются с точностью ±1 такт. Это важно осознать, а то вы там ниже уже пишете ±2, а это неправильно.
Цитата(rezident @ Apr 10 2007, 00:41) *
Кстати, а переполнения таймера вы учитываете? При тактовой 16МГц за 1 сек измерения у 16-битного таймера произойдет 244 переполнения.

А як-жеж(:-)! Специально написал, что все переменные 32-битные.
Цитата(rezident @ Apr 10 2007, 00:41) *
Ладно. Дальше. Пускай измеряемая частота была 169999Гц. Тогда за время счета 170000 импульсов мы получаем схемой захвата число 16000094. Вычисляем по вашей формуле Fx=16000000*170000/16000094(+-2)=169999,001Гц(+-0,02Гц).
Хм. cranky.gif И вправду получается неплохое разрешение! a14.gif

Как-то не так вы вычисляете. Для частоты 169999 Гц вы и получите за 1 секунду М=169999 импульсов, а импульсов опорной за секунду будет N=16000000. Измеренная частота Fx=169999*16000000/(16000000±1)=169999±0.01. Ну и вот здесь ошибочка, надо писать ±1, а не ±2, почему, я объяснил выше.

Цитата(add @ Apr 10 2007, 06:41) *
хелп! запутался в конец!
Ув.=GM=, поясните пожалуйста.
а что за содержимое в таймере?(что собственно мы там насчитали?) Неивестное время до начала вх. импульса?

В таймере идёт текущее время, которое задается опорным генератором, таймер считает импульсы этого генератора. Нам неважно абсолютное значение начала, нам важна разница между концом и началом. N=Ткон-Тнач ("временные ворота", если хотите).

Цитата(add @ Apr 10 2007, 06:41) *
Здесь я так понял время прошедшее до первого фронта после интервала "примерно одна секунда".
И собственно непонятно причем здесь это?: "Зная количество периодов входной частоты, (т2-т1)"

Ну так это и есть значение периода измерения.
Цитата(add @ Apr 10 2007, 06:41) *
Да вот еще до кучи цитата:
Евстифеев(Atmel_AVRTiny_Mega) ..стр 284. "следует понимать, что между изменением состояния вххода блока захвата копированием счетного регистра в регистр захвата проходит некоторое время. Эту задержку вносит синхронизатор и детектор. Величина задержки состовляет 2.5 ..3.5 машинных цикла...
Тут как быть с 2.5...3.5?

Ну, задержка одна и та же как для начала, так и для конца. Не надо её учитывать. Тем более, как я сказал, нам без разницы каково абсолютное время, важна разница между последним фронтом и первым.


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


Местный
***

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



Цитата
Вгрубе так, запустили прерывание Capture Unit, оно сработало, в прерывании записали захваченное время т1 и выключили прерывания Capture Unit. Выждали примерно (!) секунду, включили прерывания Capture Unit опять, сработало, в прерывании записали время т2 и выключили прерывания Capture Unit. Зная количество периодов входной частоты, (т2-т1) и тактовую частоту, вычисляем частоту входного сигнала, точность измерения примерно ±0,02 Гц. Сравните с вашими ±1 Гц. Другим способом на данном железе вы такой точности не добьётесь.


Как я понял измерения проходят так:

Прикрепленное изображение

Прикрепленное изображение


Как тут можно определить частоту?


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


Ambidexter
*****

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



Цитата(add @ Apr 10 2007, 07:48) *
Как я понял измерения проходят так:

Прикрепленное изображение

Прикрепленное изображение

Как тут можно определить частоту?

Картинки хорошие, но неполные. Внизу под меандром надо нарисовать много-много импульсов опорной частоты, это будет наше время, заполнение, как угодно назовите.

Вот вы написали "Оно сработало" в конце периода Т1 (ваши обозначения на рис.1). Что это означает? Это означает, что содержимое таймера1 от "мелкого" опорного меандра (который вы не нарисовали) переписалось в регистр ICR1, его надо запомнить, а прерывание запретить (в принципе, можно не запрещать, просто не обращать внимания, если время и вычислительная обстановка позволяет, важно, что нужно только первое, которое даёт время начала вашего окна).

Отмечу, что таймер1 продолжает работать, отсчитывает длительность окна. В начале времени Т2 на вашем рисунке надо разрешить прерывание опять, всё так, дождаться когда оно сработает (конец периода Т2 на вашем рисунке), и запомнить время, сохранённое в ICR1.

Затем нужно вычислить разность этих времен. Что нам даст эта разность? Эта разность N нам даст время (в тиках таймера1) между первым фронтом входной частоты и последним фронтом. Причём это время будет не приблизительным, а ТОЧНЫМ, с точностью ±1 такт. В то же самое время, таймер0 подсчитает количество импульсов входной частоты М. Теперь вы имеете на руках М, N и Fo и по формуле можете посчитать Fx.

Скажу ещё раз, для ясности. Сигнал измеряемой частоты надо подать на вход ICP1 и вход timer0/counter0, который работает как счётчик, в то же время timer1 работает как таймер, считает импульсы опорной частоты.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
add
сообщение Apr 10 2007, 12:58
Сообщение #36


Местный
***

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



Цитата
Скажу ещё раз, для ясности. Сигнал измеряемой частоты надо подать на вход ICP1 и вход timer0/counter0, который работает как счётчик, в то же время timer1 работает как таймер, считает импульсы опорной частоты
таймер0 подсчитает количество импульсов входной частоты М.

Этого не хватало для понимания :-) т.е. всеж таки мы не совсем "отдыхаем", а переодически Fвх. /255 обрабатываем переполнение таймера timer0/counter0 считая кол-во импульсов. (для 170кГц это 666 прерываний на обработку которого пусть тактов20, соответственно это 13333 тактов, - меньше 0,1% загрузки контр.при 17МГц за сек. )
Спасибо за разъяснения.


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


Ambidexter
*****

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



Цитата(add @ Apr 10 2007, 08:58) *
Этого не хватало для понимания :-) т.е. всеж таки мы не совсем "отдыхаем", а периодически Fвх. /256 обрабатываем переполнение таймера timer0/counter0 считая кол-во импульсов. (для 170кГц это 664 прерываний на обработку которого пусть тактов20, соответственно это 13280 тактов, - меньше 0,1% загрузки контр. при 17 МГц за сек.)
Спасибо за разъяснения.

На здоровье.

Да, конечно, не совсем "отдыхаем"(:-). Но это малая плата за результат. Кстати, в методе "ворот" тоже надо учитывать переполнения, куда от них денешься. А откуда у вас взялось 17 МГц? Лучше не выходить за допустимые рамки по тактовой частоте.

Добавлю, что ещё будут прерывания по переполнению таймера1, который считает опору. Ну здесь загрузка вообще слёзы - 16МГц/65536=244 Гц или один раз за 4 мс. На загрузку проца практически не влияет.

Отвлекусь малёк. Я вот вижу, что вы заинтересовались, позадавали вопросы и разобрались, как оно всё работает.

Что ж некоторые уважаемые, не буду показывать пальцем, никак не разберутся и не заберут свои слова назад о том, что это "пустой трёп"? А потом опять из-за угла будут говорить о "0 в сиянии". Как-то несправедливо получается, человека оговорить можно и легко, а признать свою неправоту нельзя ни под каким видом. Конечно, надо иметь определенное мужество, чтобы признать перед сообществом свою неправоту.


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


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(=GM=)
Как-то не так вы вычисляете. Для частоты 169999 Гц вы и получите за 1 секунду М=169999 импульсов, а импульсов опорной за секунду будет N=16000000. Измеренная частота Fx=169999*16000000/(16000000±1)=169999±0.01. Ну и вот здесь ошибочка, надо писать ±1, а не ±2, почему, я объяснил выше.

Еще раз. Откуда взялась цифра 169999? Изначально мы не знаем входную частоту. Допустим по 1 периоду определили ее период с дискретностью +-1 такт опорной частоты (число 94 или 95 в ее отсчетах). Т.е. 16000000Гц/94=170212,766Гц или 16000000Гц/95=168421,051Гц. Время измерения у нас 1 сек, следовательно мы должны подсчитать 170213 или 168421 импульсов входной частоты, чтобы примерно получить 1 сек "временнЫх ворот".
Далее, взяв меньшую величину (чтобы гарантированно уложиться в 1 секунду), посчитаем 168421 импульс частоты 169999Гц. Мы получим длительность "временнЫх ворот" 0,99072 сек. За это время первый таймер отсчитает 15851481 такт опорной частоты (разница между двумя захватами старта и стопа).
Итого расчетная частота получится: Fx=16000000*168421/15851481(+-2)=169999,005Гц+-0,02Гц
Я не знаю синхронный или асинхронный захват в AVR, поэтому насчет +-2 утверждать не буду. В общем (худшем) случае будет +-2 такта.
Насчет описанного вами метода я в общем-то все понял. Нет принципиальной разницы в том, чтобы формировать "временнЫе ворота" опорной частотой, подсчитывая импульсы измеряемой частоты или наоборот, формировать "временнЫе ворота" из импульсов измеряемой частоты, подсчитывая количество импульсов опорной частоты, "влезающие" в эти "временнЫе ворота". Точнее разница в том, что "временнЫе ворота" лучше формировать из более низкой частоты. Спасибо за разъяснения! a14.gif
P.S. только для удобства лучше все же иметь в периферии 32-х разрядный таймер, а не 8-ми разрядный smile.gif
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 10 2007, 14:51
Сообщение #39


Ambidexter
*****

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



Цитата(rezident @ Apr 10 2007, 09:55) *
Еще раз. Откуда взялась цифра 169999? Изначально мы не знаем входную частоту. Допустим по 1 периоду определили ее период с дискретностью +-1 такт опорной частоты (число 94 или 95 в ее отсчетах). Т.е. 16000000Гц/94=170212,766Гц или 16000000Гц/95=168421,051Гц. Время измерения у нас 1 сек, следовательно мы должны подсчитать 170213 или 168421 импульсов входной частоты, чтобы примерно получить 1 сек "временнЫх ворот".

Не, что-то не срастается. Давайте ляжем по-другому(:-). Запустили таймер1 и прерывание по захвату. Пусть так получилось, что прерывание сработало как раз в то время, когда в таймере оказался 0 (вообще без разницы, что там будет, просто для удобства). Запомнили этот 0 в памяти или регистре, не важно. Сидим ждём, курим, "кирпич ёк"(:-). То есть ничего не делаем, таймер1 подсчитывает время окна, таймер 0 подсчитывает количество входных импульсов. "Ничего не делаем" означает скручиваем 32-битный счетчик, предположим он рассчитан на 800 мс. Затем разрешили прерывание по захвату, оно сработало, у нас в руках число - время последнего фронта входного импульса. Какое оно будет? Зависит от того, сколько импульсов входного сигнала насчиталось. Давайте прикинем.

Если задержка была на 800 мс, то число М=170000*0.8=136000, а число N=16000000*0.8=12800000. Хорошо, значит Fx=16000000*136000/12800000=170000±0.013 Гц

Если задержка была на 801 мс, то число М=170000*0.801=136170, а число N=16000000*0.801=12816000. Fx=16000000*136170/12816000=170000±0.013 Гц

Если задержка была на 802 мс, то число М=170000*0.802=136340, а число N=16000000*0.802=12832000. Fx=16000000*136340/12832000=170000±0.013 Гц

Ну и так далее. Как вы видите размер окна никак не влияет на результат. Но относительная ошибка, естественно, зависит от времени наблюдения. Для упрощения понимания я брал задержку примерно на 1 с.

Подчеркну, окно всё время будет кратным периоду входной частоты, поскольку схема захвата срабатывает от передних фронтов именно входной частоты. Ну а поскольку частота опоры асинхронна по отношению к входной частоте, она будет "гулять" на ±1 такт.
Цитата(rezident @ Apr 10 2007, 09:55) *
Я не знаю синхронный или асинхронный захват в AVR, поэтому насчет +-2 утверждать не буду. В общем (худшем) случае будет +-2 такта.

Захват синхронный, поскольку все входные сигналы тактируются внутренним клоком, т.е. все входные фронты приводятся к единой временной сетке, что есть, не скажу всегда необходимо, но грамотно с точки зрения построения архитектуры МК. Как бы то ни было, фронт нашего сигнала лежит между двумя фронтами тактовой частоты, следовательно максимальная ошибка +1 такт, или, если хотите, ±0.5 такта. Как кому нравится. Или вот так ещё можно сказать: фронт нашего сигнала лежит в диапазоне от N до N+1 такта, соответственно ошибка лежит в диапазоне от 0 до 1 такта.
Цитата(rezident @ Apr 10 2007, 09:55) *
P.S. только для удобства лучше все же иметь в периферии 32-х разрядный таймер, а не 8-ми разрядный smile.gif

Так ведь нет его! С другой стороны, представьте себе некий 8-10-12-ногий чип, который меряет частоту с относительной точностью 10^(-10), что могут дать только какие-нибудь монстры с цезиевым или там водородным стандартом, да и то не все. Ну а опору надо брать от ДжиПиэС(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
defunct
сообщение Apr 10 2007, 16:11
Сообщение #40


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(=GM= @ Apr 9 2007, 22:02) *
Входная частота подается на ножку ICPn, которая является частью схемы захвата (input capture unit). Схема захвата работает следующим образом. По фронту импульса входной частоты содержимое таймераn переписывается в специальный регистр (ICRn). Можно и по спаду, это настраивается. То есть, если у вас в таймереn тикает время, то вы получите точное значение времени пришедшего фронта, скажем, это было начало измерения (значит, число Nнач). Запомнили его. И т.д. Количество импульсов входной частоты можно считать программно, но можно и другим таймером0 (счетчик М), я так и делаю. n - номер схемы захвата.

Чудак человек...

1. Чем ваше решение в таком случае отличается от предложенного мной в comment'e #6?
2. Откуда здесь возьмется точность в +-0.02 Гц?
3. Зачем здесь Capture Unit если отмерять окно измерения можно гораздно проще, а опорная частота Fosc у нас и так есть.

теперь ваша формула:
Цитата
2) Формула вычисления частоты Fx = Fо*М/N (поскольку очевидно, что То*N=Тх*М за Тизм).


проверим ее на частном случае, окно захвата - 1 секунда. В этом случае N = Fo, формула примет вид:
Fx = M.
Где же точность +- 0.02Гц? Ведь M - это целое число следовательно, с окном в 1 сек точность составит +- 1Гц.

Пример программы вы не приводите вероятно потому, что вы осознаете, что у вас там лажа.

Цитата
Кстати, а переполнения таймера вы учитываете? При тактовой 16МГц за 1 сек измерения у 16-битного таймера произойдет 244 переполнения.
Цитата
А як-жеж(:-)! Специально написал, что все переменные 32-битные.

Какие-то бестолковые у вас посты. Ей богу.
AVR - 8-ми битный процессор. И таймеров у него 32х битных нет. От того что вы "специально" что-то написали, архитектура AVR не поменяется.
Go to the top of the page
 
+Quote Post
add
сообщение Apr 10 2007, 16:31
Сообщение #41


Местный
***

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



Цитата
2. Откуда здесь возьмется точность в +-0.02 Гц?

Разве не так?: XTAL/Fвх - к примеру 16Мгц/170кГц=94такта на 1Гц Fвх. соответственно 1/94= 0,01% ..что тут не так?


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


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(=GM=)
То есть ничего не делаем, таймер1 подсчитывает время окна, таймер 0 подсчитывает количество входных импульсов.

Нет, не так! Время окна (количество импульсов) должен считать таймер0, который от измеряемой частоты тактируется. Таймер1 от опорной частоты тактируется. Причем по окончании счета (совпадении количества импульсов таймер0 с заданным) должен сработать "стоп"-захват у таймер1.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 10 2007, 19:08
Сообщение #43


Ambidexter
*****

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



Цитата(rezident @ Apr 10 2007, 14:10) *
Нет, не так! Время окна (количество импульсов) должен считать таймер0, который от измеряемой частоты тактируется. Таймер1 от опорной частоты тактируется. Причем по окончании счета (совпадении количества импульсов таймер0 с заданным) должен сработать "стоп"-захват у таймер1.

Так вы ж сами говорили, что входная частота неизвестна, докуда тогда считать(:-)?

Должно быть так. Входной сигнал подключен к таймеру0 И к схеме захвата таймера1. Таймер0 считает входные импульсы, таймер1 - системный клок 16 МГц.
Попробую изобразить
Код
МЕТОД ЗАХВАТА (предложил GM)
      ___     ___     ___     ___     ___  
  ___|   |___|   |___|   |___|   |___|    входная частота
             ^                   ^
             |                   |
|||||||||||||||||||||||||||||||||||||||| опорная частота
             Nнач=100            Nкон=16000100±1
             Мнач=0              Мкон=170000 точно
             |<---примерно 1с--->| интервал измерения
     Fx=Fo*М/(N±1)=16000000*170000/(16000000±1)=170000±0.01
         (числа приведены для односекундного интервала)

МЕТОД ВОРОТ (предложил defunct)
        ___     ___     ___     ___     ___  
    ___|   |___|   |___|   |___|   |___|    входная частота
             ^                   ^
             |                   |
   |||||||||||||||||||||||||||||||||||||||| опорная частота
             Nнач=100            Nкон=16000100 точно
             Мнач=0              Мкон=170000±1
             |<----точно 1с----->| интервал измерения

     Fx=Fo*(М±1)/N=16000000*(170000±1)/16000000=170000±1
        (числа приведены для односекундного интервала)

Обратите внимание, что время захвата в первом варианте ВСЕГДА точно совпадает с фронтами входной частоты (вернее с точностью ±1 такт, дань синхронизму), а во втором варианте оно не совпадает (вернее совпадает но с точностью до ±1-го периода входной частоты). Различие маленькое, но ОЧ-ЧЕНЬ существенное.

Различие приводит к тому, что точность различается почти в 100 раз ИЛИ, другими словами, можно почти в 100 раз уменьшить интервал наблюдения для достижения тоё же точности ±1 Гц. Так что автор темы спокойно может за 30-40 мс измерить последовательно все три частоты, а оставшееся время - 960 мс - делать козу методу defunct'a(:-).


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
bodja74
сообщение Apr 10 2007, 19:27
Сообщение #44


Знающий
****

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



Цитата(add @ Apr 10 2007, 16:31) *
Разве не так?: XTAL/Fвх - к примеру 16Мгц/170кГц=94такта на 1Гц Fвх. соответственно 1/94= 0,01% ..что тут не так?


не 1/94= 0,01%

а 100\94=1.06%

Не нужно так лихо коэфициенты переводить в проценты smile.gifsmile.gifsmile.gif

соответсвенно все формулы с применением этого аргумента будут иметь как миниум туже погрешность.

поэтому все приведенные выше формулы эффекта на меня не произвели.

2resident

наконец то вы поняли о чем я ,(Таймер1 можно заменить и обычной задержкой в цикле если прерывания не планируются ) но к режиму таймера "Input Capture" (режим захвата) это никакого отношения не имеет.
Go to the top of the page
 
+Quote Post
=GM=
сообщение Apr 10 2007, 19:54
Сообщение #45


Ambidexter
*****

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



Цитата(defunct @ Apr 10 2007, 12:11) *
1. Чем ваше решение в таком случае отличается от предложенного мной в comment'e #6?
2. Откуда здесь возьмется точность в +-0.02 Гц?
Читайте мой пост #23, там всё написано. Постарайтесь понять, это без подковырок, просто постарайтесь понять. Наглядная агитация в посте #43.

Отличие небольшое, но приводящее к радикальным последствиям. У вас неточность определения ±1 периода входной частоты, а у меня ±1 такт опорной частоты. Отсюда различие в точности примерно в 100 раз. А в остальном ничем, ваш метод вполне работоспособен.
Цитата(defunct @ Apr 10 2007, 12:11) *
теперь ваша формула:
проверим ее на частном случае, окно захвата - 1 секунда. В этом случае N = Fo, формула примет вид:
Fx = M.
Где же точность +- 0.02Гц? Ведь M - это целое число следовательно, с окном в 1 сек точность составит +- 1Гц.

Вот тут вы не правы. В этом случае N=Fo±1, а М - "точное" целое (я имею в виду без всяких ±1). Да вы посчитайте по формуле два раза: один раз с N=Fo-1, другой раз с N=Fo+1. Сразу почувствуете разницу, в смысле максимальную ошибку). В посте #43 попытался это показать. В одном случае гуляет N, в другом - М, вся разница в этом. И потом, откуда вы берете ±2? Вроде бы я везде писал ±1.

Цитата(defunct @ Apr 10 2007, 12:11) *
Пример программы вы не приводите вероятно потому, что вы осознаете, что у вас там лажа.
Не поэтому, просто по контракту не имею права, а писать что-то заново мне лениво. Вот если б кто-нибудь написал, я б подправил(:-).
Цитата(defunct @ Apr 10 2007, 12:11) *
Какие-то бестолковые у вас посты. Ей-богу.

Ну напишите вы что-нибудь толковое по данной теме, покамест я ничего толкового от вас не увидел. А ваши так называемые идеи знали в древней иудее(:-). Разница между моей и вашей идеей - в 100 раз по точности ИЛИ по времени измерения! Я вот додумался как мерять частоту до Fo/2 с той же точностью на голом проце, у вас есть идеи? Давайте обсудим(:-).
Цитата(defunct @ Apr 10 2007, 12:11) *
AVR - 8-ми битный процессор. И таймеров у него 32х битных нет. От того что вы "специально" что-то написали, архитектура AVR не поменяется.
Вы за собой получше смотрите. В посте #6 вы пишете "...значения 32-х разрядных счётчиков...", ну так, какие 32-х разрядные счетчики в 8-битовом процессоре? А я писал о 32-битных переменных, между прочим, а не о таймерах. Ну и в чём тут криминал? Это и называется трёп ни о чём.

Или вот, говорите, что пост #2 не rezident писал, а кто? Несколько мессагов упирались. Ну и кто кого должен учить внимательности? Обратите внимание, в каждом посту вверху-справа стоит значок "решетка" # и номер поста.


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 16th June 2025 - 20:45
Рейтинг@Mail.ru


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