FAQ по Visual Basic

Содержание / Использование сторонних компонентов Поиск | Далее

§ 4.7. Работа с устройствами, подключенными к LPT-порту

Схема На внешний порт компьютера (COM, LPT, Game; про USB отдельный разговор) может быть подключено любое устройство, начиная простейшим переключателем гирлянд и заканчивая АЦП/ЦАП-преобразователями в составе сложного измерительного прибора. Однако в любом из этих случаев, работа с внешним устройством сводится к чтению состояния одних ножек порта и управлению выходными сигналами на других ножках порта.

Примечание: Вообще это не совсем так, и пример тому — работа USB-портов или модемов на COM-портах, однако в данной статье не рассматривается последовательное управление устройствами, только параллельное, как наиболее простое и доступное для реализации.

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

OUT:

К ножке D0 (контакт 2) LPT-порта через резистор подключен анод («+») светоизлучающего диода. Резистор R1 номиналом 500 ом выполняет роль балластного, ограничивая ток из ножки порта и ток через светодиод, предотвращая сгорание светодиода и выход из строя порта. Катод («−») светодиода соединен с «землей» порта (выводы с 18 по 25).

Этот участок схемы выполняет роль устройства, которым управляют, взводя логический 1 или 0 на выходе D0 порта. То есть, в данном случае, программно включают и выключают светодиод.

Установка логического 0 на выходе D0 приводит к появлению потенциала, близкого к 0 (относительно «земли», здесь и в дальнейшем), установка же логического 1 на том же выходе приводит к появлению потенциала, близкого к +5 вольт.

IN:

К ножке ACK (контакт 10) того же порта через резистор подключена нормально разомкнутая кнопка SB1. Резистор R2 номиналом 500 ом выполняет роль балластного, ограничивая ток в ножку и предотвращая выход из строя порта. Другой контакт кнопки соединен с землей. Эта часть схемы является примером датчика, который в зависимости от своего состояния устанавливает низкий или высокий потенциал на входе.

Если датчик устанавливает низкий потенциал на входе (менее 1 вольта, то есть «притягивая» входной контакт к  «земле»), то это означает логический 0 на входе, и наоборот, если датчик устанавливает высокий потенциал на входе (более 3 вольт, «притягивая» входной контакт к +U или оставляя его неподключенным (хотя вообще это не рекомендуется)), то это означает логический 1 на входе.

То есть устанавливая лог. 1 на выходе D0, мы включаем светодиод, а установка лог. 0 на том же выходе его выключает.

Аналогично, нажмимая кнопку, мы устанавливаем на входе ACK лог. 0, а отжимая — лог. 1.

Замечу, что COM порт используется аналогичным образом. В отличие от LPT порта, который содержит 12 выходных и 5 входных линий, COM поддерживает 3 входных и 2 выходных линии. Для выходных линий нулем является напряжение −12 вольт, единицей — +12 вольт. Соответственно, для входных линий Gnd или −U распознаются как 0, и +U как 1.

Детали можно использовать любые подходящие, резисторы мощностью от 0,125 Вт и выше, номиналом 400 ом—620 ом, светодиод любой марки (лучше буржуйские, они ярко светят даже при токах в 2 mA, в то время как отечественным образцам нужен ток в 10 раз больше) и любого цвета, например LG2040; кнопка любая без фиксации, но подойдет и с фиксацией, или вообще любой тумблер.

Для подключения устройства к компьютеру потребуется разъем D25 male (25-пиновый тип “D”, «папа»). Крайне не рекомендую вместо использования ответного разъема засовывать в гнезда LPT-разъема проволочки. Можно легко ошибится, что-либо закоротить или механически вывести разъем из строя.

Саму схему можно смонтировать на куске текстолита, геттинакса, картона или фанеры и соединить с ответным разъемом трехпроводным шлейфом или кабелем. Учтите, длина кабеля не должна превышать 30 сантиметров, в противном случае придется установить блокирующий конденсатор между землей и входом ACK. Конденсатор любой, например, керамический марки КМ5, КМ6, номиналом 0,1—1,0 мкФ.

Программа для работы с данным устрйоством приведена в архиве lptio. В модуле Declare установите константу LPT в зависимости от номера того порта, к которому вы подключаете устройство. Но обычно в компьютере только один порт LPT, который к тому же часто занят под принтер, поэтому менять константу обычно нет необходимости, и требуется лишь отключить принтер, чтобы освободить порт.

Свойство ButtonState в том же модуле возвращает состояние кнопки: True = кнопка нажата, False = отжата.

Метод LedControl управляет светодиодом; если параметр метода равен True — светодиод зажжется, False — погаснет.

На форме отображаются номер и базовый порт выбранного LPT-порта, состояние кнопки SB1 и кнопка для переключения светодиода.

