Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
ВнизСинхронизация приборов с помощью TTL логики Найти похожие ветки
← →
bg8 © (2004-03-11 14:49) [0]Доброго времени суток, уважаемые Мастера!
Есть задача: на выходе нужно получить несколько импульсов с некоторым временным интервалом между ними, причем интервал должен измеряться десятками микросекунд. В DOSe это реализованно с помощью отключения ВСЕХ прерываний и прогонкой пустых циклов между изменениями статуса TTL-выходов. Вопрос: можно ли это как-нибудь организовать под винду?!
← →
bg8 © (2004-03-11 14:49) [0]Доброго времени суток, уважаемые Мастера!
Есть задача: на выходе нужно получить несколько импульсов с некоторым временным интервалом между ними, причем интервал должен измеряться десятками микросекунд. В DOSe это реализованно с помощью отключения ВСЕХ прерываний и прогонкой пустых циклов между изменениями статуса TTL-выходов. Вопрос: можно ли это как-нибудь организовать под винду?!
← →
Digitman © (2004-03-11 15:44) [1]
> на выходе
на выходе чего ? речь идет об электрофизическом сопряжении неких интерфесов ?
> В DOSe это реализованно с помощью отключения ВСЕХ прерываний
какое отношение DOS и программная логика с использовангием или неиспользованием механизма "прерываний" имеют к электрофизическому сопряжению, если о нем идет речь ?
← →
Digitman © (2004-03-11 15:44) [1]
> на выходе
на выходе чего ? речь идет об электрофизическом сопряжении неких интерфесов ?
> В DOSe это реализованно с помощью отключения ВСЕХ прерываний
какое отношение DOS и программная логика с использовангием или неиспользованием механизма "прерываний" имеют к электрофизическому сопряжению, если о нем идет речь ?
← →
Юра (2004-03-11 16:52) [2]Под винду практически не возможно. Но можешь попробовать :)
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.
Удачи
← →
Юра (2004-03-11 16:52) [2]Под винду практически не возможно. Но можешь попробовать :)
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.
Удачи
← →
Vladimir "Chainik" © (2004-03-11 16:56) [3]Здесь почти тоже самое, но это чревато нежелательными последствиями, а именно переключению приоритета текущего потока REALTIME и
asm
cli
// твоя функция
sti
end;
но во время работы твоего кода ниодна системная функция будет недоступна (останавливаются системные часы!!!)
← →
Vladimir "Chainik" © (2004-03-11 16:56) [3]Здесь почти тоже самое, но это чревато нежелательными последствиями, а именно переключению приоритета текущего потока REALTIME и
asm
cli
// твоя функция
sti
end;
но во время работы твоего кода ниодна системная функция будет недоступна (останавливаются системные часы!!!)
← →
Юра (2004-03-11 17:02) [4]И еще, в догонку, у приложения должен быть REALTIME приоритет. Чтобы это приложение не остановило систему, в мометны ожидания колбэка таймера ты должен ожидать какого-либо события, например, оконного сообщения.
2 Vladimir
cli под НТ вызовет исключение (привелегированная инструкция)
← →
Юра (2004-03-11 17:02) [4]И еще, в догонку, у приложения должен быть REALTIME приоритет. Чтобы это приложение не остановило систему, в мометны ожидания колбэка таймера ты должен ожидать какого-либо события, например, оконного сообщения.
2 Vladimir
cli под НТ вызовет исключение (привелегированная инструкция)
← →
MegaVolt © (2004-03-12 10:25) [5]Под 98 точно также. Вставляешь ассемблерную вставку и запрещаешь прерывания делаешь что тебе нужно а потом обратно включаешь. Только нафига винда тогда? Она при запрете всех прерываний будет полностью висеть. И все действия от опроса клвавы до отрисовки и обновления экрана придётся делать самому :(
← →
MegaVolt © (2004-03-12 10:25) [5]Под 98 точно также. Вставляешь ассемблерную вставку и запрещаешь прерывания делаешь что тебе нужно а потом обратно включаешь. Только нафига винда тогда? Она при запрете всех прерываний будет полностью висеть. И все действия от опроса клвавы до отрисовки и обновления экрана придётся делать самому :(
← →
bg8 © (2004-03-12 10:32) [6]Вся эта фигня мне нужна для запуска приборов на экспериментальной установке, запуск осуществляется через плату АЦП, на которой есть TTL входы/выходы. Под ДОС то все уже работает, но дело в том, что вся обработка, типа управлением осциллографами и прочей дребеденью делается под виндой из LabView. Босс хочет чтобы и синхронизация была красивой - там с кнопочками, картинками красивыми и т.д. А под ДОСом им не нравится...
← →
bg8 © (2004-03-12 10:32) [6]Вся эта фигня мне нужна для запуска приборов на экспериментальной установке, запуск осуществляется через плату АЦП, на которой есть TTL входы/выходы. Под ДОС то все уже работает, но дело в том, что вся обработка, типа управлением осциллографами и прочей дребеденью делается под виндой из LabView. Босс хочет чтобы и синхронизация была красивой - там с кнопочками, картинками красивыми и т.д. А под ДОСом им не нравится...
← →
Digitman © (2004-03-12 11:17) [7]
> Под ДОС то все уже работает
выдели отдельную машинку, которая будет исполнять роль контроллера для связи с ЭУ .. пусть на этой машинке под ДОС крутится твоя уже работающая и отлаженная управляющая математика
потребуется лишь подключить контроллер к сети и доработать свою математику в части задействования того или иного сет.протокола, чтобы по сети взаимодействовать с Win-хостом, где работает сетевое приложение "с кнопочками, картинками красивыми и т.д", выполняющее роль виз.интерфейса управления удаленным контроллером
иными словами - и волки сыты и овцы целы
← →
Digitman © (2004-03-12 11:17) [7]
> Под ДОС то все уже работает
выдели отдельную машинку, которая будет исполнять роль контроллера для связи с ЭУ .. пусть на этой машинке под ДОС крутится твоя уже работающая и отлаженная управляющая математика
потребуется лишь подключить контроллер к сети и доработать свою математику в части задействования того или иного сет.протокола, чтобы по сети взаимодействовать с Win-хостом, где работает сетевое приложение "с кнопочками, картинками красивыми и т.д", выполняющее роль виз.интерфейса управления удаленным контроллером
иными словами - и волки сыты и овцы целы
← →
Cobalt © (2004-03-12 11:35) [8]bg8 © (12.03.04 10:32) [6]
Ну и работай через плату. Её же можно запограммировать на всякие сигналы.
Если это, конечно, не какая-нибудь шибко старая плата...
← →
Cobalt © (2004-03-12 11:35) [8]bg8 © (12.03.04 10:32) [6]
Ну и работай через плату. Её же можно запограммировать на всякие сигналы.
Если это, конечно, не какая-нибудь шибко старая плата...
← →
pasha_golub © (2004-03-12 13:22) [9]Digitman © (12.03.04 11:17) [7]
Согласен на все сто.
← →
pasha_golub © (2004-03-12 13:22) [9]Digitman © (12.03.04 11:17) [7]
Согласен на все сто.
← →
bg8 © (2004-03-13 12:41) [10]Сигнал с платы выводится в цифровом формате, если бы это был ЦАП, то его можно было бы запрограммировать на разные сигналы любой длительности, а так можно одной командой устанавливать либо ноль на выходе, либо 5 вольт...
← →
bg8 © (2004-03-13 12:41) [10]Сигнал с платы выводится в цифровом формате, если бы это был ЦАП, то его можно было бы запрограммировать на разные сигналы любой длительности, а так можно одной командой устанавливать либо ноль на выходе, либо 5 вольт...
← →
Cobalt © (2004-03-13 15:33) [11]вот это да...
А плата PCI-ная?
Неужто она допускает такие допуски по времени - "десятками микросекунд"?
← →
Cobalt © (2004-03-13 15:33) [11]вот это да...
А плата PCI-ная?
Неужто она допускает такие допуски по времени - "десятками микросекунд"?
← →
bg8 © (2004-03-16 09:02) [12]>вот это да...
>А плата PCI-ная?
>Неужто она допускает такие допуски по времени - "десятками >микросекунд"?
Плата PCI
В техсопровождении платы написано, что время уставки всех напряжений не превышает 8-ми мкс.
Тупым тестированием я получил, что минимальное время между выводом сигналов на плату составляет 7.5 микросекунд. Но дело в том, что когда выводишь сложный импульс, во время импульса происходят всякие события винды, и она отбирает управление у программы, поэтому импульсы иногда "расплываются", т.е. время между двумя уставками не 8 мкс, а (8+n*10) мкс, n от 0 до 2-3, иногда 4-5, что, сами понимаете, нежелательно! =( пробовал ассемблерные вставки типа asm; cli //вывод импульса// sti end; - не помогает. Как это сделать? Кто-то говорил про риалтайм-приоритет программы, но как это сделать???
← →
bg8 © (2004-03-16 09:02) [12]>вот это да...
>А плата PCI-ная?
>Неужто она допускает такие допуски по времени - "десятками >микросекунд"?
Плата PCI
В техсопровождении платы написано, что время уставки всех напряжений не превышает 8-ми мкс.
Тупым тестированием я получил, что минимальное время между выводом сигналов на плату составляет 7.5 микросекунд. Но дело в том, что когда выводишь сложный импульс, во время импульса происходят всякие события винды, и она отбирает управление у программы, поэтому импульсы иногда "расплываются", т.е. время между двумя уставками не 8 мкс, а (8+n*10) мкс, n от 0 до 2-3, иногда 4-5, что, сами понимаете, нежелательно! =( пробовал ассемблерные вставки типа asm; cli //вывод импульса// sti end; - не помогает. Как это сделать? Кто-то говорил про риалтайм-приоритет программы, но как это сделать???
← →
bg8 © (2004-03-16 09:04) [13]И вообще, как отключить системные прерывания? Железные прерывания отключить невозможно, я так понимаю, а софтовые? cli не работает =(((
← →
bg8 © (2004-03-16 09:04) [13]И вообще, как отключить системные прерывания? Железные прерывания отключить невозможно, я так понимаю, а софтовые? cli не работает =(((
← →
Cobalt © (2004-03-16 23:12) [14]Пишите драйвер к ней и задаёте драйверу временную диаграмму.
А системные прерывания, кроме как с помощью очень грязного хака, отключить не удастся.
Вы хоть представляете себе, как функционирует операционка?
← →
Cobalt © (2004-03-16 23:12) [14]Пишите драйвер к ней и задаёте драйверу временную диаграмму.
А системные прерывания, кроме как с помощью очень грязного хака, отключить не удастся.
Вы хоть представляете себе, как функционирует операционка?
← →
bg8 © (2004-03-17 12:26) [15]С риалтайм - приоритетом процесса все, как ни странно, работает отлично. Всем спасибо.
← →
bg8 © (2004-03-17 12:26) [15]С риалтайм - приоритетом процесса все, как ни странно, работает отлично. Всем спасибо.
← →
GEN++ © (2004-03-18 22:00) [16]Для спокойной работы с подобным оборудованием из-под любой
Windows лучше всего использовать внешний контроллер - "прокладку"
Например RS2-4-5x - (информация www.fractal.com.ru) Вам подойдет.
← →
GEN++ © (2004-03-18 22:00) [16]Для спокойной работы с подобным оборудованием из-под любой
Windows лучше всего использовать внешний контроллер - "прокладку"
Например RS2-4-5x - (информация www.fractal.com.ru) Вам подойдет.
← →
guron (2004-03-20 04:07) [17]Попробуй перед тем как "уговаривать" плату отдать время равноценным потокам
Sleep(0)
← →
guron (2004-03-20 04:07) [17]Попробуй перед тем как "уговаривать" плату отдать время равноценным потокам
Sleep(0)
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2004.04.11;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.045 c