Меню

+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
|
||||
|
Re: e502: синхронный ввод/вывода ведь точно -поставил частоту строго равной частоте фрейма и цифры стали правильными.. спасибо, буду пытать дальше |
|||
|
||||
|
Re: e502: синхронный ввод/выводНе обязательно. Но надо либо учитывать это соотношение на приеме, либо делать прием с учетом того, что соотношение могут быть разными. Если у Вас частота цифровых линий равна или в M раз больше частоты кадров, то Вы можете применить простой метод приема (как Вы делаете) - принять (N + M) отсчетов (где N - кол-во каналов в кадре), тогда вы знаете что в них N отсчетов АЦП и M цифровых линий и соответственно в ProcessData передать нужное в качестве adc_size -- N, а в качестве din_size -- M и соответственно обработать. Если делать прием для общего случая, то при приема K слов, Вы не знаете сколько тут данных от АЦП, а сколько от DIN. Если Вы вызываете ProcessData() с размерами 11 и 1, а в принятом массиве допустим 7 данных АЦП и 4 DIN, то соответственно он и вернет 7 в АЦП и 1 в DIN, а 3 DIN отбросит, т.к. нет место в выходном массиве для их сохранения. Отредактировано Алексей L Card (18.10.2016 16:48:33) |
|||
|
||||
|
Re: e502: синхронный ввод/выводага, вот теперь понятна где ошибка была - я либо делал частоту больше частоты фрейма, либо меньше... с этим понятно. Теперь мне осталось только определиться с задержкой на достоверность цифровых данных.. |
|||
|
||||
|
Re: e502: синхронный ввод/выводДобрый день! Хочу продолжить обсуждение проблемы. Отделение ввода/вывода в асинхронный поток в итоге дало слишком большие задержки - до 100 мс. Мне надо хотя-бы 10-20 мс на цифровые входы/выходы. Я переписал код основного потока приема данных с АЦП и цифровых входов, но получил немного странный результат. Вот так выглядит код основного цикла приема/передачи
здесь Ну так вот, когда я запускаю этот поток, то на консоли получаю следующее: 0 12 0 1 |
|||
|
||||
|
Re: e502: синхронный ввод/выводи еще вопрос - если для цифровых входов/выходов я укажу делитель частоты
как это скажется на принимаемых значениях? Т.е. inp_size всегда будет 1, но данные в буфере будут одни и те же? |
|||
|
||||
|
Re: e502: синхронный ввод/выводА какое соотношение частот АЦП и DIN в примере, где вы приводите цифры. |
|||
|
||||
|
Re: e502: синхронный ввод/выводВот код инициализации:
|
|||
|
||||
|
Re: e502: синхронный ввод/выводНу во первых первые две функции должны идти до Configure, а во вторых Вы не привели код установки частоты АЦП (через X502_SetAdcFreq или через явную установку делителей) |
|||
|
||||
|
Re: e502: синхронный ввод/выводПолный код инициализации АЦП конечно есть, все же работает без цифровых входов/выходов... а вот замечание на счет X502_SetDinFreqDivider - спасибо, сейчас попробую |
|||
|
||||
|
Re: e502: синхронный ввод/выводне, ничего не поменялось... 0 12 0 1 хотя код переставил:
|
|||
|
||||
|
Re: e502: синхронный ввод/выводну и там перед этим еще все каналы АЦП определяются.. |
|||
|
||||
|
Re: e502: синхронный ввод/выводПри X502_SetDinFreqDivider(m_dev, 1) у Вас частота ввода 2 МГц, а частота кадров АЦП - 50*global->m_dval[LINEPPP] Гц (не знаю чему у Вас это значение равно). Соответственно в таких пропорциях и будут приходить данные |
|||
|
||||
|
Re: e502: синхронный ввод/выводВот такой вопрос, который мешает корректно принимать данные по цифровым входам в синхронном режиме одновременно с приемом данных с АЦП: как бы получить на внешнем разъеме строб, соответствующий моменту чтения цифровых входов? Или по другому - можете подсказать в какой момент времени относительно строба CONV_OUT (или START_OUT) происходит чтение данных с цифрового входа? |
|||
|
||||
|
Re: e502: синхронный ввод/вывод@ Valery, интересующие Вас времена задержек при производстве E-502 не контролируются, но могут быть вычислены теоретически, исходя из допусков на минимальное и максимальное время распространения сигналов логических элементов (согласно документации на элементы и временной модели ПЛИСов ). Данные вычисления проведу в ближайшее время, о результатах сообщу. |
|||
|
||||
|
Re: e502: синхронный ввод/выводОчень хорошо.. а можно указать сигнал от которого надо отсчитывать задержку? START_OUT или CONV_OUT? |
|||
|
||||
|
Re: e502: синхронный ввод/выводCONV_OUT транслирует внутренний сигнал синхронизации преобразования АЦП, ЦАП, стробирования данных входов DI и выдачи на выход DO. Все эти четыре потока данных ввода-вывода синхронны по отношению к CONV_OUT. А по фронту START_OUT можно только синхронизировать начало сбора данных. |
|||
|
||||
|
Re: e502: синхронный ввод/выводВ документации приведена временная диаграмма работы АЦП, а вот бы хорошо иметь то же самое для цифровых входов/выходов.. у меня должен быть синхронный цикл такого вида: запись адреса -> чтение данных и параллельно чтение аналоговых данных с АЦП. |
|||
|
||||
|
Re: e502: синхронный ввод/вывод@ Valery, все процессы сбора-выдачи данных в E-502 синхронны по отношению к опорной частоте 2 МГц (которая транслируется на CONV_OUT во время сбора данных). И я уже собрался для Вас вычислять наносекундные задержки в пределах периода 500 нс этой опорной частоты. |
|||
|
||||
|
Re: e502: синхронный ввод/выводНу да, вы правы, меня как раз и интересуют задержка момента ввода цифровых сигналов относительно этого синхросигнала. |
|||
|
||||
|
Re: e502: синхронный ввод/вывод@ Valery, расчётные результаты таковы. Если за 0 нс принять момент фронта (0->1) сигнала CONV_OUT, то: Если усреднение АЦП не используется, то каждый фронт CONV_OUT будет соответствовать отсчёту АЦП и цифрового входа DI c одним и тем же порядковым номером (т.е. по тактам преобразования между АЦП и DI - нулевая задержка). Но в буфер данные DI кладутся по порядку раньше, чем отчёты АЦП (кажется, на 2 отсчёта - это можно уточнить), но эта задержка буферизации уже не имеет отношения к рассматриваемой аппаратной задержке преобразования АЦП и ввода DI по отношению к CONV_OUT. |
|||
|
||||
|
Re: e502: синхронный ввод/выводВо!! Даже и не могу сказать как вы мне помогли, теперь я вполне могу решить проблему.. Большое спасибо! |
|||
|
||||
|
Re: e502: синхронный ввод/выводЯ не уверен, что вы готовы продолжать это бесконечное разбирательство, но у меня просто идеи реализации того, что мне нужно иссякли.. выходной 4-й бит замкнул на входной 0-й бит и написал вот такую программу
Если смотреть осциллографом, то получится следующее: на выходе 4-го бита будет меандр с периодом 500 мсек, |
|||
|
||||
|
Re: e502: синхронный ввод/вывод@ Valery, простите, я - не программист, но уж сильно похоже на ситуацию, описанную в этой статье FAQ: |
|||
|
||||
|
Re: e502: синхронный ввод/выводДа,я это конечно читал и понимаю в чем тут могут быть проблемы... единственное хочу заметить, что если данные с АЦП совершенно адекватные и частота фрейма низкая.. думаете что USB так сильно задерживает только данные с цифровых входов? Но насколько я понимаю все пишется-читается в одном буфере. На осциллографе картинка стоит без дрожаний, т.е. времени хватает на все... |
|||
|
||||
|
Re: e502: синхронный ввод/выводЧестно говоря по приведенному коду программы сложно понять, что Вы выводите и насколько это соответствует тому, что описывали, так как у Вас там накручена какая-то своя логика формирования данных (вроде m_meandr и m_invert влияют на 15-ый бит (0x4000), а не 4-ый?). Данные АЦП и цифровых входов передаются одним потоком и в ходе передачи задерживаются на одинаковое время (единственное, начальный момент измерения может быть со сдвигом, но это совсем другие порядки времен). Другой вопрос, что из того, что данные адекватные и картинка без дрожаний (хотя небольшое дрожание наверное в любом случае должно быть, все же временные задержки программы все равно будут немного отличаться, хотя это дрожание может быть не заметно для сигнала 500 мс и видимо им можно пренебречь). Время это сильно зависит от ОС, конкретного ПК и т.п. и явно оно не измерялось, но суммарное время задержки обоих каналов в 7 мс не выглядит большим и вполне может соответствовать реальному. Вообще проверить это время можно простым тестом - сперва выставить на цифровые выходы 0, затем разрешить поток на вывод, сделать Preload и загрузить код, соответствующий 1 на выходе, после этого запустить поток, принять первый кадр АЦП и сразу передать на вывод 0. В результате у Вас будет переход от 0 в 1 в момент начала запуска потоков и переход из 1 в 0 в момент когда вы обработаете первый кадр и выведите значение, т.е. длина импульса будет соответствовать суммарному времени задержки ввода и вывода + время сбора одного кадра АЦП. |