Здравствуйте, гость ( Вход | Регистрация )

Форум » Сайт и форум » Разработки и Статьи на сайте » Все вопросы касающиеся Neil Scope (Ваши замечания, предложения и т.д.)
Все вопросы касающиеся Neil Scope
LeftRadio Пятница, 26.03.2010, 21:41 | Сообщение # 1
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Шапка темы.

--
NEIL SCOPE 2



--------------------------------------------------------------------------------------

--
NEIL SCOPE 3

Схема ревизия 3.2 - NS_3.0_rev_3.2.pdf
Схема соединения ЖК с 16-ти битной шиной(только для ревизий ниже 3.2, в 3.2 HC573 уже есть на основной плате) - NS_3.0_HC573.pdf
BOM(список компонентов) - BOM_NS3_rev3_2.htm

-------------------------------------------------------------------

-------------------------------------------------------------------

Прошивка ПЛИС --- 19/05/15

MCU Bootloader (загрузчик МК) --- 17/10/13
Прошивка МК (ЖК с 8бит, 65к цветов) --- 2015_17_15
Прошивка МК (ЖК с 8 бит, 262к цветов) --- 2015_17_15
Прошивка МК для (ЖК с 16бит, HC573, 262к цветов) --- 2015_12_17

Исходники ПЛИС (github) --- 11_12_13
Исходники МК (github) --- 12/02/15
Архивные прошивки МК

Краткое описание осциллографа
Протокол обмена NeilScope3 с ПК

//----------------------------------------------------------------------------------------------------------
Прошивальщик МК (автор Ильдар) - NSFlashLoader2.
Утилита для перепрошивки СР2102 VID/PID под NeilScope3 (автор Ильдар) - NSCP2102Utilite2.rar.
Использование данных VID/PID для перепрошивки СР2102 под другие устройства категорически запрещено, они были получены по запросу у Silicon Laboratories Inc. и предназначены для использования только с NeilScope3 или другими версиями NeilScope.

Утилита для теста осциллографа - ns_test_util.
Для запуска нужно скачать и установить Python 3.4 и PyQt5, при установке добавляем переменные окружения. Распаковать архив куда нибудь и набрать из этой папки в консоли - "python main.py"

Драйвера для NeilScope3 (под перепрошитые VID/PID) - NeilScopeDriver.zip

Процедура прошивки МК(обновлено 23.08.2015) - FirmwareManual.pdf

Для последующих обновлений просто запускаем NSFlashLoader, и обновляемся. Джампер при этом трогать уже не нужно.

//----------------------------------------------------------------------------------------------------------
.
.
.
Важные замечания по сборке

На плате не указана перемычка с 10-го вывода(INTRL) 74НС4052(U15) на вывод SWDIO МК, можно и просто подпаять пока на +3.3В в любое удобное переходное отверстие.

//----------------------------------------------------------------------------------------------------------

Фото платы ревизии 3:



Демо видео работы осциллографа, ревизия 1.9

----------------------------------------------------------------------------------------
Схема и плата ByteBlusterMV для программирования EPM570, оригинал здесь. Эту плату делал сам, проверена, работает.
.
.
//----------------------------------------------------------------------------------------------------------

Любое коммерческое использование данного проекта категорически запрещено. По всем вопросам обращаться wladkam(гав)mail.com
Прикрепления: 5561811.jpg (244.1 Kb) · 2201731.jpg (212.8 Kb)


---

Нет войне!


Сообщение отредактировал LeftRadio - Четверг, 17.12.2015, 04:59  
 
LeftRadio Пятница, 09.03.2012, 14:53 | Сообщение # 2561
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (kison)
Т.е. после окончания записи в счетчике уже будет адрес триггера. В общем случае этот адрес нафиг не нужен - момент триггера не обязательно начало интересующего временного промежутка.

Ну да, оно ведь так сейчас и работает :) Только после окончания записи адрес на котором остановились переносится в счетчик чтения, так как чтение асинхронно к записи :)

Quote (kison)
Кстати - а почему WIN_counter имеет 16 разрядов, а не 18? Его разрядность должна совпадать с разрядностью счетчика адреса.

Ну вот спалил :D , вообще я думал "накопить" изменений в ПЛИС и заодно "поправить" разрядность WIN_counter, ну а потом пошло поехало с улучшениями и это все отложилось.


---

Нет войне!
 
kison Пятница, 09.03.2012, 15:12 | Сообщение # 2562
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (LeftRadio)
Ну да, оно ведь так сейчас и работает Только после окончания записи адрес на котором остановились переносится в счетчик чтения, так как чтение асинхронно к записи

Ну да. И чтоб получить то, что кое кто получает путем довесков каких то компараторов левых достаточно задать в WIN_counter значение на 1 меньшее объема памяти. В смысле не объема, а максимально возможного адреса. Тогда после триггера запишется память полностью и в счетчике адреса записи будет адрес триггера ( он на 1 больше последнего адреса куда записывались данные). Само по себе получилось без компараторов и прочей мути.
Quote (LeftRadio)
и заодно "поправить" разрядность WIN_counter

Поправить это несложно.
 
LazyCat Пятница, 09.03.2012, 22:39 | Сообщение # 2563
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
Вот же надо же не разглядел Хотя сам его использовал в этой утилитке

И при том, что я это повторял неоднократно, начиная с поста 1488 ? Странно :( Или Вы внимательно слушаете только местного тролля ? Тогда Вам следует найти логику в его постах 1143 и 2577 !!!
А вообще, техзадание на ЛА мы обсуждали, начиная с поста 1330. И Вы сами согласились, что в качестве софта для ЛА лучше брать нечто готовое, вроде USBee, и, значит, он должен быть с ним совместим ! Так и решили, что ЛА осуществляет захват с сжатием во всю доступную память, а при выводе через USB в файл происходит преобразование в формат USBee. Если после этого техзадание было изменено, то Вы не поставили об этом в известность :( И то, что я предложил, полностью удовлетворяет этой концепции !!!
Более того, ставилась задача получить ЛА минимальными доработками существующего дизайна, чего я и добился ! Правда, в полном соответствии с техзаданием, пришлось отказаться от режима предыстории в ЛА (ну нету его в USBee) :( Кстати, можно поступить и по-другому, если в режиме ЛА счетчик адреса держать постоянно в сбросе и только после срабатывания триггера отпускать его на счет, а останавливать его при достижении нулевого адреса(это тоже своего рода компаратор), но этот вариант имеет один существенный недостаток.
И не поддавайтесь на провокацию, что WIN_counter все решит - это миф, если спокойно подумаете, то сами в этом убедитесь !!! И незачем увеличивать его размерность, этого достаточно для всех режимов осциллографа, а в ЛА он не используется(я уже объяснил почему).
Но, как всегда, выбирать автору :D

P.S. Но я все никак не пойму, что может быть непонятно в такой простой идее и вызывать такие споры ??? К тому же я предлагал начать ее обсуждение отнюдь не со счетчиков(потому и не хотел все сразу рисовать) !!! Если кто-то уводит тему обсуждения в сторону, значит, это кому-то очень выгодно !!! Странно все это выглядит :(
 
kison Пятница, 09.03.2012, 23:19 | Сообщение # 2564
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (LazyCat)
Более того, ставилась задача получить ЛА минимальными доработками существующего дизайна, чего я и добился ! Правда, в полном соответствии с техзаданием, пришлось отказаться от режима предыстории в ЛА (ну нету его в USBee)

Куда она делась? Там вообще другой принцип - непрерывный захват, а не какое то окно. Предыстория в теории "бесконечна" - аж с момента включения прибора.
Quote (LazyCat)
И не поддавайтесь на провокацию, что WIN_counter все решит - это миф, если спокойно подумаете, то сами в этом убедитесь !!!

У меня решает. Все это давно реализовано и отсимулировано во всех мыслимых режимах. С чего бы тут стало иначе?
Quote (LazyCat)
И незачем увеличивать его размерность, этого достаточно для всех режимов осциллографа,

Недостаточно. От 1/2 до 3/4 памяти не используется. Зачем тогда ее такую ставить?
Quote (LazyCat)
а в ЛА он не используется(я уже объяснил почему).

Причина отличная. Раз не понимаете как работает - можно утверждать, что не используется? :D
Вообще научитесь уже отстаивать свое мнение, а не рисовать очередную странную картинку - типа сами разбирайтесь что я напридумывал. Начнем с малого. Вопрос был в 2549 сообщении. Повторю еще раз:
Quote (kison)
Ждем сигнала 1x0x1x0x. Это по разрядам. х - неопределенное состояние, нам оно неинтересно. Достаточно совпадения в 4-х интересующих разрядах. Что должно быть на Trigger_level_A и Trigger_Level_B? Раз собрано в железе - значит Вы знаете свою схему от и до. Или нет?

Это было на утверждение что:
Quote (LazyCat)
2. схема, нарисованная красным - это, можно сказать, триггер, и он собран у меня очень давно в "железе", но об этом я неоднократно уже писал. Он и задает всевозможные режимы синхронизации - ЛА запустится когда совпадут некоторые условия, например, когда некоторые линии будут в состоянии "1", а некоторые другие в состоянии "0". И при этом все комбинации произвольны !

Я Вам дал произвольную комбинацию. И хотел бы услышать конкретный ответ - что должно быть на Trigger_level_A и Trigger_Level_B? Отвечать за свои слова это нормальное мужское качество. Впрочем если Вы женского пола можете не отвечать - женщинам это простительно. :D

Quote (LazyCat)
Но я все никак не пойму, что может быть непонятно в такой простой идее и вызывать такие споры ???

Да вроде никто и не спорил. Вы же свои идеи все равно не отстаиваете. Как можно спорить, если один из участников сразу в кусты?
Так обычно страусы поступают - чуть что, сразу голову в песок. У Вас в роду случайно страусов не было? :D
 
LazyCat Пятница, 09.03.2012, 23:51 | Сообщение # 2565
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (kison)
Отвечать за свои слова это нормальное мужское качество.

В посте 2501 я предложил прекратить с Вами общение, а Вы в посте 2510 согласились !!! И с тех пор я держу слово, а не вою как баба, тем более, что общаться мне с Вами противно(даже если поумнеете). Поэтому и не отвечаю на все Ваши вопросы и выпады. Собака лает - караван идет !!!
 
kison Суббота, 10.03.2012, 00:35 | Сообщение # 2566
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Ясно. Страусы были однозначно. Продолжайте рисовать веселые картинки, не думаю что их кто нибудь будет смотреть. :D
Вообще как Вас Влад выносит мне не понять. Такого необразованного хамла с гипертрофированным самомнением я до Вас ни разу не встречал. Я бы забанил давно.
Сразу после этого - http://hobby-research.at.ua/forum/2-1-1949-16-1310452062
Quote (LazyCat)
И с тех пор я держу слово

Да ладно? Ответ то таки написан. :D
Впрочем я не гордый - попрошу Влада задать этот вопрос. Ему тоже ответа не будет? Непогрешимый Вы наш. :D
Влад - задайте этот вопрос Вы.

Добавлено (10.03.2012, 00:35)
---------------------------------------------
Почитал тут средину ветки. Ничего не меняется :D :

Quote (LeftRadio)
Ваш вариант единственно правильный, а я изобретаю велосипед. Как тут найти взаимопонимание бог его знает.... А по существу ответить Вам нечего вот и начинается черти что, фальсификат и т.д..

Quote (LeftRadio)
Спор прекращаю, это явно неадекватное поведение, уж извините. Каждый кто хочет может просимулировать Ваш вариант и увидеть что я ничего не фальсифицировал. Ваши обвинения оскорбительны, как и Ваги утверждения что я это делаю специально!

Спора там правда не было. Что тогда за свой базар LazyCat не отвечал, что сейчас....
 
LeftRadio Суббота, 10.03.2012, 02:39 | Сообщение # 2567
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
И при том, что я это повторял неоднократно, начиная с поста 1488 ? Странно :(

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

Quote (LazyCat)
А вообще, техзадание на ЛА мы обсуждали, начиная с поста 1330. И Вы сами согласились, что в качестве софта для ЛА лучше брать нечто готовое, вроде USBee, и, значит, он должен быть с ним совместим ! Так и решили, что ЛА осуществляет захват с сжатием во всю доступную память, а при выводе через USB в файл происходит преобразование в формат USBee.

Да было бы неплохо использовать готовый софт, но к сожалению USBee у меня нет и о его входных форматах я не знаю, да и в принципе какая разница пишем данные в память как нам удобно и как удобно их при желании просмотреть на экране самого осцилла, а при сливе в ПК, или на самом ПК преобразовываем данные в формат USBee. Есть там предыстория или нет мне кажется пофиг, при конвертации выставим маркер синхронизации в начало данных, ну или не маркер, а что нужно для USBee.

Quote (LazyCat)
Более того, ставилась задача получить ЛА минимальными доработками существующего дизайна, чего я и добился !

Ну а почему бы действительно не использовать уже существующие блоки осциллографа, как мне видится достаточно добавить блок синхронизации для ЛА, ну и мультиплексор на данные и на синхронизацию, действительно зачем еще что то? Заносим в счетчик значения небходимой длинны записи, выключаем предысторию если не нужна и пишем, по окончании последний адрес уже лежит в счетчике чтения, берем читаем :) В общем все как в осциллографе, если нужно слить эти данные на ПК для отображения в готовом или собственном софте, то распаковываем их и конвертируем. Единственную сложность вижу в блоке синхронизации для ЛА, все остальное вроде есть :)

Quote (LazyCat)
И не поддавайтесь на провокацию, что WIN_counter все решит - это миф, если спокойно подумаете, то сами в этом убедитесь !!!

Подумаю, пока думаю что решит, почему описал выше :)

Quote (kison)
Отвечать за свои слова это нормальное мужское качество. Впрочем если Вы женского пола можете не отвечать - женщинам это простительно. :D

Quote (kison)
Так обычно страусы поступают - чуть что, сразу голову в песок. У Вас в роду случайно страусов не было? :D


Ну народ, я все понимаю но прошу давайте не переходить до оскорблений :(


---

Нет войне!
 
LeftRadio Суббота, 10.03.2012, 11:50 | Сообщение # 2568
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Не могу побороть я этот верилог :D , вот тот модуль триггера что уже выкладывал, модуль отладил и он работал :) , затем решил добавить следующее - ставим счетчик который при срабатывании первого условия(уровень сигнала ниже уровня синхронизации если по фронту) запускался бы и отсчитав некоторое количество тактов, останавливался, разрешая второе условие(уровень сигнала выше уровня синхронизации если по фронту), то есть разрешая срабатывание триггера если выполняется второе условие(lst_event). Но если по окончании счета уровень сигнала ниже уровня синхронизации, то счетчик должен сбросится и опять ждать первого условия... Так вот пока не начал добавлять этот счетчик все работало как часы, только добавил началась ахинея, правда может это у меня с мозгами а не с верилогом :D . Внешний сигнал C_IN также должен блокировать счетчик, события он уже блокирует. Вот исходник, счетчик в этом блоке:

Code

if(SlCounterEN == 1) begin
               if(SlCounter == 0) begin
                   if(sync_state == 0) begin
                       SlCounter <= 7;                       
                       lst_event <= 0;
                   end      
                   else SlowCounterRun <= 0;
               end
               else SlCounter <= SlCounter - 1;   
           end               
           else if((SlCntEN | SlowCounterRun) == 0) lst_event <= sync_state;


Это все в файле SyncTrigger.v, а SynchronizationBlock.v это топ файл для SyncTrigger.v и WIN_Counter.v
Прикрепления: SyncTrigger.v (1.7 Kb) · WIN_Counter.v (1.0 Kb) · Synchronization.v (1.1 Kb)


---

Нет войне!


Сообщение отредактировал LeftRadio - Суббота, 10.03.2012, 11:51  
 
kison Суббота, 10.03.2012, 16:34 | Сообщение # 2569
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Я если честно задачу не понял. В файлах полно логических ошибок.
К примеру:
Code
  
input SlCntEN; // разрядность 1 бит
reg [2:0] SlCounter, SlowCounterRun; // SlowCounterRun -3 бита

// а теперь они по И объединены.  
wire SlCounterEN = SlCntEN & SlowCounterRun & frst_event;

Не надо объявлять цепи или регистры через запятую. Это способ запутаться.
Понять, что в модуле не так я не могу - не знаю что должно быть. Комментариев нет, имена цепей не самодокументирующиеся. Что такое H_OFF? А DFF_IN?
В общем что хочется получить?

Добавлено (10.03.2012, 16:34)
---------------------------------------------
Это предысторию отсчитывать счетчиком в плис вместо выдержки времени в МК?

 
Arpad Суббота, 10.03.2012, 23:50 | Сообщение # 2570
Частый посетитель
Группа: Проверенные
Сообщений: 58
Статус: Offline
Quote
В каждом интересном и важном деле есть пять-семь обязательных стадий: начальная ценная идея, шумиха, неразбериха, прозрение,
поиски виновных, наказание невиновных и награждение непричастных. (Данное высказывание имеет отношение только частично!)
Дополнение к посту 07.03.2012, 22:43 # 2556
Заменяем каждый трех позиционный тумблер на пол корпуса ХХХХ_ЛА3 получаем рабочий красный кирпич.
Quote (kison)
Я задаю условие- Вы говорите как его выполнить. Ждем сигнала 1x0x1x0x. Это по разрядам.
х - неопределенное состояние, нам оно неинтересно. Достаточно совпадения в 4-х интересующих разрядах.
Что должно быть на Trigger_level_A и Trigger_Level_B?
Решение в приложении.
Прикрепления: Razbor_polet2-1.doc (70.0 Kb)
 
LeftRadio Воскресенье, 11.03.2012, 07:26 | Сообщение # 2571
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (kison)
Я если честно задачу не понял.

Задача в следующем - задержать срабатывание второго условия триггера, триггер сейчас работает так, например синхронизируемся по фронту и без предыстории, ждем пока сигнал не будет ниже порога срабатывания триггера - защелкивается первое событие(frst_event), затем при превышении сигнала порога второе событие(lst_event), если сработали оба то на выход идет сигнал запускающий счетчик выборок, после окончания записи сбрасываем оба события и все сначала. Эти два события нужны для того что бы триггер не срабатывал при запуске синхронизации если сигнал уже выше порога срабатывания и при оконном триггере. Тут все отлажено и работает, но я хотел добавить режим синхронизации с задержкой второго условия(lst_event), затем что бы при пологих фронтах и шумном сигнале была четкая синхронизация иначе имеем ложные срабатывания в любом месте из-за "фронтов" шума, вот по быстрому нарисовал:



Я хочу задержать второе событие на некоторое количество выборок(потом можно будет сделать и переменным) для того что бы если сигнал после задержки меньше порога то не выдавался бы сигнал запуска а все сбрасывалось бы, если же все нормально и сигнал выше порога то запуск счетчика выборок. Зная на сколько у нас стоит задержка легко получить момент синхронизации. По поводу кода, это да, в таком виде не особо читабелен, приведу в порядок, добавлю комментарии.

Quote (kison)
Не надо объявлять цепи или регистры через запятую. Это способ запутаться.

Quote (kison)
reg [2:0] SlCounter, SlowCounterRun; // SlowCounterRun -3 бита

Спасибо буду знать, а я думал что если после запятой не ставить типа [N:0], то второе обьявление автоматом однобитное...

Quote (kison)
Это предысторию отсчитывать счетчиком в плис вместо выдержки времени в МК?

А это уже есть, WIN_Counter это делает :) , отсчитывает "предысторию", потом ждет триггера и считает "историю", но это не оно, то что надо выше расписал, пока не удается побороть...

Quote (LazyCat)
А я и призывал вначале обсудить блок синхронизации для ЛА, ну и мультиплексор на данные и на синхронизацию, ну и где то обсуждение ???

Вот если честно не помню призывы к обсуждению, помню Вы писали что еще давно выкладывали схемную реализацию(да и вообще все что касается ЛА) а я "похерил", это не так, а из одного сообщения как куда подсоединить XOR мне трудно было тогда, да и сейчас, понять как оно должно работать, мне вот не лень было расписывать как и что работает в моем варианте триггера, неужели Вам это так тяжело, хотя бы пару слов, а не просто схема. Но это все не так важно, просто времени было мало вот и не было обсуждения, да и ведь писал что сначала доделываю скоп, а уж потом ЛА имеется ввиду ддизайн в ПЛИС, пока у меня было время только на переписку блока синхронизации под верилог, так как схемно что то менять очень утомительно, проще изменить пару строчек кода :) Как закончу с этим приймусь за ЛА.

Quote (LazyCat)
А мы до этого дошли в обсуждении ? Вы, даже не вдумываясь, послушали какого-то хама и решили, что это все лишнее.

Неправда, не нужно писать кого я послушал/не послушал, это были мои собственные рассуждения, они кстати были примерно такие же и до того как Вы выложили первый вариант схемы с ЛА, просто я не представлял блок синхронизации для ЛА, в остальном не вижу отличий с осциллографом, если не прав то прошу написать почему, а не утверждения кого я послушал/не послушал, ну вот что стоило Вам написать почему то что Вы нарисовали не лишнее, а необходимо в схеме и какие функции выполняет? И почему без этого никак, хотя это могло быть и так понятным из их назначения.

Quote (LazyCat)
Ну и зачем его увеличивать ? Сейчас при предыстории 64К и 64К основных выборок и так занята половина памяти.

Что бы использовать всю память во всех режимах, без предыстории в том числе, правда это не два LE а чуть больше так как нужно еще увеличить разрядность счетчика адреса и дополнительный регистр в блоке регистров на 4-ре бита.

Quote (LazyCat)
а и спросите тут на форуме, нужно ли для осциллографа столько выборок !

Нужно :) Усреднение никто не отменял, бывает полезным :) Записали всю память и усреднили до необходимого количества точек, или слили всю на ПК, или по кускам выборочно смотреть, хотя последнее врядли нужно, но пускай возможность будет.

Quote (LazyCat)
Я Вас, как автора и модератора этого форума, просто не понимаю :(

А что я должен как админ делать? Забанить kison-а из-за его неприязни к Вам и несколько резкой критики Вашей схемы? Так замете, когда kison предлагал способ с моментом синхронизации, который кстати сейчас работает в осцилле, Вы сказали что у него проблемы с головой(не дословно, не хочу сейчас рыться искать как точно), после этого думаю у многих возникнет обоснованная неприязнь. Так что я по Вашему не сделал? Ну вот не хотел встревать в споры а втянули :(

Quote (volk0203)
Судя по нескольким последним страницам осциллограф больше никого не интересует... :(

Неправда :)

Quote (volk0203)
Бросились обсуждать ЛА, в осциллографе, видимо, никаких проблем больше нет, достигнуто всё! В этой связи хотелось бы всё же знать, какими характеристиками обладает осциллограф в сегодняшнем железе? Файл NS3_description.pdf старый.

NS3_description.pdf сегодня обновлю.

Quote (LazyCat)
Но суть не в этом. Вот Вы очень много говорите и много не по делу, а конкретных предложений не даете. Ни одного рисунка с вариантами не привели :(

Это неправда, kison во многом по работе ПЛИС помог разобраться, да и по аналогу его критика по делу помогала :) Не обязательно рисовать в верилоге многое сделать быстрее и удобней чем в схемном, с верилогом кстати тоже kison помогает разобраться, так что тут Вы не правы.

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

Quote (LazyCat)
И хотя Вы настойчиво продолжаете флудить, я не собираюсь овечать флеймом. Убедительная просьба, то что Вы сказали на этом форуме, не говорите на других - засмеют :D
А для остальных коллег поясню теорию, чтобы были в курсе возникшей дилеммы.
Данный осциллограф по полосе пропускания аналогового тракта вполне способен отобразить меандр с частотой 10Мгц. При дискретизации в 50 мегасэмплов и линейной интерполяции рисунок на экране будет очень отдаленно напоминать меандр.


Если данный осцилл с полосой пропускания около 10-15МГц ну никак не способен нормально отобразить меандр 10МГц, для нормального отображения меандра 10МГц нужна полоса желательно выше 50МГц, прошу заметить полоса а не дискретизация! И никакой интерлив не превратит его в меандр если аналог не пропускает даже вторую гармонику, ну неужели нельзя было признать что ошиблись, а обязательно было разводить весь этот повлекший за собой срач??? Интерлив без увеличения полосы аналога бесполезен, это все равно что 100Msps и 10КГц полосы аналога, неужели я смогу смотреть при этом 20МГц меандр?
Прикрепления: 3807586.png (12.5 Kb)


---

Нет войне!
 
atmicandr_old Воскресенье, 11.03.2012, 07:41 | Сообщение # 2572
Местный
Группа: Друзья
Сообщений: 186
Статус: Offline
Quote (LeftRadio)
А что я должен как админ делать? Забанить kison-а из-за его неприязни к Вам и несколько резкой критики Вашей схемы?

Quote (LeftRadio)
Так что я по Вашему не сделал? Ну вот не хотел встревать в споры а втянули

Влад, привет! Правда в любом случае на твоей стороне. Не надо ни перед кем отчитываться вообще! Знаешь, жаловаться на когото и на чтото это привилегия Радиокотов! У нас на мониторах за такого рода жалобы сразу пендель. B)


А я лампы соберу, молоточком все побью. LED&LCD рулят. Мой ящик: andrey66k@gmail.com

Сообщение отредактировал atmicandr - Воскресенье, 11.03.2012, 07:44  
 
LeftRadio Воскресенье, 11.03.2012, 09:26 | Сообщение # 2573
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Привет Андрей, возможно ты и прав :)

-----------------------------------------------------------------------------------------------
Чуть почистил последние сообщение, может чего захватил случайно. Подредактировал NS3_description.pdf и оформил тоже самое в страничку с типа статейкой :)

Вот несколько прокомментировал код, сейчас буду еще думать :)


Приведу еще код если без счетчика который хочу добавить, так все работает :)


---

Нет войне!


Сообщение отредактировал LeftRadio - Воскресенье, 11.03.2012, 10:06  
 
LazyCat Воскресенье, 11.03.2012, 16:13 | Сообщение # 2574
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
Вот если честно не помню призывы к обсуждению

пост 2547 ! Ну и конечно же я не просто так все это выкладывал.

Quote (LeftRadio)
неужели Вам это так тяжело, хотя бы пару слов, а не просто схема.

Мне и в голову не могло прийти, что там могут быть непонятки. Хорошо, расскажу всю логическую цепочку.
Еще летом мы обсуждали, что такого маленького ОЗУ для реализации ЛА катастрофически не хватает, поэтому тогда я предложил "дифференциальный" метод сжатия памяти, т.е. мы записываем только изменение состояния входов вместе с длительностью этого состояния. Для нормального ЛА и этого будет маловато, но это лучше чем ничего. Абсолютно очевидным становится полное использование памяти и возникает проблема ее переполнения и затирания начального участка. Для этого я ввел компаратор адреса(вообще-то это 1 элемент 8*2XOR-OR) для исключения этой проблемы. Тут поясню подробнее. Рассмотрим 2 ситуации. Первая, это когда допустим по каким-то причинам(например, надоело ждать окончания захвата) был снят сигнал Start_WR, в этом случае буфер полностью не заполнится, но при чтении(кстати, вперед) сигнал WR_READY корректно установится при достижении конца захваченных данных. Вторая ситуация, это когда используем текущий вариант триггера без переделки(как хотели Вы, но настаивал я) вне зависимости от размерности WIN_counter при динамическом сжатии памяти Вы не знаете реальный адрес останова захвата и... возвращаемся к первой ситуации. Но, как я уже писал, можно изменить тактирование триггера и избежать второй ситуации, но только при одном значении WIN_counter :D
Вообще-то, вариантов куча, но не возникло желания обсуждать даже единственный ? Вместо этого был срач, были обвинения в мой адрес и НИ ОДНОГО доказательства моей неправоты(ни единой осциллограммы или хотя бы логичного рассуждения) !

Quote (atmicandr)
Усреднение никто не отменял, бывает полезным Записали всю память и усреднили до необходимого количества точек, или слили всю на ПК, или по кускам выборочно смотреть, хотя последнее врядли нужно, но пускай возможность будет.

Если честно, то про усреднение совсем ничего не понял :D Про слив памяти в ПК я и сам писал, потому и настаивал читать память вперед, а не как сейчас ! А чтение памяти по кускам мы обсуждали еще летом и все вместе пришли к выводу, что это добавит много ненужных регистров и мультиплексоров в дизайн. Если Вы передумали, то не сказали ни слова об этом.

Quote (LeftRadio)
Если данный осцилл с полосой пропускания около 10-15МГц

Вот это для меня истинное откровение ! Я раньше был убежден в другом и поэтому дико извиняюсь ! А спор про 10МГц возник из-за того, что kison попутал цифровую обработку сигналов и осциллографирование. Осциллограф - это прежде всего оценочный прибор(визуальный просмотр - это не точное измерение). Сами понимаете о какой точности может идти речь в карманном осцилле, если для оцифровки используются 8бит, да и дисплей маловат, да и сама линейная интерполяция вносит сумашедшие погрешности(в цифровой обработке сигналов такого понятия вообще нет). Да и утверждал то я всего, говоря словами kisona, что этот меандр будет на 100мегасэмплах более прямоугольный, чем при 50, а для осциллографа это означает, что можно точнее оценить сигнал. Но пусть я тысячу раз неправ, это мое личное мнение и я при нем останусь !

Quote (LeftRadio)
Чуть почистил последние сообщение, может чего захватил случайно.

Я все понял !!! И я не гордый, но выводы сделал :( Правда, ожидал не такого модерирования, а удаление оскорбительных постов, но Бог Вам судья !


Сообщение отредактировал LazyCat - Воскресенье, 11.03.2012, 17:00  
 
kison Воскресенье, 11.03.2012, 17:47 | Сообщение # 2575
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (LeftRadio)
Я хочу задержать второе событие на некоторое количество выборок

Картинка помогла - задача ясна.
Я обычно отделяю для начала логику работы от деталей реализации.
Примерно выходит следующее
Code


`define TRIG_DELAY  (7)

module test_trig_with_delay
(
input                   clk,
input                   sync_state,     // условие триггера
input                   trig_enable,    // разрешение триггера
output                 trig_out         // выход триггера
);

reg         first_event_reg = 0;
reg         last_event_reg = 0;
reg [2:0]   SlCounter = `TRIG_DELAY;

assign      trig_out = last_event_reg;

always @(posedge clk)
begin
     if(trig_enable == 0)     
     begin
         // триггер запрещен
         first_event_reg <= 0;
         last_event_reg <= 0;
         SlCounter <= `TRIG_DELAY;
         trig_out <= 0;
     end
     else                     
     begin
         // триггер разрешен
         if(first_event_reg == 0)    // выбор события. Если первое еще не сработало работаем с ним. Иначе - со вторым.
         begin
             // работаем с первым событием
             if(sync_state == 0)
             begin
                 // условие активно
                 if(SlCounter == 0)
                 begin
                     // задержка закончена
                     first_event_reg <= 1'b1;
                     // сюда можно вставить SlCounter <= `TRIG_DELAY;
                     // тогда фокус с задержкой получится сделать и для второго условия ровно так же и на том же счетчике
                 end
                 else
                 begin
                     // задержка не закончена
                     SlCounter <= SlCounter - 1;
                 end
             end
             else
             begin
                 // условие неактивно
                 SlCounter <= `TRIG_DELAY;
             end
         end
         else
         begin
         // работаем со вторым событием
         // ...............................................
         end
     end // if(trig_enable == 0)  

end // always @(posedge clk)

endmodule

Выход триггера и last_event_reg вообще говоря одно и то же.
Непроверено правда, может где накосячил. Тестбенч попозже сделаю.

Добавлено (11.03.2012, 17:47)
---------------------------------------------
Забыл - чтоб отсекать такие зубцы нужно задерживать оба фронта. По сути прогнать сигнал через ФНЧ.

 
LeftRadio Воскресенье, 11.03.2012, 18:19 | Сообщение # 2576
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (LazyCat)
Мне и в голову не могло прийти, что там могут быть непонятки.

Ну все равно ведь можно хоть пару слов написать как и что, типа нужно для того то и того.

Quote (LazyCat)
Первая, это когда допустим по каким-то причинам(например, надоело ждать окончания захвата) был снят сигнал Start_WR, в этом случае буфер полностью не заполнится, но при чтении(кстати, вперед) сигнал WR_READY корректно установится при достижении конца захваченных данных.

WR_READY не устанавливается при чтении, он нужен только для МК что бы показать что запись окончена. И ситуацию такую мне сложно представить, почему может надоесть ждать окончания захвата? Ну допустим это так, перезапустили запись с меньшим количеством точек в WIN_Couner и все дела :)

Quote (LazyCat)
Вторая ситуация, это когда используем текущий вариант триггера без переделки(как хотели Вы, но настаивал я)

За триггер не нужно, я этот вариант отсаивал, Вы необосновано обсирали и кричали что не нужно сравнивать мой вариант(типа не работающий) и Ваш(типа работающий), хотя я и не линился и показывал что мой работает, мою провоту показала практика :) Или я и реальность научился фальсифицировать? Было бы неплохо
Quote (LazyCat)
вне зависимости от размерности WIN_counter при динамическом сжатии памяти Вы не знаете реальный адрес останова захвата и... возвращаемся к первой ситуации.
Почему не знаю??? Он же лежит в счетчике адреса записи и копируется в счетчик адреса для чтения, единственное неудобство это необходимость считывать всю записанную память что бы добраться до момента триггера, ну и потом расшифровывать если пишем с сжатием. Немного подробней, ну например нужно нам 100 точек, пишем с сжатием, счетчик адреса "оттикал" 100 раз, запись окончена, конечно реально из-за сжатия записалось больше точек, но это не важно, читаем эти 100 точек, раскодируем и выводим первые 100 если только они нас интересуют, если же например нужно максимальная глубина памяти то пишем ее на всю длину и сливаем в ПК, можно конечно и на осцилле ее просматривать но это не так удобно, на ПК уже раскодируем и смотрим. Мы в любом случае не будем знать количество точек так как коэффициент сжатия зависит от входных данных и на глубину памяти при двух одинаковых запусках может записаться разное количество точек. Да и нужен этот режим только для совместной работы с ПК, для просмотра на осцилле сжатие не нужно, а значит остается только один режим записи при сжатии - на всю глубину памяти.

Quote (LazyCat)
Если честно, то про усреднение совсем ничего не понял :D

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

Quote (LazyCat)
Вот это для меня истинное откровение !

Странно, значит не внимательно читали последние сообщения по аналогу, да и зачем осциллу с 50Msps болше 10-15МГц полосы? 25МГц то уже резать нужно что бы алиасы не проходили.

Quote (LazyCat)
Да и утверждал то я всего, говоря словами kisona, что этот меандр будет на 100мегасэмплах более прямоугольный, чем при 50, а для осциллографа это означает, что можно точнее оценить сигнал.

На 1МГц полосы аналога к примеру?

Quote (LazyCat)
но Бог Вам судья !

А мне пофиг :D , я атеист :D , я просто снес последнюю ругатню и флуд, чуть раньше она тоже была, но и полезная инфа тоже.


---

Нет войне!


Сообщение отредактировал LeftRadio - Воскресенье, 11.03.2012, 18:48  
 
LeftRadio Воскресенье, 11.03.2012, 18:34 | Сообщение # 2577
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (kison)
Я обычно отделяю для начала логику работы от деталей реализации.

Хм.. у меня это пока слабо получается :) Буду думать.

Quote (kison)
reg first_event_reg = 0;
reg last_event_reg = 0;

Я вот хотел спросить а как инициализацию переменных квартус реализует? Если не ноль например а 1, ресурсы на это тратятся или нет?

Quote (kison)
// тогда фокус с задержкой получится сделать и для второго условия ровно так же и на том же счетчике

Пока не понял почему, буду думать :)

Quote (kison)
Выход триггера и last_event_reg вообще говоря одно и то же.

Ну да, только сначала должно произойти событие frst_event, и только потом разрешается last_event, ну и по общей логике работы всего узла TRG могут устанавливать/сбрасывать другие сигналы, Хотя возможно проще было бы их всех завести на last_event.

Quote (kison)
Забыл - чтоб отсекать такие зубцы нужно задерживать оба фронта. По сути прогнать сигнал через ФНЧ.

Но тогда потребуется разная задержка(частота среза) для разного сигнала, хотя и так наверно это нужно.


---

Нет войне!
 
kison Воскресенье, 11.03.2012, 18:57 | Сообщение # 2578
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (LazyCat)
Я раньше был убежден в другом и поэтому дико извиняюсь !

Ого. Признание своих ошибок - первый шаг к нормальному общению.
Я попробую, посмотрим что выйдет.
Quote (LazyCat)
Тут поясню подробнее. Рассмотрим 2 ситуации. Первая, это когда допустим по каким-то причинам(например, надоело ждать окончания захвата) был снят сигнал Start_WR, в этом случае буфер полностью не заполнится, но при чтении(кстати, вперед) сигнал WR_READY корректно установится при достижении конца захваченных данных.

Расширим ситуацию - триггера вообще не было. Пользователю надоело ждать. Я вот считаю что в этой ситуации вообще ничего отрисовывать не надо. Надоело - значит не нужно. Тот же ЛА. 262144 выборок, каждая от 1 до 256 тактов. В худшем случае - если сигнал вообще не меняется - это 1,3 секунды записи. А вот триггера ждать можно хоть час. Если у МК есть возможность узнать был ли триггер - можно просто закончить выборку. Если триггера не было - просто отменить ее да и все и ничего не отрисовывать(передавать в ПК). Все равно анализ данных не привязанных ни к чему довольно бесполезен. Именно триггер является такой привязкой.
Quote (LazyCat)
при динамическом сжатии памяти Вы не знаете реальный адрес останова захвата и... возвращаемся к первой ситуации.

Адрес конца захвата содержится в счетчике адресов на запись. Он перезаписывается в счетчик адреса при чтении. Не знаем только адрес, где был триггер если выборка не была закончена до конца. Так же как и не знаем был ли триггер вообще. И даже если знаем что был, то при отмене захвата пользователем рисовать нет смысла. Ведь остановка может быть и сразу после триггера. Получим одно значение, этого маловато будет. Раз пользователь остановил выборку - значит ему она неинтересна.

Quote (LazyCat)
Если честно, то про усреднение совсем ничего не понял

Обычно буфер куда больше, чем выводится на экран. Это делается для того, чтоб при изменении масштаба сразу отрисовывать, а не ждать пока новые данные наберутся. Развертка чаще всего ждущая и может срабатывать например раз в секунду. Изменение масштаба будет происходить с этой задержкой. Если же буфер больше ( обычно от 10 до 20 экранов), то сигнал можно сжимать сразу. В этом случае на одну экранную точку будет приходиться 2 или более выборок. Усреднение - один из методов рисования таких точек основанных на нескольких выборках. Но вообще это проблема МК, а не плис. ПЛИС должна просто обеспечить этот 10-ти кратный запас по выборкам.

Quote (LazyCat)
Про слив памяти в ПК я и сам писал, потому и настаивал читать память вперед, а не как сейчас !

А без разницы. Все равно на стороне PC должна быть самописная программа. Вся память 512Кб - для писюка это совсем смешной объем. Он развернет данные наверно за миллисекунду. Передача займет куда больше времени. На виртуальном COM 1-2 мегабита предел. 512Кб это как раз 2 мегабита. Передача - секунда, разворот миллисекунда. Да и это можно прямо "на лету" делать.
И о чтении вообще. Читать надо не назад и не вперед. Надо уметь в обе стороны. Так как память полностью за раз считать невозможно - она просто не влезет в МК, то надо уметь перемещаться в произвольном направлении. Не важно - осциллограф или ЛА. Выбор направления определяется пользователем - куда он смещает окно экрана. Ну а для слива в PC все равно, главное чтоб направление считывания совпадало с тем, о котором знает программа на PC.

Вариант 2 - это произвольное чтение. Это дает возможность произвольно размещать окно, что в общем то лучше, но это сложней реализовать.

Добавлено (11.03.2012, 18:57)
---------------------------------------------

Quote (LeftRadio)
Я вот хотел спросить а как инициализацию переменных квартус реализует? Если не ноль например а 1, ресурсы на это тратятся или нет?

Инициализация делается один раз при подаче питания. Регистрам можно и не присваивать значения, но тогда иногда не будет нормально работать симуляция.
Я уже на автомате присваиваю. Раз reg, значит должно быть = . А квартус обнулит регистры, если не указано значение. Симулятор же о этом не знает - так что ему надо помочь.
Quote (LeftRadio)
Пока не понял почему, буду думать

Я потом тестбенч дам с времянкой.

Quote (LeftRadio)
ну и по общей логике работы всего узла TRG могут устанавливать/сбрасывать другие сигналы, Хотя возможно проще было бы их всех завести на last_event.

Сбрасывать - last_event. А вот устанавливать надо sync_state. То есть не принудительно "пнуть" триггер, а подсунуть ему то, что он скушает как условие срабатывания. :)
 
LeftRadio Воскресенье, 11.03.2012, 19:02 | Сообщение # 2579
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (kison)
Я вот считаю что в этой ситуации вообще ничего отрисовывать не надо. Надоело - значит не нужно.

Согласен, тоже хотел это заметить.

Quote (kison)
Выбор направления определяется пользователем - куда он смещает окно экрана.

Вот из-за этого я и задумался над произвольным доступом, но теперь думаю может проще сделать вход у счетчика чтения на изменение направления счета да и все дела? Типа записали 1000 точек, адрес ложится в счетчик чтения, "тикаем" 1000 раз для перемещения в начало буфера, походу считывая значения и выводя их на экран, ну а потом если нужно переместится "вправо" изменяем направления счета счетчика и спокойно читаем :) Ресурсов много не надо, думаю оптимальный вариант будет, главное не забыть после очередной записи в память менять направление счета на обратное :) Хотя.. Я тут подумал а почему бы счетчику чтения загружаться не в момент окончания записи а в момент триггера? Только сделать асинхронную загрузку.


---

Нет войне!


Сообщение отредактировал LeftRadio - Воскресенье, 11.03.2012, 19:06  
 
atmicandr_old Воскресенье, 11.03.2012, 19:05 | Сообщение # 2580
Местный
Группа: Друзья
Сообщений: 186
Статус: Offline
Quote (LazyCat)
Quote (atmicandr)
Усреднение никто не отменял, бывает полезным Записали всю память и усреднили до необходимого количества точек, или слили всю на ПК, или по кускам выборочно смотреть, хотя последнее врядли нужно, но пускай возможность будет.


Если честно, то про усреднение совсем ничего не понял Про слив памяти в ПК я и сам писал, потому и настаивал читать память вперед, а не как сейчас ! А чтение памяти по кускам мы обсуждали еще летом и все вместе пришли к выводу, что это добавит много ненужных регистров и мультиплексоров в дизайн. Если Вы передумали, то не сказали ни слова об этом.
Ты зачем меня цитировал? Это вообще не мои слова!


А я лампы соберу, молоточком все побью. LED&LCD рулят. Мой ящик: andrey66k@gmail.com
 
kison Воскресенье, 11.03.2012, 19:22 | Сообщение # 2581
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (LeftRadio)
Вот из-за этого я и задумался над произвольным доступом, но теперь думаю может проще сделать вход у счетчика чтения на изменение направления счета да и все дела?

У меня так и сделано. :)
Code

module adr_count_ud_t #(parameter COUNTER_WIDTH = 17)
(
input                    clk,                    // такт
input                    enable,                             // разрешение счета
input                    read_mode,                          // режим чтения
input                    manual_clk,                         // ручной такт
input                    direction,                          // направление счета от ручного такта, 1 - в плюс, 0 - в минус
....


Добавлено (11.03.2012, 19:22)
---------------------------------------------
Quote (LeftRadio)
Хотя.. Я тут подумал а почему бы счетчику чтения загружаться не в момент окончания записи а в момент триггера? Только сделать асинхронную загрузку.

Асинхронная загрузка вообще путь к потенциальным граблям. Если сброс еще куда ни шло, то загрузка может привести к тому, что многоразрядный счетчик или регистр перезапишутся чем попало. Одни разряды одним значением, другие более новым. bvt на хоботе хорошо об этом написал. В правильном дизайне не должно быть ни одного асинхронного управления триггерами. Перезапись в том варианте, что сейчас от глюков убереглась потому, что в конце счетчик адреса по записи остановлен.
Триггер же придется перезаписывать на ходу. Можно получить не его адрес, а вообще любой произвольный.

Загрузка же адреса триггера ничего не даст. Во первых триггер не обязательно находится в экране. Мы можем смотреть самый конец выборок, когда триггер в самом начале. Во вторых если чтение последовательное - сначала придется считать от триггера до начала ( или конца - зависит от направления ) и потом пройти этот путь в обратном направлении уже ничего не читая. Дойдя до триггера начать читать в другую сторону. Допустим буфер 2000 выборок и триггер в середине. Считали 1000 вперед, потом 1000 назад - холостое чтение, и еще 1000 снова читаем. Вместо 2000 считываний вышло 3000.


Сообщение отредактировал kison - Воскресенье, 11.03.2012, 19:25  
 
kison Воскресенье, 11.03.2012, 22:40 | Сообщение # 2582
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Оттестировал основу, что выше. Все правильно работает.
Добавил только обработку второго события:
Code

// работаем со вторым событием
              if((first_event_reg == 1'b1) && (sync_state == 1'b1))
              begin
                  last_event_reg <= 1'b1;
              end

Задержку на второе событие не вводил, раз задачи такой не было. :)

Там две "попытки". Первая имитирует зубец с картинки - короткий переход. Это не вызывает срабатывания первого условия. Я для себя это называю - взвод курка :D
Вторая попытка уже более длительная и взводит курок. В общем логика работает.
Модуль целиком

Добавлено (11.03.2012, 22:40)
---------------------------------------------

Quote (LeftRadio)
Спасибо буду знать, а я думал что если после запятой не ставить типа [N:0], то второе обьявление автоматом однобитное...

А я кстати точно не знаю - может так оно и есть. :) Просто я никогда не объявляю цепи/регистры через запятую. Потому как к каждому объявлению стараюсь коммент прикрепить - что за цепь и за чем она мне нужна.
Прикрепления: 2525450.gif (14.4 Kb)


Сообщение отредактировал kison - Воскресенье, 11.03.2012, 22:36  
 
LazyCat Воскресенье, 11.03.2012, 22:42 | Сообщение # 2583
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (LeftRadio)
За триггер не нужно, я этот вариант отсаивал, Вы необосновано обсирали и кричали что не нужно сравнивать мой вариант(типа не работающий) и Ваш(типа работающий)

Зачем Вы возвращаетесь на полгода назад ? Сейчас я говорю ТОЛЬКО о текущем варианте и о не каком другом ! Да и тогда мне стоило больших нервов, пока добился от Вас правильного варианта :( А говорил я про изменение тактирования этого триггера, но Вы снесли этот пост даже не прочитав.

Quote (LeftRadio)
WR_READY не устанавливается при чтении

Значит, Вы так и не удосужились посмотреть мою схему :(

Quote (LeftRadio)
Почему не знаю??? Он же лежит в счетчике адреса записи и копируется в счетчик адреса для чтения

Именно это я и писал, что адрес СТАРТА захвата неизвестен и сколько читать байт назад тоже неизвестно !!! kison, кстати, это уже написал. Но я не понимаю, как можно обсуждать схему, ее не посмотрев ? Да и неужели у меня тактирование ЛА 50МГц ? Опять виноват LazyCat ? Все же надеюсь, что Вы и kison поймете, что я имел ввиду под стартом и концом захвата и почему ввел компаратор и почему сделал счетчик чтения РЕВЕРСИВНЫМ ;)

Quote (LeftRadio)
Странно, значит не внимательно читали последние сообщения по аналогу

Виноват, значит не увидел на схеме из шапки обрезание частоты пропускания :( Или ее там нет ?

Quote (LeftRadio)
я просто снес последнюю ругатню и флуд, чуть раньше она тоже была, но и полезная инфа тоже.

Ну тут Вы лукавите, но я не в обиде :D

Quote (LeftRadio)
Хотя.. Я тут подумал а почему бы счетчику чтения загружаться не в момент окончания записи а в момент триггера? Только сделать асинхронную загрузку.

Значит, всетаки посмотрели мою схему :D И кстати, ничто не мешает сделать загрузку синхронной.

Quote (atmicandr)
Ты зачем меня цитировал? Это вообще не мои слова!

Приношу свои извинения за сбой форума :) Я, вообще-то, цитировал Влада, пост 2590.

Quote (kison)
А без разницы. Все равно на стороне PC должна быть самописная программа. Вся память 512Кб - для писюка это совсем смешной объем

Тут Вы с Владом уж договоритесь :D Вот Вы говорите правильно про всю память и тут не надо знать адреса старта и конца захвата - они совпадают(надо только вовремя остановить захват). А вот Влад постоянно говорит про WIN_counter и тут просто необходимо знать эти адреса ! Именно для этого я делаю защелку адреса по тригеру и использую компаратор для определения конца захвата, естественно, при этом используется не вся память. И на РС данные должны передаваться "от сих до сих". Кстати, чтение вперед более удобно именно при использовании сжатия, т.к. при декомпрессии сигнал удобнее выводить на экран.

P.S. И ОПЯТЬ отвлеклись от основной темы. Я в который раз призываю ДОДЕЛАТЬ осциллограф. Именно ЭТО интересует большинство присутствующих и именно устранение существующих недостатков в текущем дизайне должно быть предметом обсуждения. Именно для этого я выкладывал схемы(раз 10 это повторял), а ЛА просто является приятным бонусом !!!


Сообщение отредактировал LazyCat - Воскресенье, 11.03.2012, 22:50  
 
kison Воскресенье, 11.03.2012, 23:28 | Сообщение # 2584
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (LazyCat)
Именно это я и писал, что адрес СТАРТА захвата неизвестен и сколько читать байт назад тоже неизвестно !!! kison, кстати, это уже написал. Но я не понимаю, как можно обсуждать схему, ее не посмотрев ? Да и неужели у меня тактирование ЛА 50МГц ? Опять виноват LazyCat ? Все же надеюсь, что Вы и kison поймете, что я имел ввиду под стартом и концом захвата и почему ввел компаратор и почему сделал счетчик чтения РЕВЕРСИВНЫМ

Нет, я такого точно не писал. Так будет только в единственном крайне редком случае если пользователь останавливает принудительно не законченную выборку. Но в этом случае данные по сути мусор. Мы не знаем адреса триггера, это да. Мы даже не знаем был ли он вообще. Опять же остановка могла быть сделана до срабатывания триггера. Даже если позже - может быть через одну выборку после триггера. В общем тут вообще нет смысла эти данные обрабатывать. Остановил - значит не надо.
Мы таки надеемся что Вы объясните, что именно ВЫ подразумеваете под стартом и концом захвата. Мы то с LeftRadio имеем ввиду под этими понятиями одно и то же. Старт - первая выборка попадающая в интересующее нас окно. Конец захвата - соответственно последняя выборка. Триггер будет где то между ними в произвольной позиции. Но его положение привязано к концу захвата и отличается от него на значение, которое было в WIN_counter перед началом захвата.
Ну допустим упрощенно и на пальцах. Начинаем захват. Счетчик адреса по записи начинает увеличиваться складывая выборки в память. Микроконтроллер ждет время достаточное для необходимой предыстории. Ну допустим нас интересует 100мкс до триггера и 100мкс после. Дискретизация максимальна - 50 мегагец. Значит заносим в WIN_Counter 5000, запускаем захват, ждем 100мкс, разрешаем триггер. Дальше система ждет срабатывания триггера продолжая складывать выборки в память по кругу. В произвольный момент срабатывает триггер. Пусть например в этот момент мы писали в адрес 20000 ( цифра неважна). Дальше начинает уменьшаться Win_counter и когда он станет равен 0 выборки остановятся. В счетчике адреса в этот момент будет 20000 + 5000 + 1. Отмотав адрес на 1 назад мы можем считать последнюю выборку. Отмотав еще на 5000 - считаем данные записанные в момент срабатывания триггера. Считав еще 5000 идя в меньшие адреса - получим все данные, что мы и хотели получить. Цель достигнута. Меняя содержимое Win_Counter ( дурацкое кстати имя :D. У меня - sample_counter) и изменяя время от запуска захвата до разрешения триггера можно в широких пределах менять как количество выборок всего, так и соотношение выборок до и после триггера.

Quote (LazyCat)
Или ее там нет ?

Она есть. Хотя и хреновенькая - RC цепь на выходе ОУ. Фильтр 1 порядка -6дб на октаву. Мало конечно.

Quote (LazyCat)
И кстати, ничто не мешает сделать загрузку синхронной.

Не выйдет. На счетчике чтения нет такта. Можно конечно регистр между счетчиками вставить, но было бы ради чего.

Quote (LazyCat)
Приношу свои извинения за сбой форума

Это не сбой. Пример:
Quote (LeftRadio)
Приношу свои извинения за сбой форума

Выделяем текст в одном сообщении, а по кнопке цитирования щелкаем в другом. Это типа баг. У меня на форуме точно такой же.

Quote (LazyCat)
Вот Вы говорите правильно про всю память и тут не надо знать адреса старта и конца захвата - они совпадают(надо только вовремя остановить захват). А вот Влад постоянно говорит про WIN_counter и тут просто необходимо знать эти адреса !

Тоже не надо. Я чуть выше расписал логику работы. Мы знаем последний адрес и знаем на сколько от него отличается адрес где был триггер. Стартовый конечно не знаем, но он и не нужен.

Quote (LazyCat)
Кстати, чтение вперед более удобно именно при использовании сжатия, т.к. при декомпрессии сигнал удобнее выводить на экран.

На самом деле - все равно. Чтение вперед нужно чтоб окно экрана перемещать по осциллограмме. Т.е. для реакции на действия пользователя. Это только в режимах однократного захвата, когда нельзя считать осциллограмму целиком. Когда можно - чтение "взад" намного удобнее, чем вперед.

Quote (LazyCat)
и именно устранение существующих недостатков

А вот с этого момента поподробнее. Нельзя исправлять то, о чем не знаешь. :) Итак - что плохо на сейчас?
 
LeftRadio Понедельник, 12.03.2012, 07:17 | Сообщение # 2585
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (kison)
Оттестировал основу, что выше. Все правильно работает.
Добавил только обработку второго события:

Спасибо за помощь, посмотрю вечером, сейчас хотел бы поразбираться но некогда :( .

Quote (kison)
Она есть. Хотя и хреновенькая - RC цепь на выходе ОУ. Фильтр 1 порядка -6дб на октаву. Мало конечно.

Не только, еще паразитные емкостя разбросаные по схеме естественным образом и ключ 4051.


---

Нет войне!
 
volk0203 Понедельник, 12.03.2012, 09:56 | Сообщение # 2586
Завсегдатай Профессионал
Группа: Проверенные
Сообщений: 695
Статус: Offline
Нельзя ли на плате верхние плечи делителя 1:100 набрать из 3-х резисторов 0805? Место вроде есть... Поробивное напряжение увеличится и набрать будет проще. И ещё: при открытии файла печатки выдаёт наличие 2-х DRC ошибок, в предыдущих вариантах такого небыло... Где-то закралась ошибочка? :)
 
LazyCat Понедельник, 12.03.2012, 12:06 | Сообщение # 2587
Завсегдатай
Группа: Проверенные
Сообщений: 329
Статус: Offline
Quote (kison)
Нет, я такого точно не писал.

Я уже устал повторять - при работе ЛА количество записанных байт не совпадает с содержимым WIN_counter, и читая назад Вы не знаете, где начало записи. Судя по Вашему недоумению в начале обсуждения, в Вашем ЛА нет сжатия и Вы настойчиво описываете 5 раз его работу :D Неужели не понятно, что при сжатии это не так !!!
Но, я предлагал и изменить тактирование триггера, но что Влад почему-то странно отреагировал :( В этом случае и WIN_counter работает корректно ! Выбирать вариант, конечно, Владу.

Quote (kison)
Она есть. Хотя и хреновенькая - RC цепь на выходе ОУ.

Для борьбы с алиасами первый порядок фильтра ничего не дает. Хотя бы начали ограничивать полосу каскада на AD8129. И, кстати, теперь 4052 можно смело выкидывать :D

Quote (kison)
Когда можно - чтение "взад" намного удобнее, чем вперед.

Для осциллографа - без разницы, для Вашего ЛА без сжатия - тоже без разницы ! А при использовании сжатия удобнее читать вперед. Это ведь понятно ? Кстати, если не использовать сжатие, то такой ЛА вообще не имеет практической ценности, особенно, если у него тактирование только 50 МГц, как Вы предлагали :D В таком случае его лучше и не добавлять в работающий дизайн.

Quote (kison)
А вот с этого момента поподробнее. Нельзя исправлять то, о чем не знаешь. Итак - что плохо на сейчас?

Я ведь уже писал, а Влад снес. Снесет, наверное, и это, но пояснить попробую.
Вы прекрасно помните начало осуждения, это было при Вас и Вы принимали даже в этом участие. В посте 1216 Влад попросил прикинуть дизайн ПЛИС и первую идею я выдал в посте 1226, но для интерлива памяти. Потом было длительное обсуждение и куча вариантов, от интерлива отказались и пришли к теперешнему дизайну, но в посте 1408 был описан недостаток, а я говорил, что этот недостаток присутствует только в кастрированном варианте (без ЛА). Тогда от ЛА отказались и с недостатком пришлось смирится. Именно поэтому сейчас я настойчиво говорил про мультиплексоры !!! Или не говорил ?
Также я говорил про недостаток в прореживателе в режиме без предыстории. Он особо ощутим при низких скоростях развертки и в ЛА. И желательно чтобы этот счетчик был ВЫЧИТАЮЩИМ ! Но если он всех утраивает, то можно не исправлять :D
Прикрепления: 6188813.png (972.3 Kb)


Сообщение отредактировал LazyCat - Понедельник, 12.03.2012, 12:44  
 
kison Понедельник, 12.03.2012, 14:29 | Сообщение # 2588
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (volk0203)
Нельзя ли на плате верхние плечи делителя 1:100 набрать из 3-х резисторов 0805?

Обычно из 2 набирают. Удобство составления в общем то же, что и для трех. А напряжение у 2 резисторов все равно больше, чем у подстроечного конденсатора.

Quote (LeftRadio)
Не только, еще паразитные емкостя разбросаные по схеме естественным образом и ключ 4051.

Это сложно учитывать. Там частота среза и 25МГц может быть. А это уже не поможет. У меня кстати в ОУ фильтр тоже есть. Т.е. два первого порядка последовательно. Я бы и на буфере сделал :D , но на повторителе это в принципе невозможно. Надо либо инвертирующий усилитель, либо чтоб Ку был хотя бы 5.

Quote (LazyCat)
Я уже устал повторять - при работе ЛА количество записанных байт не совпадает с содержимым WIN_counter, и читая назад Вы не знаете, где начало записи.

Конечно иногда не знаю. А зачем знать? Случая два - вся память использована - тогда первая выборка будет сразу за последней - это самый простой случай. Если память используется не вся, то считываем от конца до триггера ( где он мы знаем ), а затем начинаем считывать назад уже учитывая время. Т.е. как бы распаковывая на лету при считывании. Допустим время до триггера было задано 100мкс. Это может быть 5000 выборок, а может всего 200. Но выборки в любом случае жестко привязаны ко времени и это время легко считается. Просто суммируем значения счетчика ( повторы) при считывании. Пока сумма меньше 5000 - читаем память.
Сами по себе выборки ведь никому не нужны. Нужна функция сигнала от времени.

Quote (LazyCat)
Судя по Вашему недоумению в начале обсуждения, в Вашем ЛА нет сжатия и Вы настойчиво описываете 5 раз его работу

Наоборот - оно есть и так как я писал тестбенчи под все режимы, то хорошо представляю как оно работает.

Quote (LazyCat)
Для борьбы с алиасами первый порядок фильтра ничего не дает.

Чего то дает хоть и недостаточно. По хорошему нужен 3-ий порядок и выше. Предложите лучший вариант.

Quote (LazyCat)
Для осциллографа - без разницы, для Вашего ЛА без сжатия - тоже без разницы !

Есть у меня сжатие. И читать я могу в обе стороны.

Quote (LazyCat)
но в посте 1408 был описан недостаток, а я говорил, что этот недостаток присутствует только в кастрированном варианте (без ЛА).

На сообщения можно вставлять ссылки. А так приходится искать это 1408 сообщение. Это о потере одного из максимумов? Ну у меня такого нет, а тут видимо Влада это устраивает. Хотя и косячок конечно.

Quote (LazyCat)
Именно поэтому сейчас я настойчиво говорил про мультиплексоры !!! Или не говорил ?

Какие?

Quote (LazyCat)
И желательно чтобы этот счетчик был ВЫЧИТАЮЩИМ ! Но если он всех утраивает, то можно не исправлять

Какой счетчик? Вместо "этот" надо конкретно писать имя или расположение в схеме. И почему он должен быть вычитающим. На конкретном примере.
 
volk0203 Понедельник, 12.03.2012, 14:51 | Сообщение # 2589
Завсегдатай Профессионал
Группа: Проверенные
Сообщений: 695
Статус: Offline
Quote
А напряжение у 2 резисторов все равно больше, чем у подстроечного конденсатора

В справочнике указано, что номинальное напряжение применённых конденсаторов 200-250 вольт, пробойное - не указано (типы КТ4-22, КТ4-23 плата именно под них сделана, советские кондюки)... :)
 
kison Понедельник, 12.03.2012, 15:03 | Сообщение # 2590
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (volk0203)
номинальное напряжение применённых конденсаторов 200-250 вольт

Номинальное у резистора 0805 - 150В. Два последовательно - 300В. И параллельно конденсатор пусть на 200. Чем улучшат ситуацию три резистора?
И что - стоят именно советские подстроечники? У импортных 100-150В номинал. Наши были крепче, потому как намного здоровее.

Добавлено (12.03.2012, 15:03)
---------------------------------------------
Да, 150В для резистора 0805 это именно рабочее. Максимально допустимое - 300В, значит пробойное выше 300.

 
volk0203 Понедельник, 12.03.2012, 15:15 | Сообщение # 2591
Завсегдатай Профессионал
Группа: Проверенные
Сообщений: 695
Статус: Offline
Да там просто есть место, вот я и попросил составить из трёх резисторов, 990 ком проще из трёх составить...

Добавлено (12.03.2012, 15:15)
---------------------------------------------

 
kison Понедельник, 12.03.2012, 15:20 | Сообщение # 2592
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (volk0203)
Да там просто есть место

Если место не жмет, то хоть из 5 :)
 
volk0203 Понедельник, 12.03.2012, 15:24 | Сообщение # 2593
Завсегдатай Профессионал
Группа: Проверенные
Сообщений: 695
Статус: Offline
Quote
Если место не жмет, то хоть из 5

Ну так а я о чём!
 
specialist2 Понедельник, 12.03.2012, 16:03 | Сообщение # 2594
Местный
Группа: Друзья
Сообщений: 119
Статус: Offline
Уже писал об этом.

Quote (LeftRadio)
Quote (specialist2)
Так может предусмотреть на плате площадки под те элементы, которые надо подбирать, чтобы не строить домики?

Думал так сделать, но места нет.
 
Arpad Понедельник, 12.03.2012, 16:15 | Сообщение # 2595
Частый посетитель
Группа: Проверенные
Сообщений: 58
Статус: Offline
quote
Надо использовать что есть под рукой входной повторитель может и фильтровать.
Прикрепления: 3714778.gif (34.1 Kb) · 0085345.gif (11.1 Kb) · 5885432.gif (37.9 Kb) · 6535562.gif (17.9 Kb) · 8175921.gif (49.7 Kb)
 
kison Понедельник, 12.03.2012, 16:43 | Сообщение # 2596
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
Quote (Arpad)
может и фильтровать.

Теперь увеличьте R1 и R2, чтоб в сумме они были хотя бы 50К - защита. С1 не меняйте или меняйте в большую сторону, потому что там емкость будет и сама по себе - вход+монтаж. И попробуйте получить срез на 12МГц. У меня - не вышло.
 
Arpad Понедельник, 12.03.2012, 18:45 | Сообщение # 2597
Частый посетитель
Группа: Проверенные
Сообщений: 58
Статус: Offline
Quote (kison)
Теперь увеличьте R1 и R2, чтоб в сумме они были хотя бы 50К - защита.

Только зачем????? 50 Ком Х 30 мА = 1500 Вольт
(3.2+1.8) Ком Х 30 мА = 150 Вольт думаю напрямую будет сносно.
или 8175921.gif (50Kb) (2.94+1.65) Ком Х 30 мА = 137 В думаю и то терпимо.
В 8175921.gif(50Kb) предложены вместо С1 и С2 ставить подстроечники для подгонки АЧХ.
 
kison Понедельник, 12.03.2012, 19:00 | Сообщение # 2598
Завсегдатай
Группа: Друзья
Сообщений: 275
Статус: Offline
А куда девать 30мА? 6мА 8065 и 12мА 8129. Больше - поднимется питание и сгорит чего то.
Вообще это все макетировать надо. У меня фильтры Саллена-Ки никогда нормально не работали. Кстати - а какое входное сопротивление выходит? По разным частотам.
Если не лень - прогоните это в симуляторе. Как с идеальным ОУ, так и с чем то типа 8065


Сообщение отредактировал kison - Понедельник, 12.03.2012, 19:02  
 
LeftRadio Понедельник, 12.03.2012, 21:22 | Сообщение # 2599
Совсем живу сдесь...
Группа: Администраторы
Сообщений: 2045
Статус: Offline
Quote (kison)
Асинхронная загрузка вообще путь к потенциальным граблям. Если сброс еще куда ни шло, то загрузка может привести к тому, что многоразрядный счетчик или регистр перезапишутся чем попало.

Это Вы правы, не подумал :)

Quote (kison)
Во вторых если чтение последовательное - сначала придется считать от триггера до начала ( или конца - зависит от направления ) и потом пройти этот путь в обратном направлении уже ничего не читая

Согласен.

Quote (kison)
Задержку на второе событие не вводил, раз задачи такой не было. :)

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

Quote (kison)
Вторая попытка уже более длительная и взводит курок. В общем логика работает.
Модуль целиком

Еще раз спасибо прогоню в симуляторе сегодня B)

Quote (LazyCat)
Да и тогда мне стоило больших нервов, пока добился от Вас правильного варианта :(

Жесть.

Quote (LazyCat)
Значит, Вы так и не удосужились посмотреть мою схему :(

Смотрел :)

Quote (LazyCat)
Значит, всетаки посмотрели мою схему :D И кстати, ничто не мешает сделать загрузку синхронной.

Не, kison прав не нужно делать по триггеру.

Quote (volk0203)
Нельзя ли на плате верхние плечи делителя 1:100 набрать из 3-х резисторов 0805?

Можно, но думаю два хватит :)

Quote (volk0203)
И ещё: при открытии файла печатки выдаёт наличие 2-х DRC ошибок, в предыдущих вариантах такого небыло... Где-то закралась ошибочка? :)

Нет, это не ошибка а глюк ARES-а, посмотрите там на контактной площадке "точка" из дорожки появляется, и она типа не подключена ни к чему вот DRC и пишет. В любом случае перед отправкой на производство буду еще просматривать.

Quote (LazyCat)
И, кстати, теперь 4052 можно смело выкидывать :D

Не понял почему.


---

Нет войне!
 
Arpad Понедельник, 12.03.2012, 21:50 | Сообщение # 2600
Частый посетитель
Группа: Проверенные
Сообщений: 58
Статус: Offline
quote(kison)
А куда девать 30мА? 6мА 8065 и 12мА 8129. Больше - поднимется питание и сгорит чего то.

В плюсовой цепи потребителей хватит ((6мА 8065 и 12мА 8129)+ STM32, EPM570, AD9288 и TFT ).
В минусовую цепь надо ставить защиту : типа Стабилитрон
1N4729A 3,6V Rdin 10 Ohm / 69 mA 252 mA maximum
1N4730A 3,9V Rdin 9,0 Ohm /64 mA 234 mA maximum
или TL431-432 + пару ом последовательно и резисторы на задание 3,5 - 3,7V.
(Dynamic impedance 1 mA to 100 mA 0.2 - 0.5 Ohm)
 
Форум » Сайт и форум » Разработки и Статьи на сайте » Все вопросы касающиеся Neil Scope (Ваши замечания, предложения и т.д.)
Поиск:
uTmpl.ru Сайт создан в системе uCoz Сейчас: 28.03.2024, 12:36