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

 
 
3 страниц V  < 1 2 3 >  
Closed TopicStart new topic
> Сревнение двух частот
Allregia
сообщение May 14 2012, 21:55
Сообщение #16


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(Семин @ May 14 2012, 21:25) *
Если разница большая, то засечь её можно быстро.
А если маленькая, то ждать придётся относительно долго.


Там время есть, в разумных пределах.

Цитата
Обязательно нужно засечь разницу или нет?
Зачем вообще всё это надо?


Полностью долго рассказывать, а если кратко - есть две системы, тактируемые от своих генераторов. С одной системы данные поступают пачками на другую, через процессор, в котором некоторая обработка и FIFO.
В начале каждой пачки есть почти секунда на тестирование сигналов, ну а дальше - допустимая длина пачки зависит от размера
FIFO (и макс. возможной разности частот).
Сейчас в начале пачки заполняется половина FIFO, а его размер выбран так, чтобы при максимальной разности частот не происходило переполнения. Т.е. начальная разница между указателями равна половине буфера, при Fread>Fwrite указатель чтения будет догонять указатель записи, Fread<Fwrite - отставать.
Идея состоит в том, что если заранее знать условие, например Fread>Fwrite, то дождавшись полного заполнения буфера, можно указатель чтения ставить на на пол буфера позже указателя записи, а сразу пере ним. Если Fr<Fw, то указатель чтения сразу после указателя записи. Таким образом, начальная разница указателей будет равна не половине размера буфера а целому, и при то-же влеличине буфера мжоно длину пачки увеличить почти вдвое, или наоборот - почти вдвое уменьшить величину буфера при неизменной пачке.
Разумеется, при условии что за время пакета разность частот не меняет знак. (если это и произойдет, то не страшно, если оно будет детектировано - пакет будет отброшен).
Go to the top of the page
 
+Quote Post
Семин
сообщение May 15 2012, 17:33
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 142
Регистрация: 27-04-12
Пользователь №: 71 608



Для чего это нужно, всё равно не понятно, "Секретная информация", ну да ладно, дело хозяйское.
Похоже тока что разница нужна обязательно. Тогда если она маленькая, может понадобиться
много времени. А если в течении разумного предела, разница так и не будет определена?
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 15 2012, 20:43
Сообщение #18


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(Семин @ May 15 2012, 19:33) *
Для чего это нужно, всё равно не понятно, "Секретная информация", ну да ладно, дело хозяйское.


Я вроде обьяснил для чего.

Цитата
Похоже тока что разница нужна обязательно. Тогда если она маленькая, может понадобиться
много времени. А если в течении разумного предела, разница так и не будет определена?


Тогда как и раньше - на середину буфера, если разница маленькая, проблем не будет.
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 16 2012, 04:59
Сообщение #19


Ambidexter
*****

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



Цитата(Allregia @ May 14 2012, 20:55) *
Сейчас в начале пачки заполняется половина FIFO, а его размер выбран так, чтобы при максимальной разности частот не происходило переполнения. Т.е. начальная разница между указателями равна половине буфера, при Fread>Fwrite указатель чтения будет догонять указатель записи, Fread<Fwrite - отставать

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


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 16 2012, 07:30
Сообщение #20


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(=GM= @ May 16 2012, 06:59) *
Не надо изобретать велосипед, поставьте кольцевой буфер с указателями на запись и чтение.


Не очень понял этой реплики - какие "изобретения"? Именно кольцевой буфер с двумя указателями и используется.
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 17 2012, 19:53
Сообщение #21


Ambidexter
*****

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



Ну, если вы всё знаете, зачем спрашиваете?


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 19 2012, 21:29
Сообщение #22


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(=GM= @ May 17 2012, 21:53) *
Ну, если вы всё знаете, зачем спрашиваете?


Если бы внимательнее читали исходное сообщение а также следующие комментарии к нему, то вы бы навернон поняли что именно я спрашивал, и у вас бы этого вопроса не возникло.
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 20 2012, 09:48
Сообщение #23


Ambidexter
*****

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



1) Читаю я всегда внимательно, скажу больше, даже внимательнее, чем вы пишете.
2) Кольцевой буфер не так работает, как вы описываете.
3) Постановка вами задачи и ваши комментарии, мягко говоря, вызывают сомнения в том, что вы в теме.
4) [Чтобы развеять ваши встречные сомнения, скажу, что ваши 28МГц я могу измерить с погрешностью порядка 200 Гц за ОДНУ миллисекунду]


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
=GM=
сообщение May 20 2012, 09:49
Сообщение #24


Ambidexter
*****

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



Удалил повторное сообщение


--------------------
Делай сразу хорошо, плохо само получится
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 20 2012, 15:41
Сообщение #25


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

Группа: Свой
Сообщений: 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гц имеющимися в распоряжении средствами - расскажите, думаю всем начинающим будет интересно.
Go to the top of the page
 
