Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Добрый вечер!
Подскажите пожалуйста: как корректно определять доступность АЦП?
Проблема:
- Включаем АЦП: запускаем приложение: АЦП нашлось, запустился сбор данных путем перебора значений выводов:
==
for (int i=0; i<(toChannel-fromChannel+1); i++){
ansyncPar.Chn[0] = (i+fromChannel) | (gain << 6) | 0x20;
status = pI->IoAsync(&ansyncPar);
if (status!= L_SUCCESS){
this->logger->AddLog("e14440::GetState ADC error %lu\n", status);
this->Close();
}
*(arr+i) = (short)ansyncPar.Data[0];
}
==
Если в этот момент я выдерну USB, то сбор данных "продолжится", ошибка не определяется.
Добрый вечер!
Спасибо огромное за ответ!
Поправил алгоритм, результат стал быть похожим на правду.
По типу АЦП: сообщение я писал уже в ночи, опечатался, извините. Речь идет о Е14-440.
Еще одни вопрос:
dKadr я устанавливаю в 0 (при dRate=2.5), после иниализации беру значение частоты и задержки и вижу, что АЦП dKadr устанавливает в 0.4
==
23:15:20: Rate: 2.500000
23:15:20: Kadr: 0.400000
==
По какому принципу происходит этот пересчет? Это время переключения на новый кадр с канала 0?
Добрый вечер!
Помогите пожалуйста разобраться с логикой программирования параметров частоты сбора данных.
Имею: E14-400
К ней подключено, допустим 25 каналов. Для отладки подключен генератор импульсов каждый 200мс пеняющий статус порта 0/5В/0/5В/...
Цель: собирать измерения со всех 25 каналов в течении 3-х секунд с частотой 100 герц на канал.
Моя логика:
в 1 секунду нужно каждый канал измерить 100 раз. Т е я должен получить на выходе массив слов размеров: 25*3*100 = 7500. или по 300 слов на канал.
Т е получается за 3 секунды я должен получить 300 кадров по 25 каналов в каждом.
Смотрю в описание (lcomp):
=
E14-440/E14-140/E154
• dRate - частота опроса каналов в кадре в килогерцах;
• dKadr - интервал между кадрами в миллисекундах, фактически определяет скорость сбора данных;
==
Значение буфера пока не меняю, оставляю как в примере:
==
adcPar.t1.FIFO = 1536;
adcPar.t1.IrqStep = 1536;
adcPar.t1.Pages = 16;
adcPar.t1.IrqEna = 1;
adcPar.t1.AdcEna = 1;
==
Дальше магия.
Как я понимаю: частоту dRate я задаю для измерений внутри кадра, хоть 1кГц, количеством же полученных кадров я управляю через dKadr.
Т е чтобы на 1 секунду получить 100 кадров, я задаю dKadr = 10.
Но при таких параметрах измерение идет оочень долго.
Для отладки сделал генератор импульсов, который каждые 200мс устанавливает/сбрасывает напряжение на портах в 5В. Когда добиваюсь того, чтобы измерение шло 3с, вижу что ловится всего несколько импульсов, часть пропускается.
Подскажите, в чем ошибка моего понимания?
И так, для тех кто столкнется с тем, на что наступил я.
В E14-400 ЦАП 12 бит. т е 0x0000 - 0x0FFF
Диапазон -5 - +5 В
Первые 11 бит это диапазон 0-5В
12-й бит это признак отрицательного значения (0x0800)
В явном виде в документации этого не нашел (с теми, кто уверен что этого писать не надо т к "само-собой разумеется" я не согласен. Документация к коммерческому продукту должна быть очевидна и включать все мелочи, это экономит время разработки). Оставляю свой опыт здесь.
И так, оставлю комментарий для тех, кто пойдет по моим стопам.
С проблемой разобрался, gcc тут непричем.
Основные положения:
- Стоит обратить внимание что в примерах SDK АЦП работает в дифференциальном режиме. На это стоит обратить внимание при отладке, особенно если вы подключаете сигнал к общей земле и используете однополюсной режим; Я долго не мог понять что происходит, почему одни сигнал нормальные а другие хрен знает какие, пока в сотый раз не перечитал структуру настройки каналов в инструкции и не обратил внимание в 'L-Graph I' на галочку в верхнем углу, переключающую режим.
- Установка задержки между кадрами. В инструкции ничего не нашел по этому поводу. Наверное для разработчиков которые "в теме" это само-собой разумеющийся параметр. Для мена он таковым не является. Вот ссылка где доходчиво про это написано: https://studfile.net/preview/420362/
- Лучше все-таки заземлять неиспользуемые выводы. Если этого не сделать, незадействованные выводы будут фонить, если заходите выводить графики на один экран могут быть сюрпризы.
- Если получили отрицательные числа X, то перевести их в отчеты нужно по по формуле 0xFFFF-X. - Установлено методом научного тыка.
Пожалуй это ключевые моменты, не понимая которые меня затормозили.
Из не решенного вопроса на текущий момент вижу вопрос с переводом отсчетов в Вольты.
Также почему-то вылетает по сегментации ф-ция из примера:
==
if(pI) pI->CloseLDevice();
if(pI) pI->Release(); <- Вот тут вылетает. Странно, буду с этим разбираться.
==
В общем есть над сем работать.
Спасибо за внимание.
Все доброго времени суток!
Подскажите, не сталкивался ли кто-нибудь с подобной проблемой:
Есть сигнал поданный на вход АЦП (14-440).
Если открыть lcomp для windows (l7xx.osc) то в окне это выглядит вот так
Но как бы ладно, тут еще есть варианты пофильтровать разобраться
Далее я пересобрал на gcc пример lcomp (l7xx.tst) под консоль, получил файл data.dat, загрузил его в тотже lgraph и получил такую картинку:
Примерно такую же картину я получаю в своем приложении.
Тут явно что-то не то. Герцовку менял, все остальные параметры зашитые в примере не трогал. Собираю под 32-х битную версию...
Из технических деталей даже не знаю что еще приложить.
Подскажите пожалуйста, может кто сталкивался или у вас будут мысли хоть в какое направление копать?
Здравствуйте!
Помогите пожалуйста разобраться с записью в ЦАП.
Использую пример:
==
ASYNC_PAR pp;
pp.s_Type = L_ASYNC_DAC_OUT;
pp.Mode = port; //0 или 1, зависит от номера порта
pp.Data[0] = value; //Значение
pI->IoAsync(&pp);
==
При этом уровень сигнала выхода на ЦАП не изменяется.
Подскажите, есть ли еще где-нибудь более подробный пример? Или В каком месте можно более подробно прочитать про установку уровня ЦАП?
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4, стр. 2
Многоканальный телефон:
+7 (495) 785-95-25
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск