![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Синхронизация приборов с помощью TTL логики [D5, Win95/98]
bg8 © (2004-03-11 14:49:00)Доброго времени суток, уважаемые Мастера!
Есть задача: на выходе нужно получить несколько импульсов с некоторым временным интервалом между ними, причем интервал должен измеряться десятками микросекунд. В DOSe это реализованно с помощью отключения ВСЕХ прерываний и прогонкой пустых циклов между изменениями статуса TTL-выходов. Вопрос: можно ли это как-нибудь организовать под винду?!
guron (2004-03-20 04:07:00) [1]Попробуй перед тем как "уговаривать" плату отдать время равноценным потокам
Sleep(0)
GEN++ (2004-03-18 22:00:00) [2]Для спокойной работы с подобным оборудованием из-под любой
Windows лучше всего использовать внешний контроллер - "прокладку"
Например RS2-4-5x - (информация www.fractal.com.ru) Вам подойдет.
bg8 (2004-03-17 12:26:00) [3]С риалтайм - приоритетом процесса все, как ни странно, работает отлично. Всем спасибо.
Cobalt (2004-03-16 23:12:00) [4]Пишите драйвер к ней и задаёте драйверу временную диаграмму.
А системные прерывания, кроме как с помощью оченьгрязного хака, отключить не удастся.
Вы хоть представляете себе, как функционирует операционка?
bg8 (2004-03-16 09:04:00) [5]И вообще, как отключить системные прерывания? Железные прерывания отключить невозможно, я так понимаю, а софтовые? cli не работает =(((
bg8 (2004-03-16 09:02:00) [6]>вот это да...
>А плата PCI-ная?
>Неужто она допускает такие допуски по времени - "десятками >микросекунд"?
Плата PCI
В техсопровождении платы написано, что время уставки всех напряжений не превышает 8-ми мкс.
Тупым тестированием я получил, что минимальное время между выводом сигналов на плату составляет 7.5 микросекунд. Но дело в том, что когда выводишь сложный импульс, во время импульса происходят всякие события винды, и она отбирает управление у программы, поэтому импульсы иногда "расплываются", т.е. время между двумя уставками не 8 мкс, а (8+n*10) мкс, n от 0 до 2-3, иногда 4-5, что, сами понимаете, нежелательно! =( пробовал ассемблерные вставки типа asm; cli //вывод импульса// sti end; - не помогает. Как это сделать? Кто-то говорил про риалтайм-приоритет программы, но как это сделать???
Cobalt (2004-03-13 15:33:00) [7]вот это да...
А плата PCI-ная?
Неужто она допускает такие допуски по времени - "десятками микросекунд"?
bg8 (2004-03-13 12:41:00) [8]Сигнал с платы выводится в цифровом формате, если бы это был ЦАП, то его можно было бы запрограммировать на разные сигналы любой длительности, а так можно одной командой устанавливать либо ноль на выходе, либо 5 вольт...
pasha_golub (2004-03-12 13:22:00) [9]Digitman © (12.03.04 11:17) [7]
Согласен на все сто.
Cobalt (2004-03-12 11:35:00) [10]bg8 © (12.03.04 10:32) [6]
Ну и работай через плату. Её же можно запограммировать на всякие сигналы.
Если это, конечно, не какая-нибудь шибко старая плата...
Digitman (2004-03-12 11:17:00) [11]
> Под ДОС то все уже работает
выдели отдельную машинку, которая будет исполнять роль контроллера для связи с ЭУ .. пусть на этой машинке под ДОС крутится твоя уже работающая и отлаженная управляющая математика
потребуется лишь подключить контроллер к сети и доработать свою математику в части задействования того или иного сет.протокола, чтобы по сети взаимодействовать с Win-хостом, где работает сетевое приложение "с кнопочками, картинками красивыми и т.д", выполняющее роль виз.интерфейса управления удаленным контроллером
иными словами - и волки сыты и овцы целы
bg8 (2004-03-12 10:32:00) [12]Вся эта фигня мне нужна для запуска приборов на экспериментальной установке, запуск осуществляется через плату АЦП, на которой есть TTL входы/выходы. Под ДОС то все уже работает, но дело в том, что вся обработка, типа управлением осциллографами и прочей дребеденью делается под виндой из LabView. Босс хочет чтобы и синхронизация была красивой - там с кнопочками, картинками красивыми и т.д. А под ДОСом им не нравится...
MegaVolt (2004-03-12 10:25:00) [13]Под 98 точно также. Вставляешь ассемблерную вставку и запрещаешь прерывания делаешь что тебе нужно а потом обратно включаешь. Только нафига винда тогда? Она при запрете всех прерываний будет полностью висеть. И все действия от опроса клвавы до отрисовки и обновления экрана придётся делать самому :(
Юра (2004-03-11 17:02:00) [14]И еще, в догонку, у приложения должен быть REALTIME приоритет. Чтобы это приложение не остановило систему, в мометны ожидания колбэка таймера ты должен ожидать какого-либо события, например, оконного сообщения.
2 Vladimir
cli под НТ вызовет исключение (привелегированная инструкция)
Vladimir "Chainik" (2004-03-11 16:56:00) [15]Здесь почти тоже самое, но это чревато нежелательными последствиями, а именно переключению приоритета текущего потока REALTIME и
asm
cli
// твоя функция
sti
end;
но во время работы твоего кода ниодна системная функция будет недоступна (останавливаются системные часы!!!)
Юра (2004-03-11 16:52:00) [16]Под винду практически не возможно. Но можешь попробовать :)
1 - Тебе бужет нужен доступ к порту напрямую (к LPT скорее всего). Для этого заюзай библиотеку DLPortIO (или DLIOPort не помню уже)
2 - Не импользуй компоненты типа TTimer, т.к. они основанны на оконных сообщениях винды. Сам понимаешь, о чем это говорит :)
Почитай в МСДН статью High-Precision Timing Under Windows, Windows NT, & Windows 95.
Для тайминга юзай:
MMRESULT timeSetEvent(
UINT uDelay,
UINT uResolution,
LPTIMECALLBACK lpTimeProc,
DWORD_PTR dwUser,
UINT fuEvent
);
Вообще, для этих целей пользуй либо голый ДОС, либо RTLinux.
Удачи
Digitman (2004-03-11 15:44:00) [17]
> на выходе
на выходе чего ? речь идет об электрофизическом сопряжении неких интерфесов ?
> В DOSe это реализованно с помощью отключения ВСЕХ прерываний
какое отношение DOS и программная логика с использовангием или неиспользованием механизма "прерываний" имеют к электрофизическому сопряжению, если о нем идет речь ?