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


скорость работы цифрового I/O E440

Вы не вошли.

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

Гомбо
19.03.2010 14:31:12
#1

Гость

скорость работы цифрового I/O E440

Нужно сделать вывод TTL сигнала через цифровые I/O в Labview, используя библиотеку lview. Все работает, но минимальный период - порядка 20 мс.
В чем проблема - в биосе карты, драйвере Windows (Win7), библиотеке Labview?
Каким образом ее преодолеть?

Дополнительная проблема - похоже, что LV_CloseModule не выполняет свои функции; по крайней мере, повторный запуск программы ведет к ошибке.

19.03.2010 14:51:09
#2

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

Re: скорость работы цифрового I/O E440

Это суммарные накладные расходы на одиночную операцию. Быстро можно или из самого модуля или при потоковом выводе как на ЦАП...

Гомбо
19.03.2010 18:24:07
#3

Гость

Re: скорость работы цифрового I/O E440

"потоковый вывод как на ЦАП" -> переделка биос модуля, я правильно понимаю?

19.03.2010 19:30:08
#4

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

Re: скорость работы цифрового I/O E440

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

Павел
21.03.2010 12:56:20
#5

Гость

Re: скорость работы цифрового I/O E440

У меня аналогичная проблема.

Попытался переделать штатный bios. Оптимальным для меня было бы просто дублировать вывод на ЦАП (нужно выводить 12 битное число).

На сколько я понял, число можно брать из регистра RX0. Модифицировал в файле INTTABLE различные обработчики прерываний (и ЦАП и АЦП), добавив команду IO(TTL_OUT)=RX0;
Не помогло :-( На выходах нули...

Я начинающий программист, не подскажете, что я делаю не так?

22.03.2010 10:44:22
#6

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: скорость работы цифрового I/O E440

Павел!
Очень трудно понять что же Вы всё-таки сделали!
Какое число Вы хотите брать из регистра RX0? Какие обработчики прерываний Вы пытались задействовать и для чего? Куда именно Вы добавили операцию IO(TTL_OUT)=RX0?

Павел
22.03.2010 15:03:01
#7

Гость

Re: скорость работы цифрового I/O E440

Мне нужно добиться вывода пилообразной развёртки. Ранее для этого я использовал ЦАП, но сейчас управляемый прибор поменялся, и ему на вход надо подавать не напряжение, а число (от 0 до 4095) через TTL.

Одиночными выводами желаемой скорости (~30 с) добиться нельзя, поэтому решил покопаться в bios.
Если бы удалось перенаправить поток вывода ЦАП на TTL, это было бы оптимальным для меня вариантом, т.к. не пришлось бы менять управляющую программу.

Судя по ADSP-2100 Family User//'s Manual (Includes ADSP-2171, ADSP-2181) текущее  число, выводимое на ЦАП хранится в RX0. Я заменил обработчик  SPORT0 Transmit (на сколько понял, он управляет ЦАП) строкой IO(TTL_OUT)=RX0; SB = 0x1; RTI; NOP; Не помогло. Тогда я модифицировал  SPORT0 Receive. Тоже безрезультатно.
Решил пойти от обратного и модифицировал IRQ2 (АЦП). Эффект тот же.

Скорее всего, решение моей задачи достаточно просто, даже тривиально, но я плохо разбираюсь в assembler//'e, поэтому решил обратиться к Вам.

22.03.2010 16:17:06
#8

Сотрудник "Л Кард"
Здесь с 24.04.2014
Сообщений: 1,495

Re: скорость работы цифрового I/O E440

1. Совершенно не понятно почему Вы решили, что именно в регистре RX0 содержится текущее число, выводимое на ЦАП. В исходниках LBIOS нет ни одного упоминания про этот регистр. Вывод на ЦАП на данном модуле организованно в последовательно виде через посредство SPORT0 DSP. При этом используется режим DMA SPORT0 (autobuffering) без каких то ни было прерываний.
2. Для реализации Вашей задачи необходимо:
   а. в функции Start_Dac_cmd (файл dac.h) запретить autobuffering и разрешить прерывания SPORT0 Transmit.
   б. в обработчике SPORT0 Transmit (файл inttable.dsp) организовать перезапись очередного значения из буфера ЦАП в выходной регистр ТТЛ, что-то типа:
          ena sec_reg;
          ar = dm(i1, m1);
          io(ttl_out) = ar;
          rti;