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


E14-140 и ЛИНУКС!!!

Вы не вошли.

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

Sergo
25.06.2008 16:42:53
#1

Гость

E14-140 и ЛИНУКС!!!

Добрый день!

1.
Пробовал запустить E14-140 под управлением lcomp_linux.tgz ALPHA 7. Все скомпилировалось отлично. Скрипт start загрузил соответствующие *.ko драйвера. Пробовал проверить работу test/*test - не работает из-за отсутствия файла библиотеки:

error open dll!! /home/poul/dio/test/liblcomp.so: cannot open shared object file: No such file or directory
Segmentation fault (core dumped)

ВОПРОС-1: Где взять lcomp.dll для linux чтобы воспользоваться примерами и LComp руководством программиста и является ли liblcomp.so из test/test.cpp его аналогом

Sergo
25.06.2008 17:00:46
#2

Гость

Re: E14-140 и ЛИНУКС!!!

С примером test.cpp для lcomp_linux.tgz ALPHA 7 справился:
1) сделал make для каталога lcomp - появился liblcomp.so 
2) в строке 197 из test.cpp изменил путь к библиотеке

handle = dlopen("../lcomp/liblcomp.so",RTLD_LAZY);

Sergo
25.06.2008 17:09:28
#3

Гость

Re: E14-140 и ЛИНУКС!!!

В продолжение вопроса. Подскажите пожалуйста является ли liblcomp.so полным аналогом lcomp.dll из   
Windows Можно ли несложную программку на писанную под Windows с использованием lcomp-интерфейса портировать под Линукс?

26.06.2008 09:37:54
#4

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

Re: E14-140 и ЛИНУКС!!!

Является, есть тонкости только в работе по событиям - это различается. А так можно сравнить ведь...примеры практически идентичны...

Sergo
12.08.2008 09:45:54
#5

Гость

Re: E14-140 и ЛИНУКС!!!

Добрый день!

Подаю на первый дифференциальный канал синусоиду частотой 440 Гц,

adcPar.t1.dRate = 4.0;
adcPar.t1.NCh = 1;
adcPar.t1.Chn[0] = 0x0;
adcPar.t1.FIFO = 4096;
adcPar.t1.IrqStep = 4096;
adcPar.t1.Pages = 1;
adcPar.t1.IrqEna = 1;
adcPar.t1.AdcEna = 1;
....
Далее внутри старт стопа вывожу буфер в stdout:

for (int i=0; i<=size; i++)
cout << p[i] << "---" << pp[i] << endl;

Пытаюсь полученный в результате перенаправления в файл буфер вывести на экран и
увидеть синус, в результате даже отдаленно не напоминает форму син. Пытался проанализировать файл данных в зависимости от частоты АЦП (увеличивал значение до 20 кГц)- там много повторяющихся отсчетов т.е. такое ощущение что какие то кусочки син все таки есть а все остальное шум связанный с тем что надо контролировать заполнение буфера

1) Скажите пожалуйста как вытащить из отсчетов значения синуса? Связано ли это с контролем переменной синхронизации?

2) Как правильно контролировать переменную синхронизации чтобы получать корректные отсчеты син?

Когда же на вход

Sergo
12.08.2008 09:50:19
#6

Гость

Re: E14-140 и ЛИНУКС!!!

Пробовал проверить работоспособность - подключал на вход пальчиковую батарейку - значения отсчетов примерно одинаковое с точностью до нескольких отсчетов Убедился что железка рабочая

12.08.2008 10:28:27
#7

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

Re: E14-140 и ЛИНУКС!!!

а пример? он должен в файл сохранять и был рабочим...

Sergo
12.08.2008 12:04:46
#8

Гость

Re: E14-140 и ЛИНУКС!!!

Пример test рабочий все сохраняет :=)

Только откровенно говоря я его не совсем понимаю
smile


Как сделать чтобы файл был текстовым а не двоичным  (имею в виду текстовые значения данных) - пробовал менять режим открытия файла -
fopen("test.dat","wt") но что-то не помагает По идее надо что-то изменить в fwrite - подскажите пожалуйста

12.08.2008 14:14:13
#9

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

Re: E14-140 и ЛИНУКС!!!

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

Sergo
14.08.2008 13:57:00
#10

Гость

Re: E14-140 и ЛИНУКС!!!

Добрый день Павел!
Пытаюсь проверить как Вы и советовали пример test.cpp

На 1-й диф вход E14-140 подаю синус частотой 440 Гц Запускаю ./test 0 E440.bio Двоичный файл перезаписываю в текстовый В результате та же ситуация - есть очень небольшой разброс в отсчетах в пределах десяти двадцати значений для син а вот интересно что если подключать батарейку то значения отсчетов меняются в пределах двух трех значений, также АЦП реагирует на изменение амплитуды синуса но эффект остается тот-же

Начинаю грешить на Debian Линукс
ядро 2.6.20-16-generic
gcc version 4.1.2

Не подскажете в чем дело?

14.08.2008 16:14:19
#11

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

Re: E14-140 и ЛИНУКС!!!

в примере там вроде 4 канала, ну и возможно подключаете как-то не так....

Arcady
27.08.2008 11:37:42
#12

Гость

Re: E14-140 и ЛИНУКС!!!

Ядро 2.6.23.12. Полёт нормальный.
Спасибо. Дрова сразу встали и АЦП ацепует без проблем.
Было бы классно оснастить "test" полновесными комментариями с максимальными подробностями. Тогда пример был бы высококлассный и достаточно бы было мануала по железу, чтобы сразу приступить к работе с АЦП.

Arcady
29.08.2008 10:34:07
#13

Гость

Re: E14-140 и ЛИНУКС!!!

Обнаружил проблему синхронизации по уровню.
Из "test" сделал простую прогу под себя.
Синусоида отлично цифруется, но заставить начать
оцифровку по уровню не удалось никак. Порог вообще ни на что ни влияет. :-(
Вот параметры, которые вводятся в АЦП:
...
  adcPar.t1.s_Type = L_ADC_PARAM;
  adcPar.t1.AutoInit = 1;
  adcPar.t1.dRate = 100.0;
  adcPar.t1.dKadr = 0;
  adcPar.t1.dScale = 0;
  adcPar.t1.SynchroType = 3;
  adcPar.t1.SynchroSensitivity = 1;
  adcPar.t1.SynchroMode = 1;
  adcPar.t1.AdChannel = 0;
  adcPar.t1.AdPorog = 0;
  adcPar.t1.NCh = 1;
  adcPar.t1.Chn[0] = 0x0;
  adcPar.t1.FIFO = IrqStep;
  adcPar.t1.IrqStep = IrqStep;
  adcPar.t1.Pages = pages;
  adcPar.t1.FIFO = 4096;
  adcPar.t1.IrqStep = 4096;
  adcPar.t1.Pages = 32;
  adcPar.t1.IrqEna = 1;
  adcPar.t1.AdcEna = 1;
  pI->FillDAQparameters(&adcPar.t1);
...

Подскажите, что не так делаю.

29.08.2008 10:57:00
#14

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

Re: E14-140 и ЛИНУКС!!!

По идее все правильно,только подключение канала 0 диф. задано... а как в жизни?

Arcady
29.08.2008 11:05:00
#15

Гость

Re: E14-140 и ЛИНУКС!!!

В жизни именно дифференциальный вход.
Наводок нет. Сигнал симметричный и чистенький на протяжении всего оцифрованного массива.
Амплитуда - 1.5V. Частота - 1Кгц.
Цифрую на 100Кгц.

Но начало оцифрованной синусоиды - где придётся. :-(
Очень хочется синхронизации.

29.08.2008 11:32:28
#16

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

Re: E14-140 и ЛИНУКС!!!

а L-Graph под виндой как себя ведет с такими же установками?

Arcady
29.08.2008 11:38:22
#17

Гость

Re: E14-140 и ЛИНУКС!!!

Пока не проверял.
До Винды тяжело дотягиваться. :-)

В драйвере для E14-140 не совсем въехал в настройку:
st = dev->adcPar.t3.SynchroType & 0x3;
extf = dev->adcPar.t3.SynchroType & 0xC0;
if(st == 1) st = 2; else if(st==2) st=1;
sens =0;
mode =0;
sens = dev->adcPar.t3.SynchroSensitivity ? 2:0;
mode = dev->adcPar.t3.SynchroMode ? 1:0;

Arcady
29.08.2008 11:40:22
#18

Гость

Re: E14-140 и ЛИНУКС!!!

Забыл ещё пару строчек из драйвера:

      st = st + extf + sens + mode;
      ap.t1.SynchroType = (u8)st;

Arcady
29.08.2008 12:04:03
#19

Гость

Re: E14-140 и ЛИНУКС!!!

Проверил в Винде с помощью L-Graph.

Синхронизуется.

Хочу, чтобы и в Линуксе работало. :-)

29.08.2008 13:22:23
#20

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

Re: E14-140 и ЛИНУКС!!!

st = st + extf + sens + mode;

попробовать заменить на

if(st==3) st += (sens + mode);
st += extf;

так в винде у меня написано...возможно в этом дело....

29.08.2008 13:28:31
#21

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

Re: E14-140 и ЛИНУКС!!!

веренее даже так:

st = dev->adcPar.t3.SynchroType & 0x3;
extf = dev->adcPar.t3.SynchroType & 0xC0;
if(st == 1) st = 2; else if(st==2) st=1;
sens = dev->adcPar.t3.SynchroSensitivity ? 2:0;
mode = dev->adcPar.t3.SynchroMode ? 1:0;
     
if(st==3) st+=(sens+mode);
st += extf;

ap.t1.SynchroType = (u8)st;
ap.t1.AdChannel = (u8)MAKE_E140CHAN(dev->adcPar.t3.AdChannel);
ap.t1.AdPorog = dev->adcPar.t3.AdPorog;
     
COMMAND_E140(dev, V_STOP_ADC_E140);

PUT_DATA_MEMORY_E140(dev, (u16 *)&ap.bi, 68, L_ADC_PARS_BASE_E140);

Arcady
01.09.2008 06:45:30
#22

Гость

Re: E14-140 и ЛИНУКС!!!

Немного поизучал ещё. Драйвер для E140 нерабочий.
Оказалось, что и параметр частоты тоже игнорирует. Цифрует всё на 100Кгц. Синхронизация не работает.

Поставил плату E-440. На первый взгляд драйвер работает. Частота оцифровки управляется, синхронизация по аналоговому уровню работает.

01.09.2008 09:29:22
#23

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

Re: E14-140 и ЛИНУКС!!!

посмотрим...

01.09.2008 12:30:10
#24

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

Re: E14-140 и ЛИНУКС!!!

глюк нашел.
в файле ldevusbu.c

// fill up SLOT_PAR for client
   memset(&dev->sl,0,sizeof(SLOT_PAR));
   switch(id->idProduct)
   {
      case 0x0440: {dev->Type = E440; dev->sl.DSPType = 2185;} break;
      case 0x2010: {dev->Type = E2010; dev->sl.DSPType = 0;} break;
      case 0x0140: {dev->Type = E140; dev->sl.DSPType = 0; } break;
      case 0x0154: {dev->Type = E154; dev->sl.DSPType = 0; }
   }

надо так. Там break  пропущен случайно оказался и 140 опознавалась как 154....

Arcady
01.09.2008 23:53:35
#25

Гость

Re: E14-140 и ЛИНУКС!!!

Да. Это оно и было. Спасибо.
Для E140 заработало. По крайней мере проверил
настройку частоты, задержки кадра, синхронизацию по аналоговому уровню.