|
Сревнение двух частот |
|
|
|
 |
Ответов
|
May 20 2012, 15:41
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(=GM= @ May 20 2012, 11:48)  1) Читаю я всегда внимательно, скажу больше, даже внимательнее, чем вы пишете. Очень рад. Тогда вы несомненно можете дать массу полезных советов. Цитата 2) Кольцевой буфер не так работает, как вы описываете. В моем представлении, есть буфер, есть два указателя - один на запись, другой на чтение, после каждого чтения идет инкремент указателя чтения, по каждой записи - инкремент указателя записи. (В моем случае это происходит по прерываниям, но это неважно). Инкременты разумеется, по модулю размера буфера (поскольку он кольцевой). В чем я не прав? Цитата 3) Постановка вами задачи и ваши комментарии, мягко говоря, вызывают сомнения в том, что вы в теме. 4) [Чтобы развеять ваши встречные сомнения, скажу, что ваши 28МГц я могу измерить с погрешностью порядка 200 Гц за ОДНУ миллисекунду] Я и спрашивал совета как лучше это сделать. За 1мс пройдет 28000 импульсов одного генератора. Чтобы засечь минимальную разницу, надо чтобы со второго пришло или 27999 или 28001 импульс. Итого разница составит 1кГц. Если вы знаете секрет как поймать за 1мс 200гц имеющимися в распоряжении средствами - расскажите, думаю всем начинающим будет интересно.
|
|
|
|
|
May 20 2012, 16:10
|
Гуру
     
Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261

|
Цитата(Allregia @ May 20 2012, 19:41)  В моем представлении, есть буфер, есть два указателя - один на запись, другой на чтение, после каждого чтения идет инкремент указателя чтения, по каждой записи - инкремент указателя записи. (В моем случае это происходит по прерываниям, но это неважно). Инкременты разумеется, по модулю размера буфера (поскольку он кольцевой). В чем я не прав? Чисто формально, прежде чем выполнять инкремент указателя записи, необходимо убедиться в том, что буфер не полон и прежде, чем выполнять инкремент указателя чтения, необходимо убедиться в том, что буфер не пуст.
|
|
|
|
|
May 20 2012, 16:58
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(blackfin @ May 20 2012, 18:10)  Чисто формально, прежде чем выполнять инкремент указателя записи, необходимо убедиться в том, что буфер не полон и прежде, чем выполнять инкремент указателя чтения, необходимо убедиться в том, что буфер не пуст. Это понятно. Тут другое - поскольку частота записи и частота чтения чуть-чуть отличаются, через некоторое количество "оборотов" кольцевого буфера один указатель догонит другой. Повторю еще раз: Сейчас начальные условия - чтение начинается после заполнения половины буфера, расстояние между указателями и равно этой половине. Зная макс. допустимую разность частот и размер буфера можно посчитать через склько оборотов произойдет "наезд" и таким образом посчитать максимульную длину передачи без переполнения. Идея состоит в том, что если знать в какую сторону побежит указатель чтения относительно указателя записи - будет догонять или отставать (т.е. от знака разности частот), можно действовать по другому: - если частота чтения ниже частоты записи, то не надо ждать заполнения буфера, ставим указатель чтения сразу за указателем записи. - если частота чтения выше, то дожидаемся заполнения всего буфера, и ставим указатель чтения перед указателем записи. Таким образом, по сравнению с имеющимся вариантом, виртуальный размер буфера как бы вдвое увеличится, при том-же его физическом размере, поскольку начальная разница между указателями будет равна не половине буфера а целому. Т.е. можно или увеличить вдвое длину передачи, или при той-де длине уменьшить вдвое буфер. Не знаю, может я как-то сумбурно обьясняю, но вроде должно быть понятно. Если я в чем-то не прав - обьясните пожалуйста. К тому же, мне крайне любопытно как за 1мс поймать разность частот, меньшую одного импульса, как утверждалось выше.
|
|
|
|
|
May 21 2012, 06:34
|

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

|
Цитата(Allregia @ May 20 2012, 15:58)  Тут другое - поскольку частота записи и частота чтения чуть-чуть отличаются, через некоторое количество "оборотов" кольцевого буфера один указатель догонит другой Какая-то постановка задачи у вас не кошерная. В правильно спроектированной системе указатели "дышат", но никогда не перегоняют друг-друга. Кольцевой буфер предназначен именно для выравнивания неравномерности в поступлении данных и в их обработке. Если у вас данные начинают налезать на необработанные данные, значит, вы неправильно выбрали или длину буфера, или скорость обработки, или процессор, или алгоритм... По поводу измерения частоты на голой авр методом захвата посмотрите здесь http://electronix.ru/forum/index.php?showt...29796&st=15. Можно читать с начала, а можно сразу с моего поста #23. На арме я такую задачу не делал, но схемы захвата там есть, принцип работы тот же самый, должно работать. По моей оценке, при тактовой частоте проца 72 МГц, можно измерить 28 МГц за 4 мс с погрешностью 100 Гц. Цитата(Allregia @ May 20 2012, 15:58)  К тому же, мне крайне любопытно как за 1мс поймать разность частот, меньшую одного импульса, как утверждалось выше Увы, это ноу-хау, кстати, ваш земляк сделал примерно то же самое, он точно измеряет 1 МГц за 1 мс. Он сделал прибор на этой основе и успешно его продаёт. А я долгое время разрабатывал приборы дистанционного измерения момента вращения, давления и температуры. Радиоимпульс с частотой заполнения 450 МГц длительностью 17 мкс я измеряю за 50 мкс с точностью 1 Гц. Правда, там другая схемотехника, заказной эйсик и тексасовский дсп.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
May 21 2012, 07:03
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(=GM= @ May 21 2012, 08:34)  Какая-то постановка задачи у вас не кошерная. В правильно спроектированной системе указатели "дышат", но никогда не перегоняют друг-друга. Разумеется. Но вы согласны, что при конечной величине буфера, и неограниченной длине передачи, переполнение рано или поздо произойдет? Вот задача и состоит в том. чтобы выбрать макс. длину передачи, при заданном размере буфера. А оно зависит не только от размера буфера и разности частот, но и от алгоритма работы с буфером. Цитата Кольцевой буфер предназначен именно для выравнивания неравномерности в поступлении данных и в их обработке. Если у вас данные начинают налезать на необработанные данные, значит, вы неправильно выбрали или длину буфера, или скорость обработки, или процессор, или алгоритм... Или вы так и не поняли условие задачи. Скоость обработки существеннно ниже частоты поступления данных, для простоты можно принять что обработки вообще никакой нет, скорость процессора вообще ни на что не влияет, если за время между прерываниями он успевает взять данные по указателям и обработать сами указатели. Буфер - какой есть, он его размера и алгоритма (а о алгоритме-то я в веду речь) зависит максимальная выбираемая длина передачи. Поймите еще раз - размер буфера жестко задан, а вот длина передачи - как раз и выбирается так, чтобы небыло "наезда". Но что плохого в том, чтобы изменением алгоритма, при том же размере буфера увеличить допустимую длину передачи почти вдвое? Цитата По поводу измерения частоты на голой авр методом захвата посмотрите здесь http://electronix.ru/forum/index.php?showt...29796&st=15. Можно читать с начала, а можно сразу с моего поста #23. На арме я такую задачу не делал, но схемы захвата там есть, принцип работы тот же самый, должно работать. По моей оценке, при тактовой частоте проца 72 МГц, можно измерить 28 МГц за 4 мс с погрешностью 100 Гц. В той теме как раз более-менее все понятно, а вот тут - не очень. По сути - вы предлагаете абсолтно тоже самое что предложил и я - за некоторое время посмотреть сколько насчитает счетчик, работаюбщий от частоты F1, и сколько другой счетчик, работающий от F2. Только у меня обе частоты внешние, а у вас одна- частота процессора, как я понял. Но вот откуда беруться ваши конкретные цифры - совершенно непонятно. К примеру - вы можете сказать откуда взялись 200гц за 1мс в моем примере (частоты равны 28Мгц +-50ррм)? Тактовая частота процессора неважна, хоть 20, хоть 200мгц, она в процессе счета не участвует. Цитата Увы, это ноу-хау, кстати, ваш земляк сделал примерно то же самое, он точно измеряет 1 МГц за 1 мс. Он сделал прибор на этой основе и успешно его продаёт. А я долгое время разрабатывал приборы дистанционного измерения момента вращения, давления и температуры. Радиоимпульс с частотой заполнения 450 МГц длительностью 17 мкс я измеряю за 50 мкс с точностью 1 Гц. Измеряется что, длительность радиоимпульса или частота заполнения? И какое соотношение точностей измеряемой частоты и тактовой частоты измерительного устройства? В моем варианте, измерительное устройство НЕ обладает тактовым генератором более точным, чем измеряемые частоты. Цитата Правда, там другая схемотехника, заказной эйсик и тексасовский дсп. Тоесть совершенно ничего общего с данной задачей.
|
|
|
|
|
May 21 2012, 09:02
|
Гуру
     
Группа: Участник
Сообщений: 6 776
Регистрация: 5-03-09
Из: Москва
Пользователь №: 45 710

|
Цитата(Allregia @ May 21 2012, 10:03)  Скорость обработки существеннно ниже частоты поступления данных, для простоты можно принять что обработки вообще никакой нет Кажется, на пустом месте тема. Если Вы данные на ходу не обрабатываете, то куда и зачем читаете? Неужели весь этот сыр-бор только лишь для банального подсчёта контрольной суммы? Если данные всё же обрабатываете на ходу, то всего лишь, что надо, чтобы средняя скорость чтения была больше средней скорости записи. И никакие супербуферы не нужны. Например, писать байт, читать/обрабатывать слово, и т.п.
|
|
|
|
|
May 21 2012, 09:19
|
Профессионал
    
Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763

|
Цитата(Plain @ May 21 2012, 11:02)  Кажется, на пустом месте тема. Если Вы данные на ходу не обрабатываете, то куда и зачем читаете? Неужели весь этот сыр-бор только лишь для банального подсчёта контрольной суммы? Причем тут вообще контрольная сумма и где у меня написано, что данные не обрабатываются? Я сказал что в данном случае мы обсуждаем не обработку, а не зачем нужен этот буфер. Примите это как данность. Цитата Если данные всё же обрабатываете на ходу, Не только обрабатываются, но еще и дальше передаются. Но процесс обработки мы не обсуждаем, поскольку на работу с буфером он не влияет. Цитата то всего лишь, что надо, чтобы средняя скорость чтения была больше средней скорости записи. И никакие супербуферы не нужны. Например, писать байт, читать/обрабатывать слово, и т.п. Не возражаю. Как вы преполагаете сделать, чтобы "средняя скорость чтения была больше средней скорости записи", если они тактируются от разных генераторов, имеющих одну, в пределах допуска частоту? Готов выслушать все варианты, но только по теме а не "лишь бы поговорить о чем-то постороннем".
|
|
|
|
Сообщений в этой теме
Allregia Сревнение двух частот May 7 2012, 21:07 =GM= Можно из одного сигнала сделать некий интервал, ск... May 8 2012, 06:29 ViKo Цитата(=GM= @ May 8 2012, 09:29) Можно из... May 9 2012, 07:48  Семин Если допустимо добавление компонентов, тогда навер... May 9 2012, 09:19   Allregia Цитата(Семин @ May 9 2012, 11:19) Если до... May 9 2012, 21:38 Семин Если нужна только долговременная разница, то это ... May 10 2012, 19:36 Allregia Цитата(Семин @ May 10 2012, 21:36) Если н... May 10 2012, 21:20  Herz Цитата(Allregia @ May 11 2012, 00:20) Во ... May 10 2012, 22:14   Allregia Цитата(Herz @ May 11 2012, 00:14) Всё стр... May 13 2012, 05:19    fox2trot Цитата(Allregia @ May 13 2012, 09:19) Есл... May 13 2012, 22:05     Allregia Цитата(fox2trot @ May 14 2012, 00:05) С ч... May 14 2012, 05:22 fox2trot Цитата(Allregia @ May 8 2012, 01:07) Абсо... May 11 2012, 14:49 Семин Можно просто запустить счётчики, периодически счи... May 11 2012, 18:50 Plain Цитата(Семин @ May 11 2012, 21:50) Можно ... May 13 2012, 05:59 Семин Если разница большая, то засечь её можно быстро.
А... May 14 2012, 19:25 Allregia Цитата(Семин @ May 14 2012, 21:25) Если р... May 14 2012, 21:55  =GM= Цитата(Allregia @ May 14 2012, 20:55) Сей... May 16 2012, 04:59   Allregia Цитата(=GM= @ May 16 2012, 06:59) Не надо... May 16 2012, 07:30    =GM= Ну, если вы всё знаете, зачем спрашиваете? May 17 2012, 19:53     Allregia Цитата(=GM= @ May 17 2012, 21:53) Ну, есл... May 19 2012, 21:29      =GM= 1) Читаю я всегда внимательно, скажу больше, даже ... May 20 2012, 09:48      =GM= Удалил повторное сообщение May 20 2012, 09:49 Семин Для чего это нужно, всё равно не понятно, "Се... May 15 2012, 17:33 Allregia Цитата(Семин @ May 15 2012, 19:33) Для че... May 15 2012, 20:43     =GM= 1) Ну тут одно из двух, или я неправильно понял ус... May 21 2012, 07:23      Allregia Цитата(=GM= @ May 21 2012, 09:23) 1) Ну т... May 21 2012, 07:41       Plain Цитата(Allregia @ May 21 2012, 12:19) Как... May 21 2012, 09:28        Allregia Цитата(Plain @ May 21 2012, 11:28) Просто... May 21 2012, 09:47         Plain Цитата(Allregia @ May 21 2012, 12:47) про... May 21 2012, 10:38          Allregia Цитата(Plain @ May 21 2012, 12:38) Наприм... May 21 2012, 10:43           Plain Цитата(Allregia @ May 21 2012, 13:43) Это... May 21 2012, 11:19            Allregia Цитата(Plain @ May 21 2012, 13:19) Продол... May 21 2012, 11:38             Plain Цитата(Allregia @ May 21 2012, 14:38) Для... May 21 2012, 13:27              Allregia Цитата(Plain @ May 21 2012, 15:27) Нет, э... May 21 2012, 14:34 Xenia Цитата(Allregia @ May 8 2012, 01:07) Есть... May 20 2012, 18:04 Allregia Цитата(Xenia @ May 20 2012, 20:04) Надо о... May 20 2012, 19:49 Victor® Цитата(Xenia @ May 20 2012, 21:04) А пото... May 20 2012, 20:21
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|