Меню
+7 (495) 785-95-25
sale@lcard.ru
sale@lcard.ru
Страницы 1
Вот так добавил.
case DIOC_TTL_IN: // for e20-10 specific...
{
DbgPrint("In DIOC_TTL_IN \n");
*((u16 *)ibuf->outBuffer) = GET_DM_WORD_E2010(dev, SEL_DIO_DATA); break;
status = copy_to_user((void*)arg, ibuf, sizeof(IOCTL_BUFFER));
DbgPrint("In DIOC_TTL_IN %x %x \n",*((u16 *)ibuf->outBuffer), status);
} break;И в драйвере ldevusbu.c
case DIOC_TTL_IN: // for e20-10 specific...
{
DbgPrint("In DIOC_TTL_IN \n");
*((u16 *)ibuf->outBuffer) = GET_DM_WORD_E2010(dev, SEL_DIO_DATA); break;
status = copy_to_user((void*)arg, ibuf, sizeof(IOCTL_BUFFER));
>> тут почитать и значение и статус
>> DbgPrint("In DIOC_TTL_IN %x %x \n",*((u16 *)ibuf->outBuffer), status);
>> если DEBUG собрать, то в логах дожно быть видно
} break;У меня сейчас нет рабочей машины с Linux проверить....
[303238.242636] lcard: Set Buffer 8 32768
[303238.242696] lcard: In DIOC_TTL_CFG
[303238.243042] lcard: In DIOC_TTL_OUT
[303238.243448] lcard: In DIOC_TTL_CFG
[303238.243942] lcard: In DIOC_TTL_IN
[303238.244384] lcard: in close Почему-то не выводит строчку добавленную в ldevusbu.c.
в библиотке отладочных printf запихните в вызов IoAsync и в ULONG DaqE2010::InputTTL(PDAQ_PAR sp).
Это где?
Мусор читается.
Добрый день!
E20-10 B, ОС Linux.
Пытаюсь получить информацию с входа DI, АЦП конфигурирую - всё ок, выход DO работает.
Пытаюсь получить DI
ASYNC_PAR sp;
sp.s_Type = L_ASYNC_TTL_CFG;
sp.Mode = 1;
ULONG res = pI->IoAsync(&sp);
sp.s_Type = L_ASYNC_TTL_INP;
sp.Data[0]= 1;
res = pI->IoAsync(&sp);
if ( res != L_SUCCESS ) {В res возвращается 1 (код ошибки L_NOTSUPPORTED).
Е20-10 не поддерживает цифровой вход?
1) Asus P6T6 WS Revolution,
2) К одному,
3) Будем пробовать.
Здравствуйте!
Имею пару Е20-10 ревизии B.
Проблема в следующем, на частоте сбора информации в 5 МГц сбор проходит синхронно, а на частоте 10 МГц происходит рассинхронизация.
Софт под Linux язык С++.
Ведомый АЦП конфигурирую следующим образом:
adcPar.t2.s_Type = L_ADC_PARAM;
adcPar.t2.AutoInit = 1;
adcPar.t2.dRate = 10000.0; // частота опроса каналов АЦП
adcPar.t2.dKadr = 0.0;
adcPar.t2.SynchroType = EXT_START_UP | EXT_CLK_UP;
adcPar.t2.SynchroSrc = EXT_CLK_UP;
adcPar.t2.AdcIMask = SIG_0; // Задаёт режим ввода по каналам
adcPar.t2.NCh = 1;
adcPar.t2.Chn[0] = 0x0;
adcPar.t2.FIFO = 32768;
adcPar.t2.IrqStep = 32768;
adcPar.t2.Pages = 8;
adcPar.t2.IrqEna = 1;
adcPar.t2.AdcEna = 1;
adcPar.t2.StartCnt = 0;
adcPar.t2.StopCnt = 0;
adcPar.t2.DM_Ena = 0;
adcPar.t2.SynchroMode = 0;
adcPar.t2.AdPorog = 0;
pI->FillDAQparameters(&adcPar.t2);
pI->SetParametersStream(&adcPar.t2, &size, (void **)&bufferBegin_ptr, (void**)&syncVar_ptr,L_STREAM_ADC);Ведущий:
adcPar.t2.SynchroType = INT_START_TRANS;
adcPar.t2.SynchroSrc = INT_CLK_TRANS;В чём может быть проблема?
В таком варианте работает.
Приложение test из архива также выдаёт сигнал старт сразу при запуске.
sudo ./test 1 e2010m
Get IDaqLDevice interface
IDaqLDevice get success
Free IUnknown
OpenLDevice Handle3
Slot parameters
Base 0
BaseL 0
Mem 0
MemL 0
Type 27
DSPType 0
Irq 0
Load Bios 0
Plata Test 0
Read FLASH
SerNum 5D775023
BrdName E20-10
Rev B
DspType AVR ATmega162
IsDacPresent
Quartz 7500000
Press any keyДо первого Press any key я уже фиксирую сигнал старт.
Хотя нет, задержка присутствует.
Похоже я нашёл свою ошибку....
pI->FillDAQparameters(&adcPar.t2);
pI->SetParametersStream(&adcPar.t2,.....
вместо t2 я сначала писал t1.... ух блин.
После этого вроде всё заработало как надо!
После сбора данных программа заканчивает свою работу. Потом её перезапускаю уже руками из консоли.
Изучал осциллографом этот момент, ведущий АЦП поднимает сигнал старт во время инициализации, не дожидаясь функции StartLDevice().
Но если закоментировать StartLDevice() и запустить приложение, то АЦП всё равно поднимает сигнал старт, но ничего не собирает. А если перезапустить второй раз с закоментированной функцией StartLDevice(), то ацп уже не поднимает сигнал старт и не собирает данные. После этого я раскоментирую StartLDevice() и первый запуск проходит идеально, сигнал старт поднимается когда выполняется функция StartLDevice(), оба АЦП записывают сигнал синхронно, но при этом второй и последующий запуск уже проходят неудачно, ведущий АЦП поднимает сигнал старт по время инициализации.
Причём заметил особенность. Ведомый АЦП при инициализации мигает светодиодом и когда встаёт на ожидание мигать прекращает, но при этом как только ведущий АЦП начинает мигать светодиодом, в этот момент начинает мигать ведомый АЦП.
Хотя нет, это была просто случайность похоже... Несколько экспериментов показали, что задержка осталась...
Изменил у ведомого в инициализации
adcPar.t2.SynchroType = EXT_START_DOWN_REVB;
на
adcPar.t2.SynchroType = EXT_START_UP;
И задержка стала всего 100 отсчётов АЦП.
Всё-таки новая прошивка плис помогает. Со старой задержка 70000 отсчётов.
Я имел ввиду, что если разорвать связь до запуска приложений.
Те сма режим ведущий ведомый визически работает? если разорвать связь то один модуль будет собирать, а второй стоять?
Если разорвать связь, то ведомый стоит, ведущий собирает.
Может я не правильно конфигурирую АЦП
Ведомый АЦП конфигурирую след. образом:
pI->LoadBios("e2010m");
pI->PlataTest();
adcPar.t2.s_Type = L_ADC_PARAM;
adcPar.t2.AutoInit = 1;
adcPar.t2.dRate = 10000.0; // частота опроса каналов АЦП
adcPar.t2.dKadr = 0.;
adcPar.t2.SynchroType = EXT_START_DOWN_REVB;
adcPar.t2.SynchroSrc = EXT_CLK_UP;
adcPar.t2.AdcIMask = SIG_0 + V30_0;
adcPar.t2.NCh = 1;
adcPar.t2.Chn[0] = 0x0;
adcPar.t2.FIFO = 32768;
adcPar.t2.IrqStep = 32768;
adcPar.t2.Pages = 8;
adcPar.t2.IrqEna = 1;
adcPar.t2.AdcEna = 1;
adcPar.t2.StartCnt = 0;
adcPar.t2.StopCnt = 0;
adcPar.t2.DM_Ena = 0;
adcPar.t2.SynchroMode = 0;
adcPar.t2.AdPorog = 0;
Ведущий АЦП конфигурирую след. образом:
pI->LoadBios("e2010m");
pI->PlataTest();
adcPar.t2.s_Type = L_ADC_PARAM;
adcPar.t2.AutoInit = 1;
adcPar.t2.dRate = 10000.0;
adcPar.t2.dKadr = 0.;
adcPar.t2.SynchroType = INT_START_TRANS;
adcPar.t2.SynchroSrc = INT_CLK_TRANS;
adcPar.t2.AdcIMask = SIG_0 + V30_0;
adcPar.t2.NCh = 1;
adcPar.t2.Chn[0] = 0x0;
adcPar.t2.FIFO = 32768;
adcPar.t2.IrqStep = 32768;
adcPar.t2.Pages = 8;
adcPar.t2.IrqEna = 1;
adcPar.t2.AdcEna = 1;
adcPar.t2.StartCnt = 0;
adcPar.t2.StopCnt = 0;
adcPar.t2.DM_Ena = 0;
adcPar.t2.SynchroMode = 0;
adcPar.t2.AdPorog = 0;
Ситуация не изменилась.
Под windows7 в LGraph2 всё синхронно.
Вчера результаты я переписал из приложения test которое входит в архив с модулями ядра и библиотеками для Linux.
modulesviewer13.exe
выдаёт следующее:
5D775023
Микроконтроллер:
версия 2.1 от Apr 18 2008
Загрузчик:
версия 2.0 от Mar 18 2008
ПЛИС
версия 2.00.06 от 01.09.08
5D358243
Версии аналогичны предыдущему модулю.
Серийные номера:
SerNum 5D775023
Current Firmware Version 0x0
SerNum 5D358243
Current Firmware Version 0x0
В loadBios загружаю файл e2010m размером 40481 байт. (вроде взят с диска от который был в коробке с АЦП)
Страницы 1
Адрес: 117105, Москва, Варшавское шоссе, д. 5, корп. 4
Многоканальный телефон:+7 (495) 785-95-25
Письма и запросы: lcard@lcard.ru
Отдел продаж: sale@lcard.ru
Техническая поддержка: support@lcard.ru
Время работы: с 9-00 до 19-00 мск