Menu Home

Бесплатная техническая библиотека для любителей и профессионалов Бесплатная техническая библиотека


Другая жизнь LPT порта. Часть 2. Энциклопедия радиоэлектроники и электротехники

Бесплатная техническая библиотека

Энциклопедия радиоэлектроники и электротехники / Компьютеры

Комментарии к статье Комментарии к статье

Для записи сигналов на LPT порт я рекомендую собрать схему (рис. 1), состоящую из восьми переключателей и восьми резисторов сопротивлением 270 Ом - 1 кОм. При данном положении переключателей (кнопок) SW1-SW8 на всех верхних контактах присутствует логическая "1", при замыкании любого - на соответствующем контакте появится логический "0". Контакты можно подключать непосредственно к шине D0-D7 (контакты 2-9, адрес &H378) или к ERROR, SELECT, PAPER END, ACK и -BUSY (контакты 15, 13, 12, 10 и 11, адрес &H379).

Другая жизнь LPT порта
Рис. 1

Для отображения данных идущих с LPT порта рекомендую следующую схему.

Другая жизнь LPT порта
Рис. 2

Резисторы R1-R8 номиналом 270 - 330 Ом, светодиоды любые, скажем АЛ307Б. Питания такая схема не требует, все и так будет светиться. Я себе вывел вообще все сигналы, сразу все видно. А вообще настоятельно рекомендую скачать программу LPT 3D HARD Analyzer на valery-us4leh.narod.ru/dlpt.html. Написал ее Валерий Ковтун. С помощью этой программы… в общем сами увидете.

Давайте соберем генератор прямоугольных импульсов на микросхеме К561ЛА7. Питание генератора +5В. Дело в том, что удобнее все устройства собирать, например, на 155, 555 серии, чтобы сигналы имели ТТЛ уровень. Логический "ноль" 0-0,8В и лог "единица" 2,4-4,2В. Удобство 561 серии заключается в универсальности питания - она одинаково хорошо работает от +3В до +12В. Поэтому выбор микросхем остается на ваш вкус, вопрос лишь в том, чтобы получить прямоугольные импульсы амплитудой не более +5В. Схема простого генератора импульсов изображена на рисунке 3.

Другая жизнь LPT порта
Рис. 3

Сам генератор собран на элементах D1.1-D1.3, а элемент D1.4 я просто использовал для более "красивых" фронтов выходных импульсов. R1, R2, C1 - частотозадающие элементы. При данных параметрах элементов частота генерации составляет приблизительно 5-7 Гц. Для наглядности работу генератора можно представить в виде следующего графика:

Другая жизнь LPT порта
Рис. 4

Выход инвертора D1.4 соединен с 2 контактом LPT разъема (шина D0). Перед использованием генератора, необходимо перевести шину D0-D7 в режим приема данных. Для этого на адрес &H37A мы посылаем 43.
Код следующий. Для тех, кто использует
inpout32.dll dlportio.dll DOS
Out &H37A, 43 DlPortWritePortUchar &H37A, 43 OUT &H37A, 43

После этого начинаем опрашивать порт &H378.
Код следующий. Для тех, кто использует
inpout32.dll dlportio.dll DOS
Dim A as IntegerA = Inp(&H378) Dim A as IntegerDlPortReadPortUchar(&H378) DEFINT A-ZA=INP(&H378)

Переменная A будет принимать значение то 254, то 255. Почему?
D0 D1 D2 D3 D4 D5 D6 D7  
20 21 22 23 24 25 26 27  
1 2 4 8 16 32 64 128  
1 1 1 1 1 1 1 1 255
0 1 1 1 1 1 1 1 254

Дело в том, что после перевода шин D0-D7 в режим приема данных, на них выставляется уровень логической единицы (желтый ряд).

При появлении на шине D0 уровня лог "0" (голубой ряд) - первый бит принимает значение нуля, значит 0+21+22+23+24+25+26+27 = 254.

