Российский производитель и разработчик сертифицированного измерительного оборудования с 1987 года


ЦАП для E14-140MD

Вы не вошли.

 Поиск | Регистрация | Вход 

Александр
14.08.2012 11:06:23
#1

Гость

ЦАП для E14-140MD

при запуске примера вылетает ошибка failed to get interface. что это может быть?

14.08.2012 11:10:13
#2

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

При запуске какого именно примера?

Поставлен ли драйвер? Подключено ли устройство, видно ли его в диспетчере устройств? Поставлена ли библиотека?

Александр
14.08.2012 11:22:27
#3

Гость

Re: ЦАП для E14-140MD

всё, проблема решена. usb кабель отходил.
можно ещё вопрос? я в программировании пока не очень сведущ. пример запустился, но не совсем понятно что именно он должен делать и как модулировать сигнал?

14.08.2012 12:39:58
#4

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

Какой пример?
Опишите, пожалуйста, задачу, чтобы можно было понять.

Александр
14.08.2012 13:34:28
#5

Гость

Re: ЦАП для E14-140MD

пример L7XX.OSC. запустил .exe файл, вылезло окошко с линиями. всё, далее что-то изменяется чисто случайно.

14.08.2012 18:01:35
#6

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

О, это lcomp...
Пример, похоже, ориентирован в основном на ввод из АЦП (изображает некое подобие осциллографа). ЦАП Вы там, наверное, не увидите, если не подадите выход ЦАП на вход АЦП (перемычкой на разъеме, например).
Или подключите осциллограф.
Судя по исходнику, он должен генерировать синус.

Еще можете взять файл http://www.lcard.ru/download/e140-console-test.zip с неофициальными консольными примерами под E14-140-M, но не через lcomp, а через библиотеку lusbapi. В чем-то она проще, хотя менее универсальная (для каждого типа прибора свои функции).
Вывод на ЦАП там есть в программах set_dac, dac_demo и bidir.

Осциллограф есть? Можете подключить осциллограф в режиме X-Y к выходам ЦАП - X = DAC1 (контакт 1 разъема ANALOG), Y = DAC2 (контакт 2), земля - AGND (контакт 3) и запустить dac_demo. Нарисует логотип L-Card на осциллографе. dac_demo rabbit нарисует зайчика smile

Александр
15.08.2012 09:35:19
#7

Гость

Re: ЦАП для E14-140MD

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

другие примеры сейчас буду пробовать

Александр
15.08.2012 11:40:01
#8

Гость

Re: ЦАП для E14-140MD

set_dac-работает, выдаёт постоянку на выходы ЦАП.
dac_demo-к сожалению не получилось запустить, осциллограф не умеет XY запускать.
bidir-выдаёт синий экран смерти:)
хотелось бы найти рабочий пример, который позволяет задавать форму сигнала аналитически

16.08.2012 11:54:26
#9

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

>хотелось бы найти рабочий пример, который позволяет задавать форму сигнала аналитически

Аналитически - то есть формулой, заданной в виде текстовой строки, при этом без перекомпиляции программы? Это была бы неплохая задачка для *примера* smile

В принципе этот прибор все-таки ориентирован на разработку программ пользователем. Есть библиотека и подробное описание. (Кстати, в части ЦАП крайне рекомендую прочитать дополнение http://www.lcard.ru/download/e14_140m_addendum_dac.pdf )

А примером для написания программы может служить тот же dac_demo или bidir (только там еще и ввод с АЦП, который можно включать/выключать независимо от ЦАП - собственно, потому и "bidir", эта программа писалась как тест двунаправленной связи с прибором).

То есть если все-таки написать (переделать из примера) свою программу на C/C++ Вы готовы, то я Вам с удовольствием подскажу, как это сделать.

ОБНОВИЛ e140-console-test.zip, добавил туда программу dac-sine: генератор синуса на 2 канала с заданными амплитудами либо RMS и заданным сдвигом фаз. Это рабочая программа, которую мы сами используем при наладке другого прибора.

(Консольные примеры компилировались под GCC/MinGW, но из можно без большого труда портировать под любой C++, например, MSVC. Только lusbapi.lib взять правильный.)

Еще есть пример генератора под labview, если я не ошибаюсь.

А вот что bidir вывалился в BSOD, это надо бы разобраться. Вывалился при нажатии "D" для запуска ЦАП? Драйвер свежий ставили? Из комплекта lcomp?
Была ситуация с BSOD при попытке записи в устройство с очень старой версией драйвера ldevusbu (по причине отсутствия в E14-140-не-М потокового вывода на ЦАП).

В общем, для синусов я Вам пример дал готовый.
Можно еще сделать вывод из файла - например, стерео 16-бит .WAV. Кстати, забавная мысль. Только поскольку у 140M специфический ряд частот дискретизации, это не так очевидно.
Хотите консольный проигрыватель wav на E14-140MD? Сразу не обещаю, но если будет время - напишу smile
А аналитически - это сложно. Это парсер формулы писать надо.

Александр
16.08.2012 15:40:12
#10

Гость

Re: ЦАП для E14-140MD

ну у меня пока что украли АЦП на испытания. Так что проверить работоспособность примера я смогу чуть позже. PDF-ку сейчас поизучаю. Написать, по крайней мере попробовать переделать я готов)

На тему BSOD, вывалился при нажатии клавиши "D". Драйвер ставил буквально недавно, но когда опять получу АЦП, переставлю ещё раз с сайта.

На тему WAV я уже от отчаяния начал искать как подать сигнал заданной формы через звуковой выход+усилитель:)

16.08.2012 15:51:18
#11

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

На тему WAV мне понравилась мысль, и я его как будто бы написал smile
Обновил http://www.lcard.ru/download/e140-console-test.zip - теперь там в подкаталоге wav_player программа, которая пытается играть заданный WAV, автоматически преобразуя его в стерео 16-бит 50000 Гц. Файл грузится в память целиком, поэтому его размер должен быть разумным smile

Только смотрите, чтобы аудиовход и ЦАП были электрически совместимы (10Vp-p, max. 10 мА). Наушники не подключать! Земля усилителя должна быть соединена с землей компьютера. Усилитель должен выдерживать амплитуду 5 В. Активные колонки можно попробовать, но аккуратно, не спалите ничего!

Александр
16.08.2012 16:21:29
#12

Гость

Re: ЦАП для E14-140MD

Это только идея) до её реализации нужно ещё как-то смоделировать сигнал и запустить каким-то образом. В данный момент я читаю, что в мануале написано и жду АЦП к завтрашнему дню может быть)

16.08.2012 16:31:56
#13

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

Ну, смоделировать нужный сигнал - это уже надо писать собственную программу. Хотя если цифровой сигнал записать в файл, то можно вот этим wav_player/'ом попробовать smile

Я так понял сначала, что Вам надо просто проверить, как работает ЦАП, и посмотреть на программу, которая умеет выводить на него сигналы. Вот теперь их целых три: dac_set (однократный вывод), dac_sine - генератор двух синусов (циклический режим) и wav_player (потоковый режим).

Александр
16.08.2012 16:43:35
#14

Гость

Re: ЦАП для E14-140MD

мне необходимо для установки смоделировать напряжение похожее на включение трансформатора тока. И на уже имеющейся установке проверить inrush-фильтр, который как-то (мне не говорят как) нивелирует бросок при включении.

16.08.2012 16:52:47
#15

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

А проверить - это принять с АЦП отклик установки на поданный сигнал? Тогда нужно нечто по схеме bidir - в ЦАП пишется подготовленный (рассчитанный по каким-то формулам) цифровой сигнал, параллельно с АЦП снимаются параметры установки.
Можно использовать режим синхронизации пуска АЦП с началом вывода на ЦАП.
Описания и примеров должно быть достаточно. Если что - спрашивайте.

Александр
16.08.2012 16:57:02
#16

Гость

Re: ЦАП для E14-140MD

хорошо, надеюсь запустится:) в самом файле bidir что необходимо поменять, чтобы загнать туда другое аналитическое выражение? просто поменять функцию в cpp файле и всё?

16.08.2012 17:37:41
#17

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

Первым делом определите, в каком режиме будете работать - циклическом (короткий периодический сигнал, повторяющийся по кругу, данные грузятся в ЦАП один ращ) или потоковом (произвольный сигнал, данные гонятся по USB во время воспроизведения).

Какой длины будет сигнал? Какая нужна частота дискретизации?

Если брать за основу bidir.cpp, то заменить надо кусок, где заполняется массив, выдаваемый на ЦАП. Там массив всего один (пишется каждый раз один и тот же буфер), возможно, надо сделать более длинный буфер и писать его целиком или по частям.
(Если сигнал не очень длинный, скажем, порядка  сотен килобайт, то можно просто выкинуть цикл записи, а оставить одну запись из длинного буфера)

Значительная часть примера bidir - это связь между потоками и независимое управление пуском/стопом АЦП и ЦАП с клавиатуры. Вам это, наверное, будет не нужно.

Если брать за основу dac_sine, то надо тоже заменить генерацию синусоид на свой сигнал.
Но эта программа предполагает циклический режим, т.е. сигнал длиной до 5120 отсчетов пишется в ЦАП один раз и играется по кругу без подкачки данных по USB.

Если брать за основу wav_player - то можно выкинуть загрузчик .wav и ресэмплер и заполнить массив данных своими отсчетами.

Александр
16.08.2012 17:55:01
#18

Гость

Re: ЦАП для E14-140MD

нужен будет потоковый, это я уже понял. нужно будет подать на вход установки переходной процесс включения ТТ. Это займёт максимум секунду и то вряд ли. из-за того, что рост очень быстрый, думаю частота дискредитации нужна будет максимально большой. прикинуть, сколько это в байтах я не знаю.

16.08.2012 18:31:20
#19

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

Максимальная частота дискретизации у этого прибора 200 кГц. 1 с = 200000 осчетов = 800000 байт.
Это можно вывести одним вызовом WriteFile():

START_DAC
WriteFile
WaitForSingleObject
GetOverlappedResult
(дождаться, пока завершится вывод на ЦАП -- можно по DevState, см. документацию)
STOP_DAC

Можно взять за основу wav_player, как я советовал выше.

Если в это время этим же модулем будет делаться ввод через АЦП, то можно сделать проще: запустить вывод на ЦАП в режиме синхронизации с АЦП, запустить запись данных (WriteFile), потом забыть про ЦАП и собрать нужное количество данных с АЦП. Этим определится время эксперимента. А после окончания ввода с АЦП просто остановить ЦАП, который в фоне свое отработал (GetOverlappedResult, STOP_DAC).
Таким образом можно обойтись без сложных циклов и многопоточности, программа будет простая и прозрачная.

Александр
17.08.2012 14:50:31
#20

Гость

Re: ЦАП для E14-140MD

for (int i = 0; i < DAC_BUF_SAMPLES; i++)
                            {
                            double x = (double)((1000 * i) % DAC_FREQ) / DAC_FREQ;
                            DAC_Buf[i][0] = (int)(level * sin(2 * M_PI * x));
                            DAC_Buf[i][1] = (int)(4 * level * (-0.5 + x - fabs(x - 0.25) + fabs(x - 0.75)));
                            }
#if FLIP_FLOP_AMP
                        level = level ^ 0x4000;


вот это вывод на ЦАП если я правильно понимаю? и то есть его надо менять на то, что Вы описали выше?

Александр
17.08.2012 15:13:46
#21

Гость

Re: ЦАП для E14-140MD

и насколько я понимаю, после этого нужно удалить часть с ожиданием следующего буфера.

20.08.2012 11:28:03
#22

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: ЦАП для E14-140MD

Ну да, заполнить массив своими значениями. buf[i][j] = i-й отсчет канала j, j = 0..1.

Ожидание окончания надо сделать и для единственной записи (каждому WriteFile в режиме overlapped должен соответствовать GetOverlappedResult). WaitForSingleObject не обязателен, если у GetOverlappedResult параметр bWait == TRUE, но в этом случае нет таймаута (ожидание бесконечно до окончания записи или до ошибки).

Размер записываемых данных ДОЛЖЕН быть кратен 256 байтам = 64 отсчетам (это особенность работы E14-140M). Если надо вывести меньшее число отсчетов, то можно заполнить dp.TotalSamples (использовать режим "автостоп ЦАП после вывода заданного количества отсчетов"), но размер записи все равно должен быть кратен 256 байт, просто лишние отсчеты не попадут на выход ЦАП. То есть если TotalSamples = 65, то WriteFile должен записать 128 отсчетов (512 байт): 65 реальных + 63 незначащих. Подробнее об этом и всем прочем в e14_140m_addendum_dac.pdf

И еще - если надо дождаться окончания _фактического_ вывода на ЦАП (ведь после окончания записи данных в USB еще остается буфер в самом устройстве), то можно опрашивать флаги состояния устройства. Т.е. чтобы DAC_STOP не отрубил хвост. Пример использования - wav_player.
(Либо можно указать TotalSamples и не делать DAC_STOP в конце работы вообще - сам доиграет и остановится. Но не советую, это не очень корректно, особенно если процедура будет запускаться повторно.)

Контакты

Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4

Многоканальный телефон:+7 (495) 785-95-25

Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru

Время работы: с 9-00 до 19-00 мск