![]() |
|
Модераторы: feodorv, GremlinProg, xvr, Fixin |
![]()
|
|
| AndAnd |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
Здравствуйте, участники форума! Знаю, что данная тема поднималась не раз, проглядел поиск, но подходящей информации не нашел или не смог ее правильно применить. В общем я хотел бы подавать импульсы с определенным периодом на осциллограф (на нем должны быть четкие ступеньки видны), так вот вопрос как в C++ (DOS) или Builder или Delphi сделать правильное обращение к порту и подавать значения на него. Видел много сорсов, но в них используется какой-то драйвер,кода которого нигде нет, через который на LPT подаются эти значения и вообще инициализируется порт. Может кто может объяснить как, что и зачем должно идти при работе с портом. Есть простенькая программа из книги, но она не пашет,т.е. никаких импульсов не выдает (программы, которые через драйвер проверял, все работает). Вот собственно код:
Спасибо. Очень хотел бы услышать ваше мнение на данный вопрос. |
|||
|
||||
| cppforever |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.8.2006 Репутация: нет Всего: нет |
Уточни, пожалуйста, какую ОС используешь. Дело в том, что Win NT, 2000, XP не разрешает работать напрямую (с помощью функций outp() и inp()) с портами, как это раньше делалось в DOS. В Win 98/95 пример должен работать. Причем не стоит забывать, что у LPT порта есть три регистра (Data, Status, Control). Мне когда надо было общаться с модулем АЦП через LPT я использовал библиотеку WinIO которая позволяет обходить защиту ОС и обращаться к порту напрямую...
|
|||
|
||||
| AndAnd |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
Использую WinXP. На других не проверял. Но мне бы желательно именно на последних версиях ОС. А что там за защита в NT и как ее обойти своими средствами (не используя драйвера скаченые с инета), можешь дать иформацию, хоть какую-нибудь, или примерчик.
У меня используется один из регистров (с 2 по 9) и земля, т.е. два контакта мы подсоединяем к прибору. |
||||
|
|||||
| AndAnd |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 82 Регистрация: 22.7.2006 Репутация: 1 Всего: 1 |
Будут ли подваться импуьсы на lpt, если зациклить этот кусок кода (теоретически)? Может есть еще какие-нибудь способы? |
|||
|
||||
| cppforever |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 20.8.2006 Репутация: нет Всего: нет |
Мне тоже не нравился тогда вариант с использованием дополнительных библиотек и драйверов. Пытался разобраться как писать/читать из порта с помощью CreateFile(), WriteFile(), ReadFile() - не получилось. Пришлось использовать первый подход. Причем я перепробовал несколько библиотек и выбрал WinIO т.к. она оказалась самой быстрой. Так что если у тебя получится применить второй подход буду признателен если расскажешь КАК ;)
|
|||
|
||||
| GremlinProg |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2706 Регистрация: 9.8.2005 Где: Тюмень Репутация: 99 Всего: 106 |
ЛПТ - не самый лучший вариант по определению, этот интерфейс не может быть реализован асинхронно, как альтернатива - КОМ. С комом и апешек поболее и работать приятно. Но если все же вам хочется позаморачиваться с роритетным лпт, то вот ссылочка на очень понятно расписанный ресурс "Работа с параллельным портом в Windows NT":
http://junglewin.narod.ru/lpt.html ключевой момент в лпт - получение и установка состояния порта(чтение/запись), которое, как вы уже поняли, нужно включать и выключать перед записью. Для этого автор использует иоктл-коды из ддк и DeviceIoControl. Если вы все же полезете в эти дебри, то самым ленивым может понадобиться ntddpar.h для Parclass.sys, пишите, поищу. -------------------- "Гений всегда разумнее, чем умнее. Ум — это машина, разум — водитель этой машины." |
|||
|
||||
| MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: 1 Всего: 0 |
Проблема вся в том, что если без левых драйверов хочется обойтись, то нужно ваш "принтер" переключить в обычное состояние. а именно спаять контакты земли (18-25) с 11 и 12 (busy и paperend), тем самым переведя в состояние log0 или по-просту false.
а теперь все будет работать
вот тут немножко про лпт - полезно и тут --------------------
Experimentia est optima rerum magistra |
|||
|
||||
![]()
|
| Правила форума "C/C++: Системное программирование и WinAPI" | |
|
|
На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы . Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |