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


L780(B), ЦАП(ы), LCOMP ( 2 )

Вы не вошли.

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

Paul
16.11.2006 05:40:22
#1

Гость

L780(B), ЦАП(ы), LCOMP ( 2 )

Я уже спрашивал Вас и был отослан smile к исходникам l780.osc.
К сожалению я там не нашел ответа на вопрос:
|-- ------------------------------------------------------------------------|
|Как можно организовать потоковый НЕПРЕРЫВНЫЙ вывод на ЦАП-ы платы L780(В)?|
|-- ------------------------------------------------------------------------|
Уточнение мне надо выводить 10 мин. с частотой 125 кHz, массив 75 000 000 отсчетов.
Например хочу проиграть песню.

В примере l780.osc, в потоке ServiceThread(...) у Вас запускаются:
InitStartLDevice
StartLDevice
WaitForSingleObject
StopLDevice
это приводит к разрыву в выводе, я точно не измерял, но думаю, что в районе 20 мсек. На ЦАП-е в это время стоит последнее значение из буфера("полочка").

Что предполагалось.
Потоковый непрерывный ввод у Вас осуществляется в кольцевой буфер в памяти компьютера и синхронизируется по переменной. То же для вывода можно сделать? т.е. в потоковой функции мониторить синх. переменную и в половинки буфера подбрасывать данные. Я пока добился зацикливание буфера ЦАП в памяти DSP - непрерывный циклический вывод того, что там находится, ну и Ваш пример l780.osc - работает, но с "разрывом".

При инициализации вывода в функции
pI->SetParametersStream(&dp.t1,&db, (void **)&data_out, (void **)&msync_out,L_STREAM_DAC);
передается адрес переменной, которая должна содержать адрес счетчика (как я понял). Так вот *msync_out всегда 0.
Ну ладно есть ведь еще в
pI->SetParametersStream(&ap.t1, &tm, (void **)&data, (void **)&msync,L_STREAM_ADC);
msync - тоже для АЦП. Тут все Ок - она действительно меняется.

При попытке уровнять размеры буфера вывода и ввода, и привязаться к переменной msync(АЦП), для заполнения буфера ЦАП-ов,
при попытке записи что-то в data_out[i] - ничего не происходит. На экране осциллографа крутится буфер ЦАП-ов из памяти DSP.


Вопрос:
Запрашиваем данные
ULONG db=40000;
pI->RequestBufferStream(&db, L_STREAM_DAC);
(боюсь соврать забыл цифру)
db > 1024 (выровненный по половинкам буфера размер), но и в Вашем примере тоже - не выводится больше 1024 - размер буфера ЦАП в памяти DSP.
т.е. зачем
???
for(int i=0;i<2048;i++) data1[i]=((USHORT)(i*sin((2.0*(3.1415*i)/1024.0)))&0xFFF)|0x0000;
for(int i=1024;i<4096;i++) data1[i]=((USHORT)(512.0*sin((2.0*(3.1415*i)/1024.0)))&0xFFF)|0x0000;
- это у Вас в примере.

К вопросу об инициализации вывода на ЦАП, как Вы ответили для вывода на ЦАП необходимо инициализировать АЦП, при этом после выполнения
...
pI->FillDAQparameters(&ap.t1)     ( для ap.t1.s_Type = L_ADC_PARAM )
...
pI->FillDAQparameters(&dp.t1);    ( для dp.t1.s_Type = L_DAC_PARAM )

ap.t1.dRate != dp.t1.dRate;

Вопрос: Какая частота правильная? Или что, у каждого(ЦАП и АЦП) своя?


Все это на плате L780В, L780.bio(11 222),
lcomp.exe(2 235 361)  Version 3.0r3

handle 7d4
load status 0
plata test 0
SerNum 7L851115
BrdName L780
Rev B
DspType 2184
IsDacPresent 1
Quartz 14745600
Slot parameters
Base a000
BaseL 80
Mem e0000000
MemL 10000
Type 6
DSPType 888
Irq 4

