Работа с LPT портом

 

 

 

 

 

                             

  LPT порт - это то место куда подключается принтер. Но туда можно воткнуть ещё много чего интересного. В том числе и придуманые вами схемы. Нужно только разобраться что к чему...

 1 - выход. Его используют принтеры и другие устройства. Если на нем нет сигнала, принтере не выполнит ни одной команды от других выводов.

 2 - 9 - сигнальные выводы. Именно ими мы и будем пользоваться.

 18 - 25 - это земля (минус). Обычно(не всегда) они соединены с корпусом компа.

 Это основной набор контактов, необходимый для изготовления собственных схем.

 Для ввода информации в порт используются выводы 10-13, 15. Подробнее в конце.

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

lpt_leds.gif (3947 bytes)

выводы 18-25 можно не замыкать между собой, резисторы можно подключить к любому из них. Все резисторы на схеме по 470 ом.

 Резисторы здесь ограничивают потребляемый ток. Напряжение между сигнальным выводом и землей должен быть в не более  2,4V - 2.6 mA. Те. очень мало.

 LPT порт (как и COM) очень чуствителен к прегрузкам и с ним нужно обращаться очень осторожно !!!

Вот самая простая схема подключения реле:

  Думаю, что объяснять здесь ничего не нужно. Data - это один из выходов LPT порта, например, вывод 2 (Data-0). Если на нем появится log1, транзистор откроется, сработает реле K1 и подключит какую-то более мощную нагрузку.. В этой схеме LPT порт напрямую подключен к транзистору и в случае его пробоя на выходе data может оказаться опасное для порта напряжение. Чтобы защитить порт нужно использовать гальваническую развязку.

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

lpt_isol.gif (2367 bytes)

  В данной схеме порт отделен от высоковольной части и ему почти ничего не угрожает. В этой схеме я ставил оптоизолятор 4N25 - самый дешевый ималенький. Катушка на схеме - это реле на 12 вольт. Во время экспериментов я подключил к этой схеме реле РЭС22, а к нему настольную лампу. Для пробы написал программку, которая управляла лампой по часам...

  Есть спец. микросхемы работы с LPT портом. Они обеспечивают гальваническую развязку, инвертируют выходной сигнал и тд. Мне известна пока только две 74HCT573 и 74ALS373

  Это схема подключения 74ALS373. Как она работает я не знаю, я не использовал микросхемы вобще, обходился просто связкой оптопара+транзистор или оптопара+симистор.

 

Кстати, вот примерчик управления симистором:

  Эту схемку я просто воткнул вместо выключателя от основного освещения в своей комнате. Очень пригодилось когда настраивал LPT-стробоскоп. Можно было не вставая с места выключить на время свет.

  Ещё один пример практического использования LPT порта, наверно самый удачный.

Это стробоскоп управляемый через LPT порт.

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


Прогарммирование :

Я пока изучаю только PASCAL и поэтому могу предложить программу только под DOS.

Так выглядит простая программа на Паскале (7,0) :

Uses Dos,CRT;

Var
   data:byte; {переменная DATA типа byte}
   
Begin
   Readln(data);  {читаем переменную -ввод ентером}
   Port[MemW[$0040:$0008]:=data; {посылаем в порт}
End.

Эта программа посылает в порт введеное число.

Какое число необходимо ввести :

1 выход  -  1
2 выход  -  2
3 выход  -  4
4 выход  -  8
5 выход  - 16
6 выход  - 32
7 выход  - 64
8 выход  - 128
0  - "гасит" все выходы      255 - включает все

Если нужно подать сигнал на все выходы, то нужно просто сложить числа обоих выходов. Пример (на св.диодах): у на горит 2-й и 7-й, нам нужно зажечь 5-й, не выключая 2и7. Считаем- у второго код 2, у седьмого - 64  => сейчас на порт послано число 64+2 = 66. Теперь зажигаем 5-й -  66+16(код пятерки) = 82. Посылаем на порт 82 и у нас будут гореть 2,5,7. Но вдруг нам понадобилось погасить 7-й. Всё просто - отнимаем от того что у нас сейчас "в порте" (82) часло этого 7-го вывода -  82-64 = 18

NB ! Если я не ошибаюсь, то так во всех языках программирования. Отличается только запись самого порта, символ присваивания и тд. Например, в "C" Это будет примерно так : outportb(0x378,data);    где data - число которое нужно послать.

-------- Дополнение от 29.01.02: -----

Эти примеры не работают в WinNT и Win2K :(  Я нашел как можно запитать порт из Win2K. Я его ещё не испытывал поэтому только описание.

Необходимо cоздать из программы фаил с именем порта, например "LPT" и просто писать в него числа. Этот метод даже описан где-то в хелпе к VC++ , но я не нашел. Программисты говорят, что такой способ работает во всех Win системах, но его нельзя использовать если нужна высокая точность.

-----------------------------------------

Мои программы для управления LPT :

12.06.01 - Попробовал сделать программку под Windows 9x - вот что получилось lpt.zip (147kb)

migalka  (4 kB) - программа для создания эффектов (для 8 светодиодов)

lpt_plus  (9 kB) - при нажатии на клавишу (1-8) включает соответствующий выход, при повторном нажатии выключает. С помощью этой программы я управлял несколькими бытовыми приборами одновременно. Скачайте, разберетесь...

Вот полная распайка LPT порта :

 
N Направление Сигнал
1 Выход Data Strobe
2 Выход Data 0
3 Выход Data 1
4 Выход Data 2
5 Выход Data 3
6 Выход Data 4
7 Выход Data 5
8 Выход Data 6
9 Выход Data 7
10 Вход Acknowledge
11 Вход Busy
12 Вход Paper Out
13 Вход Select
14 Выход Auto feed
15 Вход Error
16 Выход Init
17 Выход Select Input
18-25   Ground

  На этом пока все.


  Для того, чтобы работать с LPT в basic исполуют такие надписи:

OUT $H378, a

где a - значение от 0 до 255 (см. выше), ничего более просто я в жизни не видел.

Если у вас есть материал по этой теме (исходники, схемы или документация на русском), пришлите пожалуйста.  masterok@hot.ee

 

    Страница удачно сдута с сайта http://electronics.dax.ru/

Сайт создан в системе uCoz