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


E140M, Модификация синхронизации

Вы не вошли.

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

Даниил
04.05.2010 08:21:20
#1

Гость

E140M, Модификация синхронизации

Добрый день. В плате E14-140 (rev. //'A//') я изменял прошивку, так что бы запуск АЦП производился при выходе сигнала за пределы определенного "коридора", т.е. вверх и вниз одновременно (середина коридора и "0" АЦП совпадать не обязаны!). Перез запуском регистрации нужно установить ТТЛ (раньше нельзя!).
Теперь пытаюсь сделать то же самое с платой Е14-140М (rev. //'B//'). Насколько я понял из кода прошивки - все (синхронизацию, регистрацию) делает ALTERA, то есть подменой прошивки ничего не решить.
Можете ли Вы подсказать какое-либо решение?

04.05.2010 09:10:07
#2

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E140M, Модификация синхронизации

Даниил, действительно в  Е14-140М  функция аналоговой синхронизации запуска АЦП сделана на аппаратном уровне (в Альтере, и поэтому эта синхронизация стала значительно точнее по времени срабатывания по сравнению с E14-140, где на скорость реакции AVR-а могли повлять прерывания от USB-контроллера).
Как решить эту задачу в  Е14-140М - подумаем.

04.05.2010 09:14:15
#3

Инженер-электронщик
Откуда: "Л Кард"
Здесь с 21.04.2014
Сообщений: 4,597

Re: E140M, Модификация синхронизации

В Вашей постановке задачи, в частности, не хватает временнЫх данных, например:
"Перез запуском регистрации нужно установить ТТЛ (раньше нельзя!)" - временная диаграмма нужна с допусками по времени...
Даниил, какая у Вас потребность в E14-140M c подобной функцией? Если не единичная, то можно подумать и о заказном решении под конкретную задачу...

Даниил
04.05.2010 10:35:56
#4

Гость

Re: E140M, Модификация синхронизации

Потребность - 3-5 в год. В этом году ушла последняя плата старого образца (недавно тут писал про запуск под Win7), купили 4 новых, из них 2 мы уже должны отправлять, а две остаются пока в запасе. Вполне возможно, что до следующего года.
Временные характеристики - желателен разрыв между выставлением ТТЛ и началом регистрации сигналов не более 1 мс.
Е140 в свое время выбрали как самый дешевый вариант, поэтому возможность заказного решения будет определяться его стоимостью.
Альтеру прошить скорее-всего смогу, если будет чем.

04.05.2010 10:41:48
#5

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: E140M, Модификация синхронизации

Можно сделать программную синхронизацию, т.е. дать программный пуск АЦП и написать код, который будет вычитывать и отбрасывать данные до выполнения заданного условия, а потом начнет в обычном режиме выдавать их в компьютер.
Неточность по времени будет выше, чем у ПЛИС, но примерно того же порядка, что у старой E14-140, где примерно так аналоговая синхронизация и сделана.

Сразу скажу, что при реализации такого алгоритма придется подумать, как организовать ввод данных из порта USART. Можно попробовать сделать маленькие буферы DMA и проверять условие в прерывании; тут возможна задержка реакции на один-два буфера. Можно попробовать не включать DMA, а читать из порта программно (как в старом модуле на AVR), если хватит скорости.
При всех этих манипуляциях нужно обеспечивать поступление на ПЛИС слов управления аналоговым трактом в нужной последовательности.

Если же допустим разброс в целый блок DMA, тогда реализация существенно проще.

04.05.2010 10:51:44
#6

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: E140M, Модификация синхронизации

Кстати, возможно и чисто аппаратное решение - какие-нибудь аналоговые компараторы, выдающие событие на вход INT. Останется только придумать, как добавить установку TTL, при допусках порядка 1мс есть простор для маневра. (Можно обнаруживать пуск ПЛИС по поступлению данных или по изменению счетчиков DMA, можно и напрямую читать ножку INT или даже сделать он нее прервыание, она заведена на процессор).
Кстати, сколько выходов TTL используется?

Даниил
04.05.2010 11:36:33
#7

Гость

Re: E140M, Модификация синхронизации

Используется  выходов.
Пока не разобрался, как обнаруживать поступление данных и где они вообще считываются для передачи на компьютер.
А так - первый вариант был бы наверное вполне подходящим.

Даниил
04.05.2010 11:36:59
#8

Гость

Re: E140M, Модификация синхронизации

Используется 7 выходов.

04.05.2010 16:07:31
#9

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: E140M, Модификация синхронизации

Читайте исходники прошивки, прежде всего adc.c
И, конечно, низкоуровневое описание (E14-140_low_level.pdf).

Просто выбрасывать данные можно, выборочно пропуская WriteUSB() в функции ADC_Worker().
Что-то типа
if (f_BufState[f_ReadIdx] == BS_READY)
    {
    if (!start_flag)
        { пройтись по массиву, проверить условие, если выполнилось, то start_flag = 1
        }
    if (!start_flag || (USB_IN_FREE() >= ADC_BLK_SIZE_B))
        {
        if (start_flag)
            WriteUSB((void*)g_Buf.ADC.asRing[f_ReadIdx], ADC_BLK_SIZE_B);
                        f_BufState[f_ReadIdx] = BS_EMPTY;
                        f_ReadIdx = RING_NEXT(f_ReadIdx, ADC_NBLOCKS);
        }

Ну а если надо серьезнее, то придется писать отдельную хитрую процедуру (кое-какие идеи см. выше) на основе ADC_Start(), ADC_StartSingleChannel() и, может быть, придется модифицировать обработчик прерывания SSC_Interrupt_Handler().

Даниил
06.05.2010 07:29:39
#10

Гость

Re: E140M, Модификация синхронизации

Я правильно понял, что в одном блоке DMA лежит 32 отсчета АЦП, т.е. в моем случае (16 каналов) - 2 кадра АЦП?
Отставание в 2 кадра вполне допустимо.
Еще вопрос: в комментариях ADC_Worker написано    "Не обращаться к таймеру, CPLD и EEPROM !!! "
т.е. при наступлении условия TTL здесь выставить я не смогу?

06.05.2010 10:38:38
#11

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: E140M, Модификация синхронизации

Да, в блоке 64 байта = 32 отсчета. Вообще говоря,  это можно менять в adc.h, но разумно (блок задает интервал следования прерываний от DMA, а также связан с логикой блочной передачи в USB).

>в комментариях ADC_Worker написано /"Не обращаться к таймеру, CPLD и EEPROM
...Потому что эта функция дополнительно вызывается из-под команды однократного одноканального
ввода (в USBCmd.c)

Это ограничение, насколько я помню, только из-за таймера, отсчитывающего таймауты. Он сделан только один и конфликтует.
Ограничение убирается, если отключить cb_USB_ADC_Single(), нужный только для однократного одноканального ввода (ADC_SAMPLE() в lusbapi), либо честно сделать второй счетчик таймаутов, либо сделать как-то, чтобы таймаут наследовался от функции верхнего уровня.

Даниил
06.05.2010 13:39:21
#12

Гость

Re: E140M, Модификация синхронизации

Как я понимаю, они конфликтовать будут, только если использовать их одновременно.
При последовательном использовании конфликта быть не должно.

Спасибо за помощь, все заработало, осталось тестировать и тестировать.

Подскажите пожалуйста еще, в чем собираете библиотеку lusbapi, Borland C++ Builder 5 подойдет?
Возникает впечатление, что биос в Е440 из файла не грузится, хотелось бы разобраться.

07.05.2010 11:23:04
#13

Сотрудник "Л Кард"
Здесь с 18.04.2014
Сообщений: 810

Re: E140M, Модификация синхронизации

>Как я понимаю, они конфликтовать будут, только если использовать их одновременно.

Ну да, просто я предпочитаю не оставлять в коде заведомо некорректных мест, т.е., образно говоря, если цепь изменена так, что нажатие на некую кнопку вызовет короткое замыкание, то лучше не вешать табличку <<Не нажимать, опасно!>>, а отсоединить эту кнопку от цепи smile