16.11.2006 10:58:47
#2

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780(B), ЦАП(ы), LCOMP ( 2 )

В этом пример IrqEna для ЦАП в 1 поставить и он будет выводить из буфера. Частоыт для ЦАП м АЦП естественно разные, это независимые штуки. причем буфер цапа при выводе в потоке ULONG  и там лежат данные в виде short 0 short 0...

Paul
16.11.2006 11:48:09
#3

Гость

Re: L780(B), ЦАП(ы), LCOMP ( 2 )

IrqEna - и так 1, и из буфера он выводит, но из какого(из DSP?)
И так по порядку:
Предположим вывел, сгенерировалось прерывание ..., дальше, после
WaitForSingleObject(t->hEventData,INFINITE);
вызов
StopLDevice();
на цапе в этот момент весит полежнее выводимое значение.
Дальше чегото там вы перерисовываете окно,
значение на цапе висит
InitStartLDevice(); - тут я уже не знаю что на цапе - может 0
InitStartLDevice();
Значение висит
StartLDevice();
начали выводить новый буфер, с новыми данными
в результате задержка непрерывного вывода.
Вы к своему примеру осцилограф включите и посмотрите с синхронизацией на то, что вы выодите.
Вопрос:
|----------------------------------------|
|Как можно организовать потоковый НЕПРЕРЫВНЫЙ вывод на ЦАП-ы платы L780(В)?|
|----------------------------------------|

Paul
16.11.2006 12:33:26
#4

Гость

Re: L780(B), ЦАП(ы), LCOMP ( 2 )

Есть ли пример или опыт, работы с ЦАП, с параметром
dacPar.t1.AutoInit=1;

Как при потоковом вводе – плата выводит половинки буфера DSP(0x0FFF … 0xC000), по половинкам генерирует прерывания, драйвер заполняет половинки из Большого Кольцевого Буфера, организованного в памяти компьютера, и общается с приложением посредствам переменной синхронизации данных Аля sync1.

Иначе, как мне кажется, с вызовами StopLDevice(), (…закачка новых данных…) InitStartLDevice(), StartLDevice() – будет происходить задержка вывода полочка при dacPar.t1.AutoInit=0, или пропуск 1/2буфера FIFO DSP при dacPar.t1.AutoInit=1.

К сведенью при dacPar.t1.AutoInit=1, StopLDevice() а потом даже CloseLDevice(), Release() – не останавливают вывод из FIFO DSP.

16.11.2006 13:58:28
#5

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780(B), ЦАП(ы), LCOMP ( 2 )

Для AutoInit так и должно быть для ЦАП. А если стопить, то конечно поток на ЦАП будет обрываться.
Стопить АЦП не надо....а подкладывать ЦАП надо. Еще пример L791.TST можете посмотреть...

Paul
17.11.2006 01:11:01
#6

Гость

Re: L780(B), ЦАП(ы), LCOMP ( 2 )

smile

1. У Вас в документации:

DAC_PAR_0
….
USHORT AutoInit - флаг указывающий на тип сбора данных 0 - однократный 1 - циклический; (пока не используется)
Как это понимать ?

2. Никто не хочет вызывать StopLDevice(), это у Вас в примере, и в L791.TST тоже.


3. Как подкладывать по Вашему эвенту – будет задержка, а переменная *sync1
(void** Sync - переменная, в которой будет возвращен адрес переменной синхронизации)
ВСЕГДА НОЛЬ!!!

Вопрос.
Кто-то когда-то на L780(b), с Lcomp выводил непрерывный (бесконечный поток)
Ответьте мне на последний вопрос и если Да – я съем свой котелок &#61516;.

17.11.2006 15:19:19
#7

Сотрудник "Л Кард"
Откуда: Москва
Здесь с 23.04.2014
Сообщений: 3,727

Re: L780(B), ЦАП(ы), LCOMP ( 2 )

чего то я совсем плохой... на 780B поток не возможен. Только на 780С...