Таким образом, мы можем отследить изменение сигнала на шине D0, ну а если мы посчитаем количество изменений за 1 секунду, то мы получим… правильно - цифровой частотомер. Зная количество пришедших импульсов в секунду можно сказать о частоте в Герцах.

Итак, программа частотомер. На форме должны быть 3 кнопки и Label. Кнопка 1 пуск частотомер, Кнопка 2 стоп, Кнопка 3 - выход, Label - индицирует частоту.

*******************************************

Для тех, кто использует inpout32.dll

Option Explicit

'объявление библиотеки для работы с адресами порта

Private Declare Function Inp Lib "inpout32.dll" Alias "Inp32" (ByVal PortAddress As Integer) As Integer

Private Declare Sub Out Lib "inpout32.dll" Alias "Out32" (ByVal PortAddress As Integer, ByVal Value As Integer)

'объявление библиотеки для подсчета миллисекунд

Private Declare Function GetTickCount Lib "kernel32" () As Long

Dim FTV As Long         'начальное значение системного времени

Dim STV As Long         'конечное значение системного времени

Dim FV As Integer       'FV-начальное состояние порта

Dim SV As Integer       'SV-сравниваемое состояние порта

Dim cntr                'счетчик импульсов

Dim J As Integer        'J=1 счет разрешен, J=0 счет не разрешен

Private Sub Command1_Click()

Out &H37A, 43                 'переводим шины D0-D7 в режим чтения

FTV = GetTickCount           'запомнили системное время в миллисекундах

J = 1                        'счет - разрешить

FV = Inp(&H378)              'считали состояние порта

SV = FV                      'SV равно состоянию порта

cntr = 0                     'счетчик в ноль

Do While J <> 0

DoEvents

STV = GetTickCount                     'запоминаем текущее системное время

If STV > FTV + 1000 Then FrequencyShow 'если прошла секунда, отображаем результат

FV = Inp(&H378)                        'постоянно опрашиваем адрес &H378

If FV <> SV Then                       'если состояние порта изменилось

SV = FV                            'SV равно состоянию порта

cntr = cntr + 0.5                  'счетчик + 0.5

End If

If J = 0 Then Exit Do                  'если пользователь нажал Стоп

Loop

End Sub

Private Sub Command2_Click()

'остановка цикла

'если пользователь нажал Стоп

J = 0

End Sub

Private Sub Command3_Click()

J = 0             'счет - стоп

Out &H37A, 0      'восстанавливаем состояние шины D0-D7

Unload Me         'выход из программы

End Sub

'Подпрограмма отображения частоты

Public Sub FrequencyShow()

Label1.Caption = Int(cntr) & " Hz"  'отображаем результат

cntr = 0                            'счетчик в ноль

Pause (0.2)                         'задержка. Нужна для измерения малых частот

FTV = GetTickCount                  'запомнили системное время в миллисекундах

End Sub

'Подпрограмма задержки. Формат вызова: Pause(число секунд)

Public Sub Pause(Value As Single)

Dim Start, Finish

Start = Timer

Do While Timer < Start + Value

DoEvents

Loop

Finish = Timer

End Sub

*******************************************

Для тех, кто использует dlportio.dll

Option Explicit

'объявление библиотеки для работы с адресами порта

Private Declare Function DlPortReadPortUchar Lib "dlportio.dll" (ByVal Port As Long) As Byte

Private Declare Sub DlPortWritePortUchar Lib "dlportio.dll" (ByVal Port As Long, ByVal Value As Byte)

'объявление библиотеки для подсчета миллисекунд

Private Declare Function GetTickCount Lib "kernel32" () As Long

Dim FTV As Long         'начальное значение системного времени

Dim STV As Long         'конечное значение системного времени

Dim FV As Integer       'FV-начальное состояние порта

Dim SV As Integer       'SV-сравниваемое состояние порта

Dim cntr                'счетчик импульсов

Dim J As Integer        'J=1 счет разрешен, J=0 счет не разрешен

Private Sub Command1_Click()

DlPortWritePortUchar &H37A, 43     'переводим шины D0-D7 в режим чтения

FTV = GetTickCount                 'запомнили системное время в миллисекундах

J = 1                              'счет - разрешить

FV = DlPortReadPortUchar (&H378)   'считали состояние порта

SV = FV                            'SV равно состоянию порта

cntr = 0                           'счетчик в ноль

Do While J <> 0

DoEvents

STV = GetTickCount                     'запоминаем текущее системное время

If STV > FTV + 1000 Then FrequencyShow 'если прошла секунда, отображаем результат

FV = DlPortReadPortUchar (&H378)       'постоянно опрашиваем адрес &H378

If FV <> SV Then                       'если состояние порта изменилось

SV = FV                            'SV равно состоянию порта

cntr = cntr + 0.5                  'счетчик + 0.5

End If

If J = 0 Then Exit Do                  'если пользователь нажал Стоп

Loop

End Sub

Private Sub Command2_Click()

'остановка цикла

'если пользователь нажал Стоп

J = 0

End Sub

Private Sub Command3_Click()

J = 0       'счет - стоп

DlPortWritePortUchar &H37A, 0      'восстанавливаем состояние шины D0-D7

Unload Me   'выход из программы

End Sub

'Подпрограмма отображения частоты

Public Sub FrequencyShow()

Label6.Caption = Int(cntr) & " Hz"  'отображаем результат

cntr = 0                            'счетчик в ноль

Pause (0.2)                         'задержка. Нужна для измерения малых частот

FTV = GetTickCount                  'запомнили системное время в миллисекундах

End Sub

'Подпрограмма задержки. Формат вызова: Pause(число секунд)

Public Sub Pause(Value As Single)

Dim Start, Finish

Start = Timer

Do While Timer < Start + Value

DoEvents

Loop

Finish = Timer

End Sub

*******************************************

И все? Спросите ВЫ. Да и все. Вот и вся программа, которая почему-то работает.

Ø Как видите код практически один и тот же для разных библиотек, поэтому далее на примерах мы будем рассматривать код только с библиотекой dlportio.dll

Если внимательно проанализировать код программы частотомер, можно заметить, что к счетчику прибавляется 0.5,

cntr = cntr + 0.5,

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

Label1.Caption = Int(cntr) & "Hz"

Или прибавлять 1

cntr = cntr + 1,

А потом выводить

Label1.Caption = Int(cntr/2) & "Hz"

Вот такая математика.

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

Ну что, поехали дальше.

Берем тот же генератор импульсов и вместо резистора R2 или R1 впаиваем терморезистор (автор статьи сходил в автомагазин и за 30 руб. купил термодатчик от ВАЗ-2101). Этот термодатчик меняет свое сопротивление в зависимости от температуры (3200 Ом при температуре +140С и 143 Ома при температуре +1000С.) Раз мы меняем сопротивление, то меняется и частота генератора, значит мы получаем преобразователь температура-частота, т.е. цифровой термометр. Хочу обратить ваше внимание на то, что изменение сопротивления в зависимости от температуры, происходит не линейно, что видно на следующем графике,

Другая жизнь LPT порта
Рис. 5

поэтому "объяснить" компьютеру, что 100 импульсов это 20 градусов, а 110 импульсов - это 21 градус будет не очень просто, но тем не менее возможно. Вопрос только в размерах кода и алгоритме.

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

1.  Замеряем частоту импульсов при пустой емкости

2.  Доливаем какой-то объем (в зависимости от того, какую градацию - точность вы хотите получить) и опять замеряем частоту

3.  И так до самого верха вашей емкости.

А можно построить индикатор уровня жидкости по другому принципу, если собрать конструкцию на рисунке ниже.

Другая жизнь LPT порта
Рис. 6

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

