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


2 канала ЦАП E14-140D

Вы не вошли.

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

Антон
02.06.2008 15:03:28
#1

Гость

2 канала ЦАП E14-140D

Подскажите как правильно заполнять WhiteBuffer
для вывода гармонического сигнала с обоих каналов?
    for(i = 0; i < (DWORD)dp.DacFifoLength; i++)
    {

            WriteBuffer[i] = Round(SignalAmplitude*sin(2.0*M_PI*SignalFrequency*CurrentTime));
            WriteBuffer[i] &= (WORD)(0x0FFF);
            WriteBuffer[i] |= (WORD)(0x0 << 12);
        i++;
            WriteBuffer[i] = Round(SignalAmplitude*sin(2.0*M_PI*SignalFrequency*CurrentTime));
            WriteBuffer[i] &= (WORD)(0x0FFF);
            WriteBuffer[i] |= (WORD)(0x1 << 12);
                CurrentTime += 1.0/dp.DacRate;
    }

Но такой вариант работает плохо

02.06.2008 15:33:37
#2

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

Re: 2 канала ЦАП E14-140D

Вроде бы все правильно. А что значит "такой вариант работает плохо"?

Антон
02.06.2008 17:48:49
#3

Гость

Re: 2 канала ЦАП E14-140D

Моя проблема описана к конце этого форума http://www.lcard.ru/forumthreads/5476

Но я выяснил что всётаки похоже ЦАП мне в какой-то момент выдаёт сдвинутый синус.
вобщем дело обстоит так: несколько периодов нормально выдаётся синус а потом в какой-то момент выдаёт так: http://2whitespirit.googlepages.com/sinus.JPG
а дальше такой глюк повторяется чаще.

Причём, вроде как, если работать только с одним каналом синус всё время выводится без глюков.

Может как-то специально надо установить размер буфера или BaseIndex?

02.06.2008 18:01:10
#4

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

Re: 2 канала ЦАП E14-140D

1. Есть подозрение, что речь идёт про модуль E14-440D.
2. Я так понимаю, что у Вас одновременно работают АЦП и ЦАП?

Антон
02.06.2008 20:07:46
#5

Гость

Re: 2 канала ЦАП E14-140D

1. Да
2. Да

Антон
02.06.2008 20:11:03
#6

Гость

Re: 2 канала ЦАП E14-140D

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

Антон
03.06.2008 11:32:24
#7

Гость

Re: 2 канала ЦАП E14-140D

Сейчас проверил на осцилографе как генерирует Цап синус. Так на осцилографе всё нормально показывает. Значит получается что проблема именно в считывании данных. Подскажите пожалуйста в чём может быть проблема?
может буфер поменьше сделать или чистить его как-нибудь?

03.06.2008 13:09:14
#8

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

Re: 2 канала ЦАП E14-140D

В руководстве пользователя написано, что при одновременной потоковой работе АЦП и ЦАП их частоты не должны превышать соответственно:
--  100 кГц (ввод) и 100 кГц (вывод) для модулей с ревизиями ‘A’&#247;’C’;
--  250 кГц (ввод) и 125 кГц (вывод) для модулей с ревизиями ‘D’ и выше.
У Вас эти условия выполняются?

Антон
03.06.2008 14:20:17
#9

Гость

Re: 2 канала ЦАП E14-140D

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

Скажите, есди я к вам подъеду не уделите ли вы пол часика что бы с этим попробовать разобраться? У вас ведь опыта много. А я сам никак не могу найти закономерность этого явления.

04.06.2008 11:12:06
#10

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

Re: 2 канала ЦАП E14-140D

А штатный консольный пример из директории /E14-440/Examples/Borland C++ 5.02/ReadWrite/ работает нормально?

Антон
04.06.2008 18:02:58
#11

Гость

Re: 2 канала ЦАП E14-140D

К сожалению его проверить нет возможности.
Т.к. моя задача немного специфичная.

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

05.06.2008 15:19:21
#12

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

Re: 2 канала ЦАП E14-140D

Нормально работающий штатный пример ReadWrite означает, что библиотека и сам модуль функционируют корректно. Т.о. проблема только в программной реализации Вашего собственного алгоритма.

Антон
09.06.2008 14:30:03
#13

Гость

Re: 2 канала ЦАП E14-140D

Здравствуйте, появилось время проверить штатный пример ReadWrite. Оказалось что он тоже подглючивает.
Достаточно просто поставить вывод тех данных на экран, которые записываюся в файл и подождать немного. Особенно часто этот глюк появляется при запросе очередного ADC_DATA_BLOCK_QUANTITY.
Вот пример минимальномодифицированной программы
http://2whitespirit.googlepages.com/Rea … esting.cpp
и пример лога вывода с ошибкой в начале. Как раз после двух пропущенных строк идёт вывод очередного ADC_DATA_BLOCK_QUANTITY, и в его начале виден глюк.

Channel[1]= 1884  Channel[2]=   03  Channel[3]= 2052  Channel[4]=   03
Channel[1]= 2218  Channel[2]=   03  Channel[3]= 2376  Channel[4]=   03
Channel[1]= 2527  Channel[2]=   01  Channel[3]= 2675  Channel[4]=   02
Channel[1]= 2816  Channel[2]=   02  Channel[3]= 2948  Channel[4]=   02
Channel[1]= 3073  Channel[2]=   02  Channel[3]= 3191  Channel[4]=   03
Channel[1]= 3300  Channel[2]=   02  Channel[3]= 3399  Channel[4]=   03
Channel[1]= 3493  Channel[2]=   03  Channel[3]= 3575  Channel[4]=   03
Channel[1]= 3652  Channel[2]=   03  Channel[3]= 3716  Channel[4]=   02


Channel[1]= 3773  Channel[2]=   03  Channel[3]= 3819  Channel[4]=   02
Channel[1]= 3855  Channel[2]=   03  Channel[3]= 3880  Channel[4]=   03
Channel[1]= 3899  Channel[2]=   03  Channel[3]= 3907  Channel[4]=   03
Channel[1]= 3905  Channel[2]=   02  Channel[3]= 3893  Channel[4]=   03
Channel[1]= 3870  Channel[2]=   02  Channel[3]= 3839  Channel[4]=   02
Channel[1]= 3795  Channel[2]=   03  Channel[3]= 3746  Channel[4]=   03
Channel[1]= 3684  Channel[2]=   03  Channel[3]= 3613  Channel[4]=   03
Channel[1]= 3537  Channel[2]=   02  Channel[3]= 3449  Channel[4]=   02
Channel[1]= 3351  Channel[2]=   02  Channel[3]= 3245  Channel[4]=   03
Channel[1]= 3132  Channel[2]=   03  Channel[3]= 3011  Channel[4]=   02
Channel[1]= 2882  Channel[2]=   03  Channel[3]= 2745  Channel[4]=   01
Channel[1]= 2603  Channel[2]=   04  Channel[3]= 2451  Channel[4]=   02
Channel[1]= 2298  Channel[2]=   02  Channel[3]= 2137  Channel[4]=   03
Channel[1]= 1967  Channel[2]=   02  Channel[3]= 1796  Channel[4]=   02
Channel[1]= 1621  Channel[2]=   03  Channel[3]= 1439  Channel[4]=   03
Channel[1]= 1256  Channel[2]=   02  Channel[3]= 1067  Channel[4]=   03
Channel[1]= -2946  Channel[2]=   03  Channel[3]= -2813  Channel[4]=   03
Channel[1]= -2672  Channel[2]=   03  Channel[3]= -2525  Channel[4]=   04
Channel[1]= -2373  Channel[2]=   03  Channel[3]= -2215  Channel[4]=   03
Channel[1]= -2048  Channel[2]=   03  Channel[3]= -1881  Channel[4]=   02
Channel[1]= -1705  Channel[2]=   04  Channel[3]= -1528  Channel[4]=   03
Channel[1]= -1344  Channel[2]=   03  Channel[3]= -1160  Channel[4]=   04
Channel[1]= -969  Channel[2]=   03  Channel[3]= -777  Channel[4]=   02
Channel[1]= -585  Channel[2]=   02  Channel[3]= -390  Channel[4]=   03
Channel[1]= -195  Channel[2]=   03  Channel[3]=   02  Channel[4]=   02
Channel[1]=  198  Channel[2]=   02  Channel[3]=  394  Channel[4]=   02
Channel[1]=  588  Channel[2]=   02  Channel[3]=  781  Channel[4]=   03
Channel[1]=  972  Channel[2]=   01  Channel[3]= 1162  Channel[4]=   02
Channel[1]= 1347  Channel[2]=   02  Channel[3]= 1530  Channel[4]=   01
Channel[1]= 1708  Channel[2]=   02  Channel[3]= 1884  Channel[4]=   02
Channel[1]= 2053  Channel[2]=   03  Channel[3]= 2218  Channel[4]=   02
Channel[1]= 2377  Channel[2]=   03  Channel[3]= 2529  Channel[4]=   02
Channel[1]= 2676  Channel[2]=   04  Channel[3]= 2816  Channel[4]=   02
Channel[1]= 2948  Channel[2]=   01  Channel[3]= 3073  Channel[4]=   04
Channel[1]= 3190  Channel[2]=   03  Channel[3]= 3301  Channel[4]=   02
Channel[1]= 3400  Channel[2]=   02  Channel[3]= 3493  Channel[4]=   02
Channel[1]= 3576  Channel[2]=   02  Channel[3]= 3653  Channel[4]=   03
Channel[1]= 3717  Channel[2]=   03  Channel[3]= 3772  Channel[4]=   03
Channel[1]= 3820  Channel[2]=   03  Channel[3]= 3854  Channel[4]=   02
Channel[1]= 3881  Channel[2]=   02  Channel[3]= 3900  Channel[4]=   03
Channel[1]= 3908  Channel[2]=   03  Channel[3]= 3905  Channel[4]=   03
Channel[1]= 3893  Channel[2]=   03  Channel[3]= 3871  Channel[4]=   02
Channel[1]= 3839  Channel[2]=   02  Channel[3]= 3795  Channel[4]=   02
Channel[1]= 3745  Channel[2]=   02  Channel[3]= 3684  Channel[4]=   02
Channel[1]= 3614  Channel[2]=   03  Channel[3]= 3537  Channel[4]=   02
Channel[1]= 3449  Channel[2]=   03  Channel[3]= 3351  Channel[4]=   02
Channel[1]= 3244  Channel[2]=   03  Channel[3]= 3132  Channel[4]=   03
Channel[1]= 3010  Channel[2]=   03  Channel[3]= 2883  Channel[4]=   02
Channel[1]= 2745  Channel[2]=   02  Channel[3]= 2603  Channel[4]=   04
Channel[1]= 2452  Channel[2]=   02  Channel[3]= 2299  Channel[4]=   02
Channel[1]= 2136  Channel[2]=   03  Channel[3]= 1967  Channel[4]=   02
Channel[1]= 1796  Channel[2]=   02  Channel[3]= 1620  Channel[4]=   02
Channel[1]= 1440  Channel[2]=   03  Channel[3]= 1256  Channel[4]=   02
Channel[1]= 1068  Channel[2]=   03  Channel[3]=  879  Channel[4]=   03
Channel[1]=  685  Channel[2]=   02  Channel[3]=  492  Channel[4]=   02
Channel[1]=  296  Channel[2]=   02  Channel[3]=   99  Channel[4]=   03
Channel[1]=  -96  Channel[2]=   03  Channel[3]= -293  Channel[4]=   03
Channel[1]= -488  Channel[2]=   02  Channel[3]= -682  Channel[4]=   04
Channel[1]= -875  Channel[2]=   03  Channel[3]= -1065  Channel[4]=   03
Channel[1]= -1253  Channel[2]=   02  Channel[3]= -1437  Channel[4]=   02
Channel[1]= -1618  Channel[2]=   02  Channel[3]= -1793  Channel[4]=   03
Channel[1]= -1964  Channel[2]=   02  Channel[3]= -2133  Channel[4]=   02
Channel[1]= -2295  Channel[2]=   02  Channel[3]= -2448  Channel[4]=   02
Channel[1]= -2600  Channel[2]=   02  Channel[3]= -2743  Channel[4]=   03
Channel[1]= -2879  Channel[2]=   03  Channel[3]= -3008  Channel[4]=   03
Channel[1]= -3129  Channel[2]=   03  Channel[3]= -3241  Channel[4]=   02
Channel[1]= -3348  Channel[2]=   01  Channel[3]= -3445  Channel[4]=   03
Channel[1]= -3534  Channel[2]=   02  Channel[3]= -3611  Channel[4]=   02
Channel[1]= -3681  Channel[2]=   03  Channel[3]= -3742  Channel[4]=   02
Channel[1]= -3792  Channel[2]=   02  Channel[3]= -3836  Channel[4]=   02
Channel[1]= -3867  Channel[2]=   04  Channel[3]= -3890  Channel[4]=   03
Channel[1]= -3903  Channel[2]=   02  Channel[3]= -3904  Channel[4]=   03
Channel[1]= -3897  Channel[2]=   02  Channel[3]= -3878  Channel[4]=   02
Channel[1]= -3850  Channel[2]=   03  Channel[3]= -3816  Channel[4]=   02
Channel[1]= -3769  Channel[2]=   01  Channel[3]= -3713  Channel[4]=   03
Channel[1]= -3649  Channel[2]=   01  Channel[3]= -3573  Channel[4]=   02
Channel[1]= -3490  Channel[2]=   02  Channel[3]= -3396  Channel[4]=   03
Channel[1]= -3298  Channel[2]=   03  Channel[3]= -3189  Channel[4]=   02
Channel[1]= -3070  Channel[2]=   04  Channel[3]= -2945  Channel[4]=   02
Channel[1]= -2812  Channel[2]=   04  Channel[3]= -2671  Channel[4]=   03
Channel[1]= -2525  Channel[2]=   03  Channel[3]= -2374  Channel[4]=   03
Channel[1]= -2215  Channel[2]=   03  Channel[3]= -2049  Channel[4]=   03
Channel[1]= -1881  Channel[2]=   02  Channel[3]= -1705  Channel[4]=   04
Channel[1]= -1528  Channel[2]=   02  Channel[3]= -1345  Channel[4]=   02
Channel[1]= -1158  Channel[2]=   03  Channel[3]= -969  Channel[4]=   03
Channel[1]= -777  Channel[2]=   02  Channel[3]= -585  Channel[4]=   03