Для доступа к хардверным портам (LPT, Game) можно использовать любую подходящую бибилиотеку из WinIo, DLPortIo, VBIO (последняя не работает под NT), а для работы с COM-портом вполне подойдет входящий в поставку VB5/6 Microsoft Comm Control. Но допустимо использовать те же библиотеки, что и для доступа к LPT/Game-портам.

Чтобы запустить пример, положите файлы winio.dll, winio.vxd и winio.sys в папку с проектом и в каталог VB. В скомпилированном приложении, думаю, достаточно, чтобы эти файлы лежали только в его программы.

Домашнее задание.

  1. Переделайте программу таким образом, чтобы при нажатии кнопки SB1 загорался светодиод VD1, а при отпускании кнопки — погасал.
  2. Затем реализуйте обратный вариант: нажатие кнопки SB1 гасит светодиод, а отпускание той же кнопки его зажигает.
  3. И наконец, реализуйте программный счетчик-делитель с коэффициентом пересчета 2: при первом (нечетном) нажатии на кнопку SB1 светодиод VD1 загорается и продолжает гореть, даже если кнопку отпустят. При втором (четном) нажатии на кнопку SB1 светодиод гаснет, и его состояние не изменяется после отпускания кнопки.
  4. Поэкспериментируйте с устройством, например, определите, при каком максимальном значении сопротивления R1 светодиод перестает зажигаться, при каком максимальном значении R2 порт перестает реагировать на кнопку. Замерьте миллиамперметром проходимые токи через светодиод и кнопку при прежних значениях сопротивлений и при пороговых. Замерьте вольтметром напряжения на ножках порта D0 и ACK при этих экспериментах.

Примечание: лучше использовать комбинированный прибор типа мультиметра, который не только измеряет токи и напряжения, но и позволяет замерять сопротивления, а наиболее «продвинутые» модели приборов — годность полупроводниковых элементов, емкости конденсаторов, индуктивности катушек, средневзвешенную частоту. Цена цифрового прибора колеблется от 250 рублей (мыльница) до 2500 рублей и выше (профессиональные комбайны, с цифровым осциллографом и т. д.)

Дополнительные примеры.

Если вы увлекаетесь радиолюбительством, попробуйте изготовить конструкцию, несущую практическое применение, и написать управляющую программу («драйвер») для нее. Примером конструкции может быть восьмиканальный переключатель светодиодных гирлянд (не более пяти светодиодов на канал) для небольшой елочки, а программная часть зажигает эти гирлянды в различных комбинациях или реализует цветомузыку. Другим, более сложными примером может быть датчик для регулирования оборотов вентилятора и определения скорости вращения крыльчатки (например, если ваша материнская плата не поддерживает данную возможность для какого либо вентилятора). Еще один пример — считыватель чип или смарт-карты (сама карта мажет быть любой использованной: чип-карты телефонов или симкарта от сотового телефона); использование этого оборудования позволяет реализовать пропускной доступ в помещение или к компьютеру. Гораздо удобнее выполнять логон, просто установив чип/смарт-карту в считыватель, нежели вводить имя пользователя и пароль. Также нетрудно реализуется цифровой термометр, если использовать в качестве измерительной головки (датчика) микросхему от Dallas Semiconductor DS1821. Несложно (на микросхемах K561ТВ1 и К561ЛА7) собрать устройство для управления сильноточной нагрузкой, например, кофеваркой. Разве не замечательно, когда утром вас будит терпкий аромат свежесваренного кофе? :-)

Обратите свое внимание, что ни LPT, ни COM-порт не содержат выхода источника питания (в противоположность Game-порту, на котором присутствует +5 в), и в большинстве случаев нагрузочная возможность выходных ножек порта не превышает 3—7 mA (милиампер) на каждую ножку. Попытка взять с ножек больший ток в лучшем случае приводит к падению напряжения на ножках, в худшем (при токах более 20 mA) — к возможности выхода порта из строя. Поэтому, если есть возможность — установите в компьютер мультикарту с портами либо переходник USB <–> COM или USB <–> LPT.

Литература.

Привести рекомендуемый список литературы просто невозможно — он огромен. :-) Ограничусь лишь особо рекомендуемой литературой:

TechHelp (ищется на google), в нем описаны многие стандарты на компьютерные порты, в частности, распиновка COM/LPT/Game-портов и соответствующие их хардверные порты.

журнал «Радио» № 6, 2002 — однокристальный контроллер, обеспечивающий реализацию функций USB <–> COM. Использование описанного чипа позволяет использовать в конструкциях современные USB-порты и работать с ними как с обычными COM-портами.

журнал «Радио» № 5, 2002 — описание конструкции электронного цифрового термометра; в данной статье референс лишь на описание замечательной микросхемы — температурного датчика DS1821, возвращающего значение температуры в цифровом коде.

Автор:
Александр Щербаков

Предыдущий раздел Следующий раздел

© 2004. При цитировании, пожалуйста, не забудьте поставить ссылку на оригинальную страницу.