Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.04.11;
Скачать: CL | DM;

Вниз

Синхронизация приборов с помощью TTL логики   Найти похожие ветки 

 
bg8 ©   (2004-03-11 14:49) [0]

Доброго времени суток, уважаемые Мастера!
Есть задача: на выходе нужно получить несколько импульсов с некоторым временным интервалом между ними, причем интервал должен измеряться десятками микросекунд. В DOSe это реализованно с помощью отключения ВСЕХ прерываний и прогонкой пустых циклов между изменениями статуса TTL-выходов. Вопрос: можно ли это как-нибудь организовать под винду?!


 
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.
Удачи


 
Vladimir "Chainik" ©   (2004-03-11 16:56) [3]

Здесь почти тоже самое, но это чревато нежелательными последствиями, а именно переключению приоритета текущего потока  REALTIME и
asm
 cli
// твоя функция

 sti
end;
но во время работы твоего кода ниодна системная функция будет недоступна (останавливаются системные часы!!!)


 
Юра   (2004-03-11 17:02) [4]

И еще, в догонку, у приложения должен быть REALTIME приоритет. Чтобы это приложение не остановило систему, в мометны ожидания колбэка таймера ты должен ожидать какого-либо события, например, оконного сообщения.

2 Vladimir
cli под НТ вызовет исключение (привелегированная инструкция)


 
MegaVolt ©   (2004-03-12 10:25) [5]

Под 98 точно также. Вставляешь ассемблерную вставку и запрещаешь прерывания делаешь что тебе нужно а потом обратно включаешь. Только нафига винда тогда? Она при запрете всех прерываний будет полностью висеть. И все действия от опроса клвавы до отрисовки и обновления экрана придётся делать самому :(


 
bg8 ©   (2004-03-12 10:32) [6]

Вся эта фигня мне нужна для запуска приборов на экспериментальной установке, запуск осуществляется через плату АЦП, на которой есть TTL входы/выходы. Под ДОС то все уже работает, но дело в том, что вся обработка, типа управлением осциллографами и прочей дребеденью делается под виндой из LabView. Босс хочет чтобы и синхронизация была красивой - там с кнопочками, картинками красивыми и т.д. А под ДОСом им не нравится...


 
Digitman ©   (2004-03-12 11:17) [7]


> Под ДОС то все уже работает


выдели отдельную машинку, которая будет исполнять роль контроллера для связи с ЭУ .. пусть на этой машинке под ДОС крутится твоя уже работающая и отлаженная управляющая математика

потребуется лишь подключить контроллер к сети и доработать свою математику в части задействования того или иного сет.протокола, чтобы по сети взаимодействовать с Win-хостом, где работает сетевое приложение "с кнопочками, картинками красивыми и т.д", выполняющее роль виз.интерфейса управления удаленным контроллером

иными словами - и волки сыты и овцы целы


 
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]
Согласен на все сто.


 
bg8 ©   (2004-03-13 12:41) [10]

Сигнал с платы выводится в цифровом формате, если бы это был ЦАП, то его можно было бы запрограммировать на разные сигналы любой  длительности, а так можно одной командой устанавливать либо ноль на выходе, либо 5 вольт...


 
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:04) [13]

И вообще, как отключить системные прерывания? Железные прерывания отключить невозможно, я так понимаю, а софтовые? cli не работает =(((


 
Cobalt ©   (2004-03-16 23:12) [14]

Пишите драйвер к ней и задаёте драйверу временную диаграмму.
А системные прерывания, кроме как с помощью очень грязного хака, отключить не удастся.
Вы хоть представляете себе, как функционирует операционка?


 
bg8 ©   (2004-03-17 12:26) [15]

С риалтайм - приоритетом процесса все, как ни странно, работает отлично. Всем спасибо.


 
GEN++ ©   (2004-03-18 22:00) [16]

Для спокойной работы с подобным оборудованием из-под любой
Windows лучше всего использовать внешний контроллер - "прокладку"
Например RS2-4-5x - (информация www.fractal.com.ru) Вам подойдет.


 
guron   (2004-03-20 04:07) [17]

Попробуй перед тем как "уговаривать" плату отдать время равноценным потокам
Sleep(0)



Страницы: 1 вся ветка

Текущий архив: 2004.04.11;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.033 c
14-1082578618
Yanis
2004-04-22 00:16
2004.04.11
Что не так в этой странице?


1-1079944301
LexaVV
2004-03-22 11:31
2004.04.11
Много Query


14-1081918872
New_user
2004-04-14 09:01
2004.04.11
Изменение работы кнопки "Пуск"


3-1079429812
-kiril
2004-03-16 12:36
2004.04.11
Новое поле в Interbase


3-1078984955
IBNovice
2004-03-11 09:02
2004.04.11
Error