Интерфейсы ввода*вывода дискретных сигналов параллельного порта

April 23, 2012 by admin Комментировать »

Вначале остановимся на методике вывода данных в параллельный порт. Вывод данных в параллельный порт можно  использовать  для управления различными  устройствами, для ге нерации  импульсных последовательностей  и т. д. Регистры параллельного  порта работают с уровнями TTL логики, поэтому их легко сопрягать с цифровыми микросхемами.

Обычно для вывода используется регистр данных порта с шестнадцатеричным адресом

0x378  (стандартное значение) или 0x278  (обычно используется для LPT2).

Разработаем  нашу первую программу  для работы с параллельным портом, для чего запу стим среду Delphi 2007  (можно также работать в одной из сред Delphi 7, Delphi 2005  или Turbo Delphi) и создадим графическое приложение, в котором при нажатии кнопки, разме щенной на форме, выходной код регистра 0x378  будет инвертировать  свое содержимое.  Вот как выглядит поле конструктора приложения (рис. 3.2):

Рис. 3.5

Окно работающей программы

Для запуска  этой программы, как  и в предыдущем примере, нам понадобятся файлы porttalk.sys,  allowio.exe и start.bat,  причем в командном  файле start.bat необходимо указать имя программы.

Этот проект, немного  доработав,  можно  превратить  в простую систему управления  осве щением в помещении. Такая система может работать следующим образом: при снижении уровня освещенности (например, с наступлением сумерек) ток фотодатчика уменьшался бы настолько, что вход 6 регистра состояния переключался бы в состояние 0, а программа, обна ружив это, включала бы освещение. Включение электроосвещения можно реализовать через один из разрядов регистра данных, например, нулевой.

Аппаратную часть такой системы управления освещением можно разработать на основе схемы из рис. 3.3 путем небольшой модернизации последней. Вот как  могла бы выглядеть система управления освещением с управлением от параллельного порта (рис. 3.6).

Схема работает следующим образом: при уменьшении тока через фотодиод VD1 с умень

шением  освещенности  падает напряжение  на  выходе операционного  усилителя DA1. Как

Рис. 3.6

Схема управления электроосвещением

только это напряжение станет меньше напряжения Uоп, компаратор переключается, и напря жение  на  его  выходе становится равным  лог.0.  Программа,  обнаружив  нулевой уровень в 6 м разряде регистра состояния с адресом 0x379,  устанавливает высокий уровень напря жения в 0 м разряде регистра  данных с адресом 0x378.  Это напряжение открывает мощный полевой транзистор Q1, что вызывает протекание тока через обмотку реле RL1. В результате контакты реле замыкают вторичную силовую цепь с подключенными осветительными прибо рами L1  . . LN. Обратно, если освещенность увеличивается, то обратный ток через фотодиод VD1 возрастает,  что приводит к срабатыванию  компаратора  и переключению  его выхода в состояние лог.1. Программа,  прочитав бит 6, отключает освещение, установив уровень лог.0 в 0 м разряде регистра данных.

Тип реле и диода VD2 в этой схеме подбираются в зависимости от нагрузки во вторичной цепи и тока в обмотке,  необходимого  для срабатывания  реле. На фотодиод не должен попа дать свет от включенного  освещения, иначе программа  будет непрерывно  переключать  цепь осветителей.

Исходный текст программы,  управляющей освещением, показан  далее:

unit Unit1;

interface uses

Windows, Messages,  SysUtils,  Variants,  Classes,  Graphics, Controls, Forms,

Dialogs, StdCtrls,  ExtCtrls;

type

TForm1  =  class(TForm) SystemON:  TButton; Timer1:  TTimer; SystemOFF: TButton;

procedure  SystemONClick(Sender:  TObject); procedure  SystemOFFClick(Sender:  TObject); procedure  Timer1Timer(Sender:   TObject);

private

{  Private declarations  }

public

{  Public declarations  }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

procedure  TForm1.SystemONClick(Sender: TObject);

begin

timer1.Enabled:=  true;

end;

procedure  TForm1.SystemOFFClick(Sender:  TObject);

begin

timer1.Enabled:=  false;

end;

procedure  TForm1.Timer1Timer(Sender:  TObject);

begin asm

mov       DX, 379h

in        AL, DX

and     AL, 01000000b shr      AL, 6

dec      DX

cmp       AL, 0 sete   BL

mov       AL, BL out      DX, AL end;

end;

end.

Как и в программе  из предыдущего примера, здесь используются те же визуальные ком поненты (две кнопки  и таймер), но исходный текст существенно изменен.  Эти изменения  кос нулись программы обработчика события таймера. Если при считывании 6–го  бита регистра

0x379  он установлен в 0 (низкий уровень освещенности в помещении), то бит 0 го регистра

0x378 устанавливается в лог.1, открывая транзистор Q1, который включает цепь осветите

лей. Если значение 6–го  бита равно лог.1 (хорошая освещенность), то бит 0 го  регистра

0x378 сбрасывается в 0, выключая цепь освещения.

Источник:  Магда Ю. С. Компьютер  в домашней лаборатории.  – М.: ДМК Пресс, 2008. – 200 с.: ил.

Оставить комментарий

микросхемы мощности Устройство импульсов питания пример приемника провода витков генератора выходе напряжение напряжения нагрузки радоэлектроника работы сигнал сигнала сигналов управления сопротивление усилитель усилителя усиления устройства схема теория транзистора транзисторов частоты