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


АЦП, ЦАП и Буфер - L502

Вы не вошли.

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

Михаил
13.02.2015 02:05:14
#1

Гость

АЦП, ЦАП и Буфер - L502

Добрый вечер, уважаемая техподдержка

Я подаю данные в кодах (которые получились в результате считывания файла) на 1 или 2 канал ЦАП ( или 32-битные слова на цифровой вход),  предварительно запустив потоки, после этого отправляю их в сам буфер функцией L502_Send(), после чего отсанавливаю потоки, снова запускаю, и начинаю выводить данные через L502_Recv(), а после L502_ProcessData(), но в результате при прочтении (и восстановлении, например, из кодов исходного файла) вижу, что ничего не передалось (а точнее, "пустые" или видоизменённые байты). С чем это может быть связано? И вообще, правильно ли я делаю, если я хочу провести какие-то данные через всю карту, а конкретно - через ЦАП - АЦП?

Заранее спасибо за ваши ответ

13.02.2015 10:47:07
#2

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,338

Re: АЦП, ЦАП и Буфер - L502

Здравствуйте.

Правильно ли я понял, что у Вас выход ЦАП соединен со входом АЦП и вы хотите потоком выдавать данные на ЦАП и их же принять АЦП? На всякий случай модуль у вас с установленным ЦАП (так как ЦАП - опция)?

Если так, то последовательность должна быть примерна такая:
1. настроить модуль, разрешить нужные потоки
2. подгрузить в буфер начало сигнала Preload, Send (как в пункте 3.1.2 руководства программиста)
3. Запуск синхронного ввода-вывода по L502_StreamsStart(). При этом вызове модуль начинает выводить данные на ЦАП из буфера и одновременно принимать данные с АЦП и складывать в буфер.
4. Соответственно дальше вы должны периодически вызывать Recv() для приема данных АЦП из буфера
    и периодически добавлять данные в буфер на вывод через Send() . Соответственно принимать Вы будете данные от момента начала сбора.

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

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

Михаил
16.02.2015 01:01:23
#3

Гость

Re: АЦП, ЦАП и Буфер - L502

Алексей L Card пишет:

Здравствуйте.

Правильно ли я понял, что у Вас выход ЦАП соединен со входом АЦП и вы хотите потоком выдавать данные на ЦАП и их же принять АЦП? На всякий случай модуль у вас с установленным ЦАП (так как ЦАП - опция)?

Да, ЦАП и АЦП на моей карте есть

Спасибо за совет, теперь всё заработало, и стало понятно как организовать свою программу. Но сразу назревает ещё один вопрос насчёт функции L502_ProcessData и L502_PrepareData.

В функции ProcessData есть возможность передать на dac1, dac2, и digout. Как я понял - dac1\dac2 принимают входные массивы отсчётов, а digout - значения цифровых выводов. Так же сказано, что только младшие 16 бит "зачитываются" за данные, старшие 16 - это флаги.

Но тут встаёт вопрос - что именно подразумевается под массивом отсчётов?Просто коды? И если говорить про цифровые выводы - подойдут любые данные в виде uint32_t, с данными в младших 16 битах, или тут тоже своя особенная магия?И что лучше всего подойдёт для, например, считывания бинарно файла?

Заранее спасибо за ваш ответ и потраченное время

16.02.2015 11:30:56
#4

Сотрудник "Л Кард"
Здесь с 17.04.2014
Сообщений: 1,338

Re: АЦП, ЦАП и Буфер - L502

На L502 есть 16 цифровых выходов (линии DO1..DO16 на соответствующем разъеме). Каждая линия в момент времени может быть либо в состоянии соответствующем логическому нулю или единице (ну еще либо Z-состоянии). Каждый отсчет соответствует состоянию этих 16 линий в определенный момент времени - каждый бит соответствует из 16 младших битов 32-битного отсчета соответствует состоянию определенной линии (младший соответствует DO1).
старшие 16 бит - отведены под доп. флаги (сейчас два флага для перевода старших линий и/или младших 8 линий в Z-состояние) , если не используете - должны быть нулевые.

Если работаете в синхронном режиме и записали массив отсчетов в буфер модуля, то эти отсчеты будут выводится последовательно с частотой вывода (1 МГц), т.е. сперва 1 мкс состояние выходов будут соответствовать первому отсчету массива, вторую мкс - второму и т.д. (если отсчеты закончатся - сохраняется последнее состояние), т.е. при желании Вы можете получить нужную временную диаграмму с изменением состояний линий в строго определенные моменты времени.

Для ЦАП, то можно явно указывать значение в вольтах, которое должно быть выведено (если в L502_PrepareData указываете в качестве параметров flags L502_DAC_FLAGS_VOLT. Также через или обычно стоит указать L502_DAC_FLAGS_CALIBR для применения калибровочных коэффициентов), но можно и явно указывать коды ЦАП, если без L502_DAC_FLAGS_VOLT.

Такая вот магия)

Ну про файл, это смотря что Вам нужно сделать.