Другая жизнь LPT порта
Рис. 7

Обрабатывать информацию с такого устройства можно по следующему алгоритму.

  1. Перевести шины по адресу &H378  в режим чтения.
  2. Пустой бак - 255
  3. Одно деление снизу - 254
  4. Два деления снизу - 252
  5. Три деления - 248
  6. Четыре деления - 240
  7. Пять делений - 224 и т.д.

Ø Некоторые могут мне возразить, что не обязательно переводить шины D0-D7 в режим чтения, и так все будет работать. На это могу ответить только следующее - кто хочет, пусть не переводит. Дискутировать на этот предмет - не буду. Если порт &H378 не стоит в режиме приема данных и на используемом контакте (в нашем случае 2 - D0 ) присутствует логическая "1", то генератор работать не будет. Выходной ток шины D0-D7 в режиме передачи данных больше, чем выходной ток КМОП микросхемы (561ЛА7), поэтому генерации не будет. Конечно, если закоротить пинцетом контакт на землю, то никакого тока не хватит. Но мне кажется, не трудно набрать лишнюю строчку кода и сделать так, как советуют разработчики компьютерного железа.

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

Другая жизнь LPT порта
Рис. 8

После подачи питания на генератор мы вдруг обнаружим, что генератор-то не работает. А будет он работать только тогда, когда на входе 2 элемента D1.1 появится уровень логической "1".

DlPortWritePortUchar &H378, 1

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

Вот такая схема

Другая жизнь LPT порта
Рис. 9

Вход данного устройства подключаем к любому понравившемуся нам выходу, например к D3, вход GND соединяем с общим проводом разъема, а вот  +12В придется взять от отдельного источника питания. Реле можно взять автомобильное. Вообще все параметры элементов могут быть совершенно другими (я брал то, что было под рукой)

DlPortWritePortUchar &H378, 8

или

DlPortWritePortUchar &H378, 9

или

DlPortWritePortUchar &H378, 10

Главное, чтобы на шине D3 была лог "1". Реле сработает, а вот что вы к нему подцепите - это уже ваше дело. Вообще при коммутации высоковольтных устройств необходимо (на всякий случай) предохраниться от короткого замыкания, от пробоя на корпус, в общем сделать так. Чтобы в случае аварии ваш чудесный LPT порт не сгорел. Поэтому для таких подключений удобно использовать гальваническую развязку порта и вашего устройства, например, через оптопару.

Другая жизнь LPT порта
Рис. 10

Если в вашем устройстве все "сгорит", то через свет - увы, ток не пройдет, не придумали еще такого.

На этом вторая часть заканчивается. Будет ли третья часть - думаю будет, а вот о чем в ней пойдет речь…

Автор: Клюшников Алексей, г. Иваново; Публикация: cxem.net

Смотрите другие статьи раздела Компьютеры.

Читайте и пишите полезные комментарии к этой статье.

<< Назад

Последние новости науки и техники, новинки электроники:

Чувства кота, ожидаюшего возвращения хозяина 16.07.2026

Многие владельцы кошек уверены, что их питомцы совершенно равнодушны к уходу человека из дома. Считается, что кошки - независимые существа, которые спокойно переносят одиночество и даже радуются, оставаясь одни. Однако испанские специалисты по поведению животных считают, что реальность гораздо сложнее. Реакция кошки на отсутствие хозяина зависит от ее индивидуального характера, степени привязанности к человеку и привычного распорядка дня. Кошки хорошо запоминают ежедневные ритуалы своих владельцев. Они способны связывать определенные звуки - звон ключей, шаги у двери или звук закрывающегося замка - с предстоящим уходом человека. Для одних животных эти сигналы означают возможность спокойно лечь спать, а для других становятся причиной беспокойства и длительного ожидания возвращения хозяина. Таким образом, кошка не просто "не замечает" уход, а активно реагирует на связанные с ним изменения в окружающей обстановке. Исследования поведения кошек показывают, что некоторые из них действи ...>>

