Страница 1 из 1

Датчик на LPT

Добавлено: Ср дек 29, 2010 12:43:44
neoarey
Здравствуйте!

Помогите решить задачу. Есть схема:

Изображение

Необходимо, при замыкании ключа (концевого датчика), выполнять соотв. действие. В одной статейке прочитал, что если подать 1 на ножку, а потом соединить её с землёй, то на ножке устанавливается 0. Может я что не правильно понял, у меня не получается, всё равно висит 1.

Записываю и читаю 378.

Re: Датчик на LPT

Добавлено: Ср дек 29, 2010 12:47:17
radio-kot
Посмотрите google Валерий Ковтун программирование LPT и COM

Re: Датчик на LPT

Добавлено: Ср дек 29, 2010 21:24:59
neoarey
Мда... содержательный ответ... Наверное я уже полазил по поисковым системам, прежде чем задать вопрос. Неужели просто нельзя ответить "да ты делаешь правильно, только надо ещё вот это... " или "нет, не так, а надо вот так..." Это форум люди, здесь помогать надо. Легче всего сказать ищи в гугле. Дни могут пройти прежде чем найдёшь то, что нужно... Вы меня огорчаете... :(

Re: Датчик на LPT

Добавлено: Ср дек 29, 2010 22:38:44
radio-kot
Если голову не включать и века не хватит.

Re: Датчик на LPT

Добавлено: Ср дек 29, 2010 23:44:02
rmmp
neoarey писал(а): В одной статейке прочитал, что если подать 1 на ножку, а потом соединить её с землёй, то на ножке устанавливается 0. Может я что не правильно понял, у меня не получается, всё равно висит 1.

При замыкании ключа-датчика на схеме 0 должен установится по любому.

Re: Датчик на LPT

Добавлено: Ср дек 29, 2010 23:47:53
Mickle
Уважаемый neoarey, не стоит обижаться.
Давайте рассуждать вместе. Насколько я понимаю, предложенная Вами схема - это в своём роде техническое задание, и размышлять по поводу его корректности или же ошибочности не стоит. Я вижу как миниму три возможные причины неудачи Вашего эксперимента:
1. Операции ввода-вывода относятся к привилегированным. Поэтому, было бы ошибкой управлять LPT портом, к примеру, из виртуальной DOS машины NTVDM в Windows XP.
2. Программно-схемотехнический трюк с вводом данных через [LPTBase] порт в стандартном режиме (т.е. в Вашем случае, через 378h) был описан в литературе ещё в те стародавние времена, когда интерфейс строился наполовину из дискретной логики. На современных SuperIO чипсетах этот трюк с перегрузкой выходных формирователей не пройдёт в принципе.
3. Если эксперимент Вы всё же проводите на исключительно старом "железе", тогда может не хватать "подтягивающих" резисторов на +5 В. К примеру, типовая схема разводки LPT на материнской плате SuperIO чипом W83627 выглядит так:

Изображение

На старых платах и мультикартах этой обвязки может и не быть.

Впрочем, есть и альтернативный вариант. Ведь можно попробовать переключить порт в двунаправленный байтовый режим ECP и использовать его просто как порт ввода. Надеясь на то, что резисторы на +5 В всё таки установлены, можно повторить Ваш эксперимент без каких-либо схемных изменений.
Перевести порт в указанный режим можно так:

Код: Выделить всё

    mov     dx,LPTBase
    add     dx,402h             {ECP ECR adress}
    in      al,dx               {load current value}
    and     al,00011111b        {clear mode bits}
    or      al,00100000b
    out     dx,al               {set bidirectional byte mode}
    mov     dx,LPTBase
    add     dx,2
    mov     al,00100000b        {set read data mode and no interrupts}
    out     dx,al

Re: Датчик на LPT

Добавлено: Чт дек 30, 2010 09:45:12
neoarey
Спасибо, уже разобрался...

Нужно было перевести порт в режим чтения данных DlPortWritePortUchar &H37A, 43
А потом читать DlPortReadPortUchar(&H378). Это если работать с регистром Data. Со Status вообще всё проще, там уже логическая 1. Просто читаешь до замыкания и после &H379.