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


L-783

Вы не вошли.

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

OT
19.05.2010 08:34:27
#1

Гость

L-783

Доброе утро!
подскажите пожалуста, как занести определенное количество отсчетов с АЦП в ОЗУ компьютера?
есть указатель на начало кольцевого буфера data
pI->SetParametersStream(&adcPar.t1, &tm, (void **)&data, (void **)&sync,L_STREAM_ADC);
как с этого буфера занести данные в ОЗУ, а позже, пр заполнении определенным количеством отсчетов закинуть сразу на диск в виде целочисленных значений???
Заранее спасибо!

OT
19.05.2010 09:45:35
#2

Гость

Re: L-783

Как реализовать это на языке с++?

19.05.2010 10:16:19
#3

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

Re: L-783

В примере L7XX.TST это как раз реализовано на С++. Там есть комментарии. ПРимер см после установки библиотеки lcomp.dll в L-Card//Library

OT
19.05.2010 10:22:40
#4

Гость

Re: L-783

В примере заносится в файл .dat, и прочитать его можно только через ваш "декодировщик".
А как можно, примерно таким же способом, занести данные в десятичном представлении в файл?

OT
19.05.2010 10:25:24
#5

Гость

Re: L-783

можно просто написать:
int main()
{ofstream fout("1.txt");
...
...
...
pI->InitStartLDevice();
    pI->StartLDevice();
    while(!_kbhit())
    {
    fout<<(short)*data<<endl;
    tmp++;
    }
pI->StopLDevice();
   pI->CloseLDevice();
   pI->Release();
...
}
но тогда шаг дескритизации оч. большой и данные не считываются со скоростью 1 Мгц

19.05.2010 12:06:27
#6

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

Re: L-783

данные в файле лежат в простом бинарном формате покадрово. После сбора  этот файл надо читать пословно и записывать в текстовом виде в другой. Иначе скорость сбора нормальную не достичь...

OT
19.05.2010 12:54:15
#7

Гость

Re: L-783

Спасибо!
adcPar.t1.FIFO = 2*FIFO
adcPar.t1.IrqStep = 32
adcPar.t1.Pages = 2
FIFO - размер половины аппаратного буфера FIFO на плате;
IrqStep - шаг генерации прерываний;
Pages - размер кольцевого буфера в шагах прерываний;
-------------------
PAGES- это размер буфера, куда мы скидываем данные, irqstep это через сколько времени будем генерировать прерывания?
для чего нужен FIFO???

19.05.2010 13:56:40
#8

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

Re: L-783

фифо он в плате задается. в большинстве случаев досточно fifo=irqstep. Маленькими задавать их не стоит тк на скорости ничего не успеет...

OT
19.05.2010 15:32:03
#9

Гость

Re: L-783

adcPar.t1.FIFO = 2048;
adcPar.t1.IrqStep = 2048;
adcPar.t1.Pages = 32;
data указатель на начало адреса, а я считывал только начальный момент не инкрементируя указать, поэтому пропускало много.
спасибо
значит сам кольцевой буфер = irqstep*pages
  pI->StartLDevice();
    for( i=0;i<65536;i++)
    {fout<<*data<<endl;
    data++;}
    data=tmp;
  pI->StopLDevice();
всё заносится сразу в файл с частотой 1Мгц, спасибо.
а как лучше заносить в файл ?
irqstep*pages сразу целый кольцевой буфер или половинку сначала 32768, потом указатель возвращать в начало кольцевого буфера и опять считывать??

19.05.2010 15:54:18
#10

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

Re: L-783

в примере по половинкам заноситься. тк когда одна готова в другую пишется платой...

OT
20.05.2010 09:05:41
#11

Гость

Re: L-783

То есть сначала в плату в ФИФО буфер заполняется его половина, после этого плата перемещает данные в кольцевой буфер на компьютере и начинается он с адреса data.
После первого "перекидывания" ФИФО буфер начинает заполнятся второй половиной,но первая уже свободная. после заполнения второй половины ФИФО, плата генерирует прерывание и скидывает в кольцевой буфер, но уже начинается продолжение с адреса irqste*pages/2??? так???

20.05.2010 10:32:00
#12

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

Re: L-783

в компе буфер больше обычно чем две половинки фифо. если фифо=irqstep то в кольцевой буфер в РС кладется data потом в data+irqstep data+2*irqstep....и так до irqstep*pages ипотом сначала...

OT
21.05.2010 02:32:32
#13

Гость

Re: L-783

Доброй ночи!
вообщем я сделал так:
adcPar.t1.FIFO = 2048;
adcPar.t1.IrqStep = 2048;
adcPar.t1.Pages = 128;
pI->StartLDevice();
for( i=0;i<262144;i++)
{fout<<*data<<endl;
data++;}
data=tmp;
pI->StopLDevice();
Смотрел по полученным вычислениям графи, всё хорошо, но толоько иногда, примерно каждые 60000-10000 тыс отсчетов он немного сбивается, (синусоида немного режется) и дальше нормально идет....
что это может быть? возможно, что это особенность Windows, и возможно по каким-то её прерываниям немного сбивается сбор из кольцевого буфера???

OT
21.05.2010 02:34:57
#14

Гость

Re: L-783

Извините ошибочка вышла не 60.000-10.000 а 100.000