Свежие обсуждения
Компьютеры

Управление ~220В посредством LPT порта компьютера

1 4 5

цена соизмерима

 

На PL2303 нет битбанга.

 

Интересные замечания по теме:
1. У меня есть программа - программатор для микросхем 24cXX, работающая через ЛПТ. Я ее писал во времена голого ДОСа и Виндовс-98. Совсем недавно я как-то даже не задумываясь запустил ее из-под Виндовс-ХР и отработал то, что мне было надо (работа с модулем I2C по адресу устройства, отличному от 0 - фирменные программаторы этого не могут).
И только потом сообразил, что под ХР прямой доступ к портам не работает!!!
Оказалось, что все-таки работает, если только не пользоваться регистром управления (у меня задействован регистр данных и регистр статуса). Только работает на 2 порядка медленнее, чем из-под голого ДОСа. (на ВИН-98 тоже медленнее, чем из ДОСа).
А вот регистр управления точно недоступен - и не читается, и не пишется.
2. На старых портах ЛПТ регистр управления (CR) допускал запись в порт и чтение состояния внешних линий (имеется в виду прямой доступ из-под ДОС). На современных читается не состояние линий, а то, что записано в регистр. Это две большие разницы. Свой "Супертаймер", например, мне пришлось переписывать, заменив чтение из CR на чтение из регистра статуса - там читается именно состояние линий.
Вот.

 

musor: кабель для старого сотана
alx25v: на ... нет битбанга
rx3apf: мост USB-UART ... отвязываем оптопарой ... дальше микроконтроллер
Арс: цена

да уж, когда кто подарит бери-не-хочу FT232/PL230X/CP210Х/211Х их-есть-у-меня, или для разминки, колдуя над готовой платкой USB/UART-модуля пауком uC-одночипа, мы кто-в-доле за пару-тройку часов такой бит-банг сорганизуем да терминалом отладим, что даже без развязки - щастя хватит в полный рост: опись-про́токол, байт сдал-приня́л… отпечатки пальцев! а-ля однобайтовая структура посылок с адресацией скажем 32-х I/O-бит 8-ю командами: эхо, направление/подтяжка, установить/сбросить немедленно/отложено до следующего и т.п., а в ответ - тишина, тьфу - чтение; если ж битов мало, то сразу - гоу в порт

а уж опосля, к этому - долго-долго будем ваять W7 platform GUI

 

AN1440: И только потом сообразил, что под ХР прямой доступ к портам не работает!!!
Скорее всего уже когда-то Вы открыли прямой доступ к портам в этой ОС, установив соответствующий драйвер. Возможно даже не осознавая этого, при установке какой нибудь программы он сам поставился. Например, известная программа СпидФан устанавливает такой драйвер и открывает прямой доступ к портам. Ну или работаете с ЛПТ-портом как с файлом. Но там тогда могут вылезти проблемы с отработкой правильных временных интервалов. Да и надо физически эмулировать принтер на приёмной стороне(некоторые пины к нужным напряжениям притянуть и АСК выдавать).

birua: колдуя над готовой платкой USB/UART-модуля пауком uC-одночипа, мы кто-в-доле за пару-тройку часов такой бит-банг сорганизуем да терминалом отладим, что даже без развязки - щастя хватит в полный рост: опись-про́токол, байт сдал-приня́л… отпечатки пальцев! а-ля однобайтовая структура посылок с адресацией скажем 32-х I/O-бит 8-ю командами: эхо, направление/подтяжка, установить/сбросить немедленно/отложено до следующего и т.п., а в ответ - тишина, тьфу - чтение; если ж битов мало, то сразу - гоу в порт
Это всё понятно и никаких проблем с этим нет, кроме того что я ещё до этого не дошёл
Пока буду двигаться по намеченному направлению:
1) Встраивание прямого тупого моста ЮСБ-8разрядов (на базе ФТ245 или ФТ232)
2)Использование микроконтроллера для работы независимо от компьютера и связь с компьютерном контроллера по ЮСБ или преобразователю ЮСБ-СОМ

Мне это больше интересно не как конечный продукт, а как плацдарм для овладения соответствующими технологиями.

 

Арс: какой нибудь
Об этом не подумал - СпидФан действительно стоИт на всех машинах, где я производил упражнения.
Однако, насколько я знаю, чтобы драйвер использовать, обращение к ему должно быть предусмотрено в программе. А тут программа на ТурбоБейсике досовском - тупо делает OUT PORT%,x и INP(PORT%), даже не подозревая, что на свете существуют какие-то драйвера. И еще тонкость - адрес порта должен быть не тот, которо прописан в Виндоузе в свойствах, а тот, который считывается из памяти переменных БИОС, как это всегда и делали в голом ДОСе. А там он совсем не такой: например, Виндоуз показывает 378h, а из памяти считывается 3BCh, и по ему и обращаемся.

 

AN1440: тобы драйвер использовать, обращение к ему должно быть предусмотрено в программе
Не обязательно. Есть такие, что открывают общий доступ всем программам(изменяют там какой-то недокументированный параметр внутрях ОС). Во всяком случае я с таким сталкивался. Не было доступа, потом поставил какой то драйвер и из любой программы мог использовать прямой вывод в порт (port[] в паскале и inp(), outp() в Си). Может достаточно чтобы этот драйвер был загружен другой программой. Только не помню, что за драйвер. Возможно giveio.sys. С ним я больше всего тогда работал.

Этот драйвер написал Dale Roberts черт знает когда, но актуальности от не потерял до сих пор. В кратце расскажу как он работает: в начале работы нашей программы для общения с портами необходимо обратиться к драйверу GiveIO.sys. При этом он установит такие значения битового массива карты разрешения (I/O Permission Map) для нашего приложения, что для него будет разрешен прямой доступ к любым портам. I/O Permission Map это составная часть системы защиты ввода-вывода Windows NT. Он представляет собой битовый массив, каждый бит которого соответствует порту ввода-вывода. Если бит = 1, то доступ к порту закрыт, если 0, то открыт. Для любого пользовательского приложения все биты установлены в 1, и соответственно мы не можем напрямую влезть в порт. GiveIO.sys внаглую влезает в этом массив и везде устанавливает 0 - т.е. можем обращаться к любому порту из приложения.

Вполне возможно доступ открывается всем DOS приложениям, так как они запускаются не напрямую, а через прослойку, которой и даётся доступ к портам.

 

AN1440: Интересные замечания по теме:

3. Современные процессоры способны отрабатывать инструкции за наносекунды, и команды типа OUT должны, казалось бы, проскакивать молниеносно -- фигас два! На исполнение уходит около микросекунды. Подозреваю, что специально затягивается чипсетом. Ни на форумах, ни от Intela вразумительного ответа не получил. Кто знает -- поделитесь!

 

IDiod: На исполнение уходит около микросекунды
Это все от ОСи. Для микросекунд Вам нужна особая Real Time OS с минимальным временем задержки. Я когда-то читал статьи на эту тему, были советы как уменьшить время реакции самой винды. Точно не помню, но там есть минимальный отрезок времени для реакции и он составляет миллисекунды (толи десятки, точно не помню).

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

 

Все это я уже слышал.
-- речь про то, что и внутри выделенного отрезка времени команда OUT выполняется медленно,
-- гипотеза о затрате времени на проверку прав доступа тоже отпадает, поскольку факт имеет место быть и в чистом ДОСе (реальный режим работы процессора)..