+Quote Post
blackfin
сообщение May 20 2012, 16:10
Сообщение #26


Гуру
******

Группа: Свой
Сообщений: 3 106
Регистрация: 18-04-05
Пользователь №: 4 261



Цитата(Allregia @ May 20 2012, 19:41) *
В моем представлении, есть буфер, есть два указателя - один на запись, другой на чтение, после каждого чтения идет инкремент указателя чтения, по каждой записи - инкремент указателя записи. (В моем случае это происходит по прерываниям, но это неважно).
Инкременты разумеется, по модулю размера буфера (поскольку он кольцевой).
В чем я не прав?

Чисто формально, прежде чем выполнять инкремент указателя записи, необходимо убедиться в том, что буфер не полон и прежде, чем выполнять инкремент указателя чтения, необходимо убедиться в том, что буфер не пуст.
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 20 2012, 16:58
Сообщение #27


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(blackfin @ May 20 2012, 18:10) *
Чисто формально, прежде чем выполнять инкремент указателя записи, необходимо убедиться в том, что буфер не полон и прежде, чем выполнять инкремент указателя чтения, необходимо убедиться в том, что буфер не пуст.


Это понятно. Тут другое - поскольку частота записи и частота чтения чуть-чуть отличаются, через некоторое количество "оборотов" кольцевого буфера один указатель догонит другой.
Повторю еще раз:
Сейчас начальные условия - чтение начинается после заполнения половины буфера, расстояние между указателями и равно этой половине.
Зная макс. допустимую разность частот и размер буфера можно посчитать через склько оборотов произойдет "наезд" и таким образом посчитать максимульную длину передачи без переполнения.
Идея состоит в том, что если знать в какую сторону побежит указатель чтения относительно указателя записи - будет догонять или отставать (т.е. от знака разности частот), можно действовать по другому:
- если частота чтения ниже частоты записи, то не надо ждать заполнения буфера, ставим указатель чтения сразу за указателем записи.
- если частота чтения выше, то дожидаемся заполнения всего буфера, и ставим указатель чтения перед указателем записи.
Таким образом, по сравнению с имеющимся вариантом, виртуальный размер буфера как бы вдвое увеличится, при том-же его физическом размере, поскольку начальная разница между указателями будет равна не половине буфера а целому.
Т.е. можно или увеличить вдвое длину передачи, или при той-де длине уменьшить вдвое буфер.
Не знаю, может я как-то сумбурно обьясняю, но вроде должно быть понятно.
Если я в чем-то не прав - обьясните пожалуйста.
К тому же, мне крайне любопытно как за 1мс поймать разность частот, меньшую одного импульса, как утверждалось выше.
Go to the top of the page
 
+Quote Post
Xenia
сообщение May 20 2012, 18:04
Сообщение #28


Гуру
******

Группа: Модератор FTP
Сообщений: 4 479
Регистрация: 20-02-08
Из: Москва
Пользователь №: 35 237



Цитата(Allregia @ May 8 2012, 01:07) *
Есть два кварцевых генератора, частота 28мГц, с точностью/стабильностью 50ррм.
Процессор STM32F103 должен определить у какого генератора частота выше.
Абсолютное значение не интересует.
Я пока ничего умнее не придумал, чем подать на два счетчика, запустить их одновременно, через какое-то время остановить и посмотреть на разницу в показаниях.
Или может есть другой способ?


Надо одну частоту подать на вертикальный вход осциллографа, а вторую частоту - на горизонтальный. А потом посмотреть на фигуру Лиссажу. sm.gif
Go to the top of the page
 
+Quote Post
Allregia
сообщение May 20 2012, 19:49
Сообщение #29


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

Группа: Свой
Сообщений: 1 047
Регистрация: 28-06-07
Из: Israel
Пользователь №: 28 763



Цитата(Xenia @ May 20 2012, 20:04) *
Надо одну частоту подать на вертикальный вход осциллографа, а вторую частоту - на горизонтальный. А потом посмотреть на фигуру Лиссажу. sm.gif


Вы случайно не в Майкрософте работаете? sm.gif
Go to the top of the page
 
+Quote Post
Victor®
сообщение May 20 2012, 20:21
Сообщение #30


Lazy
******

Группа: Свой
Сообщений: 2 070
Регистрация: 21-06-04
Из: Ukraine
Пользователь №: 76



Цитата(Xenia @ May 20 2012, 21:04) *
А потом посмотреть на фигуру Лиссажу. sm.gif


http://ru.wikipedia.org/wiki/%D0%9B%D0%B8%...%83%D0%B0%D0%BD

Не видно фигуры - скрыта каким-то лапсердаком biggrin.gif


--------------------
"Everything should be made as simple as possible, but not simpler." - Albert Einstein
Go to the top of the page
 
+Quote Post

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

 


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


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