Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 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.075 c
14-1081881570
panov
2004-04-13 22:39
2004.05.09
Где найти дополнительное время?


6-1079679862
slgeo
2004-03-19 10:04
2004.05.09
Не возвращается количество полученных байт в блокирующисокетах???


1-1082562444
ламеррр
2004-04-21 19:47
2004.05.09
как отменить with


1-1082371273
Oleon
2004-04-19 14:41
2004.05.09
Ошибки при сохранении в Excel.


6-1079361060
Павел
2004-03-15 17:31
2004.05.09
Сервер удаленного доступа





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский