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


АЦП на L780M rev. C

Вы не вошли.

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

Павел
25.09.2006 16:15:07
#1

Гость

АЦП на L780M rev. C

Делаю всё как в примере:

    ADC_PAR adcPar;
   adcPar.t1.s_Type = L_ADC_PARAM;
   adcPar.t1.AutoInit = 0;
   adcPar.t1.dRate = 100.0;
   adcPar.t1.dKadr = 0.0;
   adcPar.t1.dScale = 0;
   adcPar.t1.SynchroType = 3;
   adcPar.t1.SynchroSensitivity = 0;
   adcPar.t1.SynchroMode = 0;
   adcPar.t1.AdChannel = 0;
   adcPar.t1.AdPorog = 0;
   adcPar.t1.NCh = 1;
   adcPar.t1.Chn[0] = 0x0;
//   adcPar.t1.Chn[1] = 0x1;
//   adcPar.t1.Chn[2] = 0x2;
//   adcPar.t1.Chn[3] = 0x3;
   adcPar.t1.FIFO = 1024;
   adcPar.t1.IrqStep = 1024;
   adcPar.t1.Pages = 32;
   adcPar.t1.IrqEna = 1;
   adcPar.t1.AdcEna = 1;
   if (L_SUCCESS != pI->FillDAQparameters(&adcPar.t1))
        ShowMessage("L_SUCCESS != pI->FillDAQparameters(&adcPar.t1)");

   ShowMessage(IntToStr(adcPar.t1.Rate)+" "+adcPar.t1.Kadr+" "+adcPar.t1.NCh);

    DWORD tm = 100000;  // мы захотели 100000 отсчетов
    if (L_SUCCESS != pI->RequestBufferStream(&tm,L_STREAM_ADC))
        ShowMessage("L_SUCCESS != pI->RequestBufferStream(&tm,L_STREAM_ADC)");
    ShowMessage(tm);
    if (L_SUCCESS!=pI->SetParametersStream(&adcPar.t1, &tm, (void **)&data, (void **)&sync,L_STREAM_ADC))
        ShowMessage("L_SUCCESS!=pI->SetParametersStream(&adcPar.t1, &tm, (void **)&data, (void **)&sync,L_STREAM_ADC))");

    // Разрешили корректировку вводимых данных
    if (L_SUCCESS!=pI->EnableCorrection())
        ShowMessage("L_SUCCESS!=pI->EnableCorrection()");

    HANDLE hEventData = CreateEvent(0,FALSE,FALSE,NULL);
    if (NULL == hEventData)
        ShowMessage(AnsiString("NULL == hEventData/n")+GetLastError());

    assert(L_SUCCESS==pI->SetLDeviceEvent(hEventData));

    assert(L_SUCCESS==pI->InitStartLDevice());
    assert(L_SUCCESS==pI->StartLDevice());
    WaitForSingleObject(hEventData,INFINITE);
    assert(L_SUCCESS==pI->StopLDevice());

На WaitForSingleObject() всё останавливается. Почему?

Павел
25.09.2006 18:48:23
#2

Гость

Re: АЦП на L780M rev. C

Кстати, в режиме циклического опроса не меняется переменная синхронизации. Просто стоит на нуле и всё. Код приводить не буду, бо почти тоже  самое. L-Graph считывает нормально. Поискав по форуму, увидел, что некоторые люди пльзуют функцию FillADCParameters_PLX. Это что за зверь? В примерах такого нет. В исходниках библиотеки есть FillADCParameters, но это вроде тоже что и FillDAQParameters.

26.09.2006 09:17:51
#3

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

Re: АЦП на L780M rev. C

а можно полный текст инициализации? как там загрузка и чтение флеша?

Павел
26.09.2006 09:26:42
#4

Гость

Re: АЦП на L780M rev. C

L780::L780()
{
    ULONG slot = 0;
    CallCreateInstance("lcomp.dll");
    LUnknown* pIUnknown = CreateInstance(slot);
    assert(pIUnknown != NULL);

    HRESULT hr = pIUnknown->QueryInterface(IID_ILDEV,(void**)&pI);
    assert(SUCCEEDED(hr));
    pIUnknown->Release();

    HANDLE lh = pI->OpenLDevice(); // начало работы с платой
    assert(lh!=INVALID_HANDLE_VALUE );

    assert(pI->LoadBios("l780")==L_SUCCESS);

    assert(pI->PlataTest()==L_SUCCESS);

    ASYNC_PAR pp;
    pp.s_Type = L_ASYNC_TTL_CFG;
    pp.Mode = 1;
    assert(pI->IoAsync(&pp)==L_SUCCESS);
}

Кстати, асинхронный вывод на ЦАП и чтение/запись ТТЛ прекрасно работают.

26.09.2006 09:58:35
#5

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

Re: АЦП на L780M rev. C

флеш прочтите ReadPlataDescr

Павел
26.09.2006 10:05:54
#6

Гость

Re: АЦП на L780M rev. C

И что там должно быть?

26.09.2006 10:15:32
#7

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

Re: АЦП на L780M rev. C

его просто надо прочесть. потом в расчетах частота кварца используется... в функции Fill

Павел
26.09.2006 10:34:04
#8

Гость

Re: АЦП на L780M rev. C

Вроде бы помогло. Спасибо! smile
А где про это в документации можно почитать? Просто странное какое-то поведение - непрочитав догадаться нереально. Глобальные переменные пользуем wink ?

26.09.2006 10:36:24
#9

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

Re: АЦП на L780M rev. C

если делать все как в примере то сразу бы и заработало....это просто инициализация внутренней переменной класса...и при проверке ошибок видно было бы что параметры сбора лажовые...

Павел
26.09.2006 10:44:48
#10

Гость

Re: АЦП на L780M rev. C

А где нужно было проверять ошибки? На L_SUCCESS  я вроде бы везде ассерты поставил.

--
ЗЫ
Просто как-то в голову не пришло, что чтение информации о плате может повлиять на её работу. Извините, но это всё равно что запихнуть какие-то настройки в окно "О программе"

26.09.2006 11:26:57
#11

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

Re: АЦП на L780M rev. C

функция расчета параметров сбора возвращает обновленные значения... а такая разбивка следствие того что у части плат флеш можно просто читать, а у части только после загрузки биос... а описалово  фиговое конечно...