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


Цифровые IO Е-440

Вы не вошли.

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

Виталий
05.07.2006 05:36:12
#1

Гость

Цифровые IO Е-440

Для синхросбора цифровых каналов вместе с аналоговыми изменил BIOS: в обработчике прерываний от АЦП проверяю текущий канал,
если канал 1, то поверх слова АЦП гружу в буфер сбора байт из TTL_IN и байт из TtlOutAddr.
Вроде сбор наладил, но вот такая петрушка - цифровой выход опережает аналоговый аж на 7 миллисек - проверяю так: завожу цифровой выход на аналоговый канал, запускаю сбор и через несколько мс после старта даю лог. 1 на этот цифровой выход ( из Винды библиотечной командой) - и на диаграмме имею сначала фронт DO, через 7 мс - фронт на AI.
Может такое быть, что новое слово в TtlOutAddr помещается сразу, а реально на TTL_OUT попадает гораздо позже?

05.07.2006 10:56:51
#2

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

Re: Цифровые IO Е-440

Так оно и есть. По исходникам библиотеки легко проверить, что штатная ф. TTL_OUT() сначала передаёт состояния всех выходных линий в переменную по адресу L_TTL_OUT_E440 (это и есть TtlOutAddr для LBIOS) и лишь затем выполняется собственно сама команда вывода на цифровые линии, которая использует эту переменную.
Решить эту проблему можно заведя в LBIOS  новую переменную, например, RealTtlOutAddr. Изменить функцию Put_TTL_cmd (файл TTL.h) на:
    GetPm(AR, TtlOutAddr);
    IO(TTL_OUT) = AR;
    PutRegPm(AR, RealTtlOutAddr);
    JUMP EndOfCommand;
Теперь переменная RealTtlOutAddr будет содержать реально установленные состояния выходных линий. Именно RealTtlOutAddr следует использовать в Вашем обработчике прерываний от АЦП.