|
|
Не запускается ЦАП на L783 под lcomp
dacPar.t1.s_Type = L_DAC_PARAM;
dacPar.t1.AutoInit=1;
dacPar.t1.dRate=1.0;
dacPar.t1.FIFO=1024;
dacPar.t1.IrqStep=1024;
dacPar.t1.Pages=2;
dacPar.t1.IrqEna=1;
dacPar.t1.DacEna=1;
printf("/n FillDAQ returned %d", pI->FillDAQparameters(&dacPar.t1));
printf("/nRate %f", dacPar.t1.dRate);
printf("/nRate %d--%d", dacPar.t1.FIFO,dacPar.t1.IrqStep);
ULONG db=5000;
printf("/n ReqBuff returned %d", pI->RequestBufferStream(&db, L_STREAM_DAC));
printf("/n SetPars returned %d", pI->SetParametersStream(&dacPar.t1,&db, (void **)&data1, (void **)&sync1,L_STREAM_DAC));
printf("/nBufSize %d", db);
for(i=0;i<2*1024;i++) data1[i] = ((USHORT)(1024.0*sin((2.0*3.1415*i/1024.0)))&0xFFF) | (1<<12);
printf("/n InitStartLDevice returned %d", pI->InitStartLDevice());
printf("/n StartLDevice returned %d", pI->StartLDevice());
В приведенном куске кода 2 последние строчки возвращаются с ошибкой (1).
Почему так?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Не запускается ЦАП на L783 под lcomp
без инита АЦП цап не будет работать... а по поводу остановки - Вы выводите на ЦАП сигнал или просот шум? И нет ли там кода 0xFFFF - это типа останова...
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Под инитом АЦП подразумевается заполнение структуры adc и выполнение FillDAQ или полноценный проход с использованием ReqBuff и SetPar? Кстати, можно ли при этой инициализации указать в структуре adc параметр AdcEna=0? Что тогда произойдет? Цап будет выводить, а Aцп не будет снимать отсчеты?
Теперь вторая часть вопроса. Идея следующая записывать в буфер цап, который ,как я понял, ограничен 2048 словами, периоды синуса, прямоугольника, треугольника и пилы так, чтобы на выходе при циклицеском прогоне буфера появлялся непрерывный периодический сигнал. Про код 0xFFFF не понял. Я считал, что этот код не воспринимается 783-й... Кстати, разве после выполнения StopLDevice вывод с цапа продолжится? Как же тогда его остановить?
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Я уже устал воевать с ЦАПом... Даже после выполнения StopLDevice, CloseLDevice и Release на выходе все равно держится сигнал. Пока единственный способ заткнуть ЦАП для меня - перезагрузить компьютер. Даже при рестарте приложения с DacEna = 0 он схраняет старый сигнал. Даже при выполнениии команды C_ENABLE_DAC_STREAM_PLX, с соответствующей 0-й переменной не имеет результата. Можно только изменить сигнал перезаполнив буфер и выполнив StartLDevice, но вопрос-то в другом. Как прекратить выводы отсчетов?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Не запускается ЦАП на L783 под lcomp
должен остановиться если автоинит в 0 был поставлен - тогда ЦАП при StopLDevice встанет.
0xFFFF это я для 780M
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Спасибо за подсказки.
Попробовал, но не срабатывает. Сигнал ЦАПа упорно не желает уходить с выхода... Но теперь появилась более приоритетная проблема, которую очень надеюсь разрешить, а то вся работа встает. Как стабилизировать картинку получаемую с АЦП??? Синусоида постоянно бежит, а надо чтобы остановилась. Пробовал задавать синхронизацию по уровню и по переходу. Эффект есть, но не тот что ожидали. Пока не выполнится условие приложение подвисает (sync, опрашиваемый в цикле, стоит на месте, соответственно выход из цикла для прорисовки половины буфера не происходит, ибо и прорисовывать-то нечего), после выполнения условия буфер начинает заполняться так, как заполнялся бы, если б я без синхронизации вызвал StartLDevice. Что я предполагаю необходимо для стабилизации картинки - после выполнения условия заполняется половинка буфера, прорисовывается, АЦП стопорится до выполнения следующего такого условия, заполняется следующая половинка и все по новой. Хотелось бы понять, как для этих целей использовать синхронизацию, реализованную в штатном драйвере и dll и влияет ли как-то на поведение синхронизации параметр AutoInit?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Не запускается ЦАП на L783 под lcomp
никак так не выйдет... либо старт-стоп режим как в примере OSC или самим искать синхронизацию в сигнале программно...
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Понял, Спасибо.
Теперь очередная проблема. В рководстве сказано, что при частоте выше 1000 межкадровая задержка задается жестко 1/Rate. Ладно, учтем.
Имеющееся подключение: 1 - на генератор синуса, 2-й - болтается. остальные закорочены.
Смотрим следующую управляющую таблицу:
ap.t1.s_Type = L_ADC_PARAM;
ap.t1.AutoInit = 1;
ap.t1.dRate = 1000.0;
ap.t1.dKadr = 0.002;
ap.t1.dScale = 0;
ap.t1.SynchroType = 3;
ap.t1.SynchroSensitivity = 0;
ap.t1.SynchroMode = 0;
ap.t1.AdChannel = 0;
ap.t1.AdPorog = 0;
ap.t1.NCh = 3;
ap.t1.Chn[0] = 0x0;
ap.t1.Chn[1] = 0x1;
ap.t1.Chn[2] = 0x2;
ap.t1.Chn[3] = 0x3;
ap.t1.FIFO = 3072;
ap.t1.IrqStep = 2502;
ap.t1.Pages = 6;
ap.t1.IrqEna = 1;
ap.t1.AdcEna = 1;
Вроде все верно... Плата принимает и межкадровую задержку и частоту. Начинаем сбор. Используется стандартный пример L783.TST с удаленным потоком записи в файл. Для проверки буфера вывожу *data, *(data+1), *(data+2). Т.к. буфер кратный, то это должны быть 1-й, 2-й, 3-й каналы. Так оно и есть. Выводятся отсчеты 2-х синусоид и 0 (на 2-м канале паразитическая, убирается закорачиванием). Казалось бы все работает как надо, но стоит увеличить dKadr до 0.003 и выше, как оригинальная синусоида 1-го канала исчезает (на канале стабильный 0), паразитическая синусоида на 2 канале остается неизменной, на 3-м канале тот же 0. Внимание! вопрос: где отсчеты с 1-го канала??? Сразу скажу, если число каналов поставить 2, то dKadr можно увеличивать без проблем - отсчеты с обоих каналов в норме.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Не запускается ЦАП на L783 под lcomp
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Очень неприятно, но тоже 0. Стоит отметить, что плата приняла и частоту 900, подкорректировав ее до 909 с копейками и задержку 0.008 скорректировав ее до 0.0077. Т.е. по идее это приемлемые для нее параметры. Однако на 1 и 3 - 0, на 2-м - эхо 1-го синуса. И снова, если каналов сделать 2, то все отсчеты честно складываются.
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Сейчас попробовал и 700 МГц, есть прогресс, при задержке 0.003 сигнал присутствует, но уже при 0.004 его снова нет. Но таких диапазонов от минимально возможного 0.001 для 1000 и 0.0014 для 700 явно недостаточно. И если плата корректирует межкадровую задержку при частотах >1000 до 1/Rate, то почему здесь она принимает задержи и даже корректирует их под себя? Может вы попробуете у себя описанные мной комбинации? Выводить данные можно в цикле со слипом в 20 мс(я так и делаю). Возможно подобное поведение глюк конкретной платы....
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Не запускается ЦАП на L783 под lcomp
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
А никак. По умолчанию он задает частоту 100, задержку 0.01. И не смотря на то, что поля редактируемые их изменение никак не сказывается, а при переключении закладок каналов они вообще сбрасываются на умолчальные. Естественно все сигналы корректные, но при таких параметрах (100 и 0.01) они и у меня в программе корректные. Пробовал отключать автозапуск и щелкать готов - опать сбор на 100 и 0.01
|
|
- Сотрудник "Л Кард"
- Здесь с 24.04.2014
- Сообщений: 1,494
|
Re: Не запускается ЦАП на L783 под lcomp
В L-Graph после ввода значений в эти поля необходимо нажать клавишу ENTER.
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Не знал, спасибо, сейчас проверю.
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Ну, как я и предполагал... Все то же... При указанных выше условиях на первом канале стабильный 0.
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Скажите только, это болезнь драйвера, платы или конкретного экземпляра? Чтоб я мог понять, исключать ли мне из приложения работу с задержкой вообще. Просто сейчас у меня при частотах выше 1000 регулировки исключительно частотой, а когда надо частоты меньше 1000, то я использую 1000, а канальную частоту регулирую задержкой.
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Очень расчитывая на ответ на предыдущий вопрос, задаю следующий.
while(n<100000)
{
FIFO = 3072;
IrqStep=20;
Pages = 2;
ap.t1.s_Type = L_ADC_PARAM;
ap.t1.AutoInit = 0;
ap.t1.dRate = 1000.0;
ap.t1.dKadr = 0.0;
ap.t1.dScale = 0;
ap.t1.SynchroType = 3;
ap.t1.SynchroSensitivity = 0;
ap.t1.SynchroMode = 0;
ap.t1.AdChannel = 0;
ap.t1.AdPorog = 0;
ap.t1.NCh = 1;
ap.t1.Chn[0] = 0x0;
ap.t1.Chn[1] = 0x1;
ap.t1.Chn[2] = 0x2;
ap.t1.Chn[3] = 0x3;
ap.t1.FIFO = 3072;
ap.t1.IrqStep = IrqStep;
ap.t1.Pages = Pages;
ap.t1.IrqEna = 1;
ap.t1.AdcEna = 1;
printf("/nFillDAQ %d = %d",n,pI->FillDAQparameters(&ap.t1));
DWORD tm = 1000;
printf("/nRequestBuff %d = %d",n,pI->RequestBufferStream(&tm,L_STREAM_ADC));
printf("/nSetParam %d = %d",n,pI->SetParametersStream(&bp.t1, &tm, (void**)&data, (void**)&sync,L_STREAM_ADC));
if(!n)
{
printf("/n Rate: %f/n",ap.t1.dRate);
printf("/n Kadr: %f/n",ap.t1.dKadr);
printf("/n Buffer size(word): %d",tm);
printf("/n Pages: %d",bp.t1.Pages);
printf("/n FIFO1: %d",ap.t1.FIFO);
printf("/n IrqStep1: %d",ap.t1.IrqStep);
printf("/n FIFO2: %d",bp.t1.FIFO);
printf("/n IrqStep2: %d",bp.t1.IrqStep);
getchar();
}
//pI->EnableCorrection();
printf("/nInitStart %d = %d",n,pI->InitStartLDevice());
printf("/nStartL %d = %d",n,pI->StartLDevice());
while(*sync<IrqStep*Pages)
{
//printf("/n%d",*sync);
}
printf("/nStopL %d = %d",n,pI->StopLDevice());
n++;
}
Вот это цикл из модифицированного мной примера L783.TST. Очевидно, что на каждой из 100000 итераций он заного задает параметры сбора, в данном контексте одни и те же на каждой итерации и рестартует АЦП. Так вот во время отладки выявлена неприятная особенность. При некоторых значениях IrqStep, а конкретно 5 и 20, а может еще каких - все не проверишь, на некоторой, итерации в пределах этих 100000 (может быть как на 140, так и на 30000) происходит зависание. Как оказалось, зависание происходит в цикле while(*sync<IrqStep*Pages) по той простой причине, что *sync замирает вдруг на отметке IrqStep и уже больше никогда не становится равной IrqStep*Pages. Следует отметить, что такое поведеие свойственно не всем значениям IrqStep, а только некоторому ряду. Вот например только что застревание произошло на 26271 итерации при IrqStep = 12 (я в примере 20 поменял на 12). Также важно то, что все предшествующие циклу while(*sync<IrqStep*Pages) вызовы возвращают 0, а следовательно выполняются безошибочно. Так вот вопрос. Как быть? может есть исправление этому багу или IrqStep тоже оказывается дискретным в контексте мнокоразового рестарта АЦП?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Не запускается ЦАП на L783 под lcomp
все дело в том что при малых IrqStep машина просто ляжет под напором прерываний.....для 783 хоть что-то буде работать хорошо при максимумах как фифо так и шага прерываний...это при высоких частотах сбора...
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
У меня тоже были проблемы с ЦАП у L783,а поскольку документация на эту тему помалкивает, пришлось провести экспериментальное исследование этой платы.
Выяснилось, что если AutoInit=1,то плата циклически исполняет буфер ЦАП и не обращает внимания ни на что.
Остановить ее можно только переинициализацией платы.
Если же AutoInit=0, то плата также циклически исполняет буфер ЦАП, но этот процесс останавливается при окончании потока АЦП. Таким образом в этом случае процесс циклического исполнения буфера ЦАП модулируется длительностью исполнения потока АЦП. Причем остановка ЦАП может произойти в любом месте буфера ЦАП. Это зависит от соотношения длительности исполнения потока АЦП и буфера ЦАП.А эти длительности в свою очередь зависят от размеров буферов АЦП и ЦАП и частот
запуска АЦП и ЦАП. Режим подкачки буфера ЦАП можно организовать если установить время существования потока АЦП равным времени испонения буфера ЦАП. После окончания потока АЦП нужно снова инициализировать АЦП и ЦАП и при этом в буфер ЦАП загрузить следующую порцию данных. Таким образом можно исполнять на ЦАП практически неограниченные объемы данных. Следует учитывать, что минимальная частота запуска АЦП в потоке 305гц а ЦАП 80 гц.
Поскольку драйвер платы устроен по принципу "проси что хочешь - дам что могу", менять параметры потоков при перезагрузке не рекомендуется-поведение программы может стать непредсказуемым поскольку то что может драйвер известно слабо.
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Перестал работать потоковый режим ЦАП. Все остальные режимы работают нормально. Работает однократный режим ЦАП, потоковый режим АЦП,ввод- вывод логических сигналов а потоковый режим ЦАП перестал работать в программах , в которых раньше он нормально работал.
Сначала он стал непонятным образом чувствовать предисторию т.е. если к нему не с той стороны подошел, то он мог отказатся работать а при заходе с другой стороны работал нормально. Потом вообще перестал откликаться. Что я должен делать?
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Не запускается ЦАП на L783 под lcomp
код как в примере L780.OSC работает?
|
|
|
Re: Не запускается ЦАП на L783 под lcomp
Плата у Вас в ремонте. Я заменил плату на другую и все заработало. Если Poul это Павел, то мы с Вами недавно встречались и разговаривали о потоках.
|
|
- Сотрудник "Л Кард"
- Откуда: Москва
- Здесь с 23.04.2014
- Сообщений: 3,727
|
Re: Не запускается ЦАП на L783 под lcomp
|