Целесообразность приема пробиотиков после курса антибиотиков 16.07.2026

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

Резкое похудение и возврат веса могут навредить сердцу 15.07.2026

Многие люди, желая быстро избавиться от лишних килограммов, прибегают к строгим диетам с резким ограничением калорий. Достигнув желаемого результата, они часто постепенно или быстро возвращаются к прежнему рациону и прежнему весу. На первый взгляд это кажется лишь вопросом внешнего вида, однако ученые предупреждают: постоянные колебания массы тела могут оказывать негативное влияние на сердечно-сосудистую систему и обмен веществ. Так называемый эффект йо-йо, когда периоды активного похудения сменяются повторным набором веса, становится все более распространенным явлением. Новые исследования указывают на возможную связь между такими циклами и ухудшением работы сердца. Организм способен адаптироваться к изменениям питания, но постоянное повторение резких переходов между ограничением калорий и перееданием создает дополнительную нагрузку на различные системы. В одном из экспериментов на лабораторных животных исследователи моделировали эффект йо-йо, периодически снижая калорийность рац ...>>

Случайная новость из Архива

Открыто новое состояние воды 26.09.2020

Переохлажденная вода - это две жидкости в одной. К такому выводу пришли американские исследователи после проведения первых в истории измерений жидкой воды при температурах намного ниже ее обычной точки замерзания.

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

Дело в том, что вода не похожа на другие жидкости - при замерзании она расширяется, а не сжимается, как все остальные, ее плотность при этом уменьшается. Поэтому водяной лед не тонет, а плавает на поверхности. У воды высокая температура кипения и она прекрасный растворитель, поэтому в ней, при различных условиях, растворяется большинство органических и неорганических веществ. И, наконец, у нее огромный коэффициент поверхностного натяжения. Благодаря всем этим уникальным свойствам вода стала основой жизни на Земле.

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

Исследователи из Тихоокеанской северо-западной национальной лаборатории (PNNL) Министерства энергетики США решили проверить, если таких частиц не будет, до какой температуры вода останется жидкой.

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

Ученые в лаборатории разрушили лазером тонкую ледяную пленку, создав переохлажденную жидкую воду, а затем с помощью инфракрасной спектроскопии отследили все мельчайшие этапы ее преобразований в интервале температур от 135 до 245 кельвинов - от минус 138 до минус 28 градусов Цельсия.

На "стоп-кадрах" фазовых состояний ученые увидели, что при переохлаждении вода конденсируется в плотную жидкую фазу, которая продолжает сосуществовать с обычной жидкой фазой. При этом доля жидкости с высокой плотностью быстро уменьшается при повышении температуры от 190 до 245 кельвинов.

Другие интересные новости:

▪ Импульсный стабилизированный источник питания 12V/100A

▪ Чем пахнет в библиотеке

▪ Наносекундный транзистор на основе нитрида бора

▪ Двигатель на сухом льде

▪ Катастрофы от глобального потепления не будет

Лента новостей науки и техники, новинок электроники

 

Интересные материалы Бесплатной технической библиотеки:

▪ раздел сайта Ограничители сигнала, компрессоры. Подборка статей

▪ статья Темна вода во облацех. Крылатое выражение

▪ статья Какая планета Солнечной системы первой обнаружена с помощью телескопа? Подробный ответ

▪ статья Оказание первой доврачебной помощи при переломах

▪ статья Радиопередатчик повышенной мощности с кварцевой стабилизацией частоты. Энциклопедия радиоэлектроники и электротехники

▪ статья SMD-транзисторы. Энциклопедия радиоэлектроники и электротехники

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

Имя:


E-mail (не обязательно):


Комментарий:





Главная страница | Библиотека | Статьи | Карта сайта | Отзывы о сайте

www.diagram.com.ua

www.diagram.com.ua
2000-2026