Немого более полный лог лежит тут:
http://2whitespirit.googlepages.com/log.txt


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

Антон
09.06.2008 14:45:31
#14

Гость

Re: 2 канала ЦАП E14-140D

Для пояснения.
Выход с первого канала ЦАП подключен к 1 и 3 каналу АЦП одновременно.

09.06.2008 18:10:38
#15

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

Re: 2 канала ЦАП E14-140D

1. Вывод на экран текстовой информации такого объёма является  достаточно медленной операцией, а Вам надо не менее чем через 32 мс вызывать очередную функцию WriteData(). Не легче ли просто просмотреть записанный штатным ReadWrite бинарный файл данных в любом предназначенной для этого программе, например L-Graph I (http://www.lcard.ru/download/lgraph1.zip) или L-Graph II (http://www.lcard.ru/download/#9).
2. Можно попробовать увеличить размер DataStep.

Антон
10.06.2008 15:38:31
#16

Гость

Re: 2 канала ЦАП E14-140D

1. Наблюдается та же ситуация без текстового вывода и при просмотре на L-Graph 2.
вот http://2whitespirit.googlepages.com/teeest.JPG

Причём ситуация вообще идентичная, сначала идёт всё хорошо, потом начинаются глюки.

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

Антон
10.06.2008 15:40:13
#17

Гость

Re: 2 канала ЦАП E14-140D

проверьте, пожалуйста, на ваших модулях, это очень важно и сроки поджимают.

11.06.2008 09:28:02
#18

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

Re: 2 канала ЦАП E14-140D

1. Какие частоты работы АЦП и ЦАП используются в Вашем алгоритме?
2. Например, если при вводе данных задать DataStep=512 при частоте АЦП равной 400 кГц, то очередные ReadData() необходимо будет будет вызывать  по меньшей мере каждую 1 мс. Такой алгоритм работы модуля под Windows заранее обречен на провал. Вывод: размер запроса для ReadData() следует выбирать таким, чтобы время его выполнения была не менее 15-30 мс.

11.06.2008 09:34:28
#19

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

Re: 2 канала ЦАП E14-140D

Насчёт L-Graph II ...
Я же уже говорил, что отображение большого кол-ва данных на экране дисплея одновременно с их сбором на высоких частотах АЦП - неправильный подход. При этом однозначно будут сбои в работе модуля. Следует сначала записать данные в файл (без отображения их на экране), а потом спокойно их просмотреть на предмет наличия сбоев.

Антон
11.06.2008 10:35:25
#20

Гость

Re: 2 канала ЦАП E14-140D

Я же написал, что использую штатный пример ReadWrite.
Единственное что я там поменял это DataStep поставил DataStep = MAX_DAC_FIFO_SIZE_E440
Вот именно он, можете посмотреть(правда там он с текстовым выводом, но,как я уже написал, без него работает точно так же)
http://2whitespirit.googlepages.com/Rea … esting.cpp

11.06.2008 10:45:59
#21

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

Re: 2 канала ЦАП E14-140D

1. Я же с самого начала говорил, что сперва следует запустить именно ШТАТНЫЙ пример ReadData. И не надо ничего в нем менять. Затем тупо проверить полученные данные на предмет наличия сбоев. Без этого шага сложно двигаться дальше.
2. И всё-таки: какие частоты АЦП и ЦАП используются?

Антон
11.06.2008 10:54:09
#22

Гость

Re: 2 канала ЦАП E14-140D

1. Сейчас попробую.
2. Как и в штатном примере ReadWrite это 250 АЦП и 125 ЦАП

Антон
12.06.2008 12:55:53
#23

Гость

Re: 2 канала ЦАП E14-140D

Штатный пример  ReadWrite работает номально, но стоит изменить DataStep = MAX_DAC_FIFO_SIZE_E440, начинаются глюки. Вы хотите сказать что это из-за тех самых 15-30 мс?

16.06.2008 16:45:18
#24

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

Re: 2 канала ЦАП E14-140D

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

Контакты

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

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

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

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