Безкоштовна технічна бібліотека ЕНЦИКЛОПЕДІЯ РАДІОЕЛЕКТРОНІКИ ТА ЕЛЕКТРОТЕХНІКИ Інше життя 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 рекомендую наступну схему.
Резистори 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.
Сам генератор зібраний на елементах D1.1-D1.3, а елемент D1.4 я просто використав для більш "гарних" фронтів вихідних імпульсів. R1, R2, C1 - частотозадаючі елементи. За даних параметрів елементів частота генерації становить приблизно 5-7 Гц. Для наочності роботу генератора можна як наступного графіка:
Вихід інвертора D1.4 з'єднаний із 2 контактом LPT роз'єму (шина D0). Перед використанням генератора необхідно перевести шину D0-D7 в режим прийому даних. Для цього на адресу &H37A ми надсилаємо 43.
Після цього починаємо опитувати порт H378.
Мінлива A прийматиме значення то 254, то 255. Чому?
Справа в тому, що після переведення шин D0-D7 в режим прийому даних, на них виставляється рівень логічної одиниці (жовтий ряд). При появі на шині D0 рівня лог "0" (блакитний ряд) - перший біт набуває значення нуля, отже 0+21+22+23+24+25+26+27 = 254. Таким чином, ми можемо відстежити зміну сигналу на шині D0, а якщо ми порахуємо кількість змін за 1 секунду, то ми отримаємо... правильно - цифровий частотомір. Знаючи кількість імпульсів, що прийшли за секунду можна сказати про частоті у Герцях. Отже, програма частотомір. На формі мають бути 3 кнопки та Label. Кнопка 1 пуск частотомір, Кнопка 2 стоп, Кнопка 3 – вихід, Label – індикує частоту. ******************************************* Для тих, хто використовує inpout32.dll Варіант явний оголошення бібліотеки для роботи з адресами порту 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 'якщо користувач натиснув Стоп Петля 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 Петля Finish = Timer End Sub ******************************************* Для тих хто використовує dlportio.dll Варіант явний оголошення бібліотеки для роботи з адресами порту 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 'якщо користувач натиснув Стоп Петля 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 Петля 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С.) Якщо ми змінюємо опір, то змінюється і частота генератора, отже ми отримуємо перетворювач температура-частота, тобто. цифровий термометр. Хочу звернути вашу увагу на те, що зміна опору в залежності від температури відбувається не лінійно, що видно на наступному графіку,
тому "пояснити" комп'ютеру, що 100 імпульсів - це 20 градусів, а 110 імпульсів - це 21 градус буде не дуже просто, але проте можливо. Питання лише у розмірах коду та алгоритмі. Якщо замість резистора встановити датчик палива від бензобака, то ми отримаємо індикатор рівня рідини. Відбудовувати такий індикатор зручніше в такий спосіб: 1. Вимірюємо частоту імпульсів при порожній ємності 2. Доливаємо якийсь обсяг (залежно від того, яку градацію – точність ви хочете отримати) і знову заміряємо частоту 3. І так до верху вашої ємності. Можна побудувати індикатор рівня рідини за іншим принципом, якщо зібрати конструкцію на малюнку нижче.
Якщо змінюється рівень рідини, то змінюється і положення поплавця з магнітом, замикаються (розмикаються) відповідні геркони. Трубку найкраще використовувати тонкостінну пластикову. Схема цього пристрою така:
Обробляти інформацію з такого пристрою можна за таким алгоритмом.
Деякі можуть мені заперечити, що не обов'язково переводити шини D0-D7 в режим читання, і так все працюватиме. На це можу відповісти лише наступне – хто хоче, хай не перекладає. Дискутувати на цей предмет – не буду. Якщо порт &H378 не стоїть в режимі прийому даних і на контакті, що використовується (у нашому випадку 2 - D0 ) присутня логічна "1", то генератор працювати не буде. Вихідний струм шини D0-D7 у режимі передачі даних більший, ніж вихідний струм КМОП мікросхеми (561ЛА7), тому генерації не буде. Звичайно, якщо закоротити пінцетом контакт на землю, то жодного струму не вистачить. Але мені здається, не важко набрати зайву строчку коду і зробити так, як радять розробники комп'ютерного заліза. Давайте розглянемо зворотний процес, тобто. процес передачі даних із комп'ютера на ваш пристрій. Візьмемо для прикладу той самий генератор імпульсів, тільки трохи змінимо його схему.
Після подачі живлення на генератор ми раптом виявимо, що генератор не працює. А працюватиме він лише тоді, коли на вході 2 елементи D1.1 з'явиться рівень логічної "1". DlPortWritePortUchar &H378, 1 І все одразу запрацювало. Ось вам генератор, керований комп'ютером. Ну, генератор це все дрібно, хоча треба віддати належне цьому пристрою - в багатьох електронних схемах за основу взятий саме генератор імпульсів. А чи не підключити нам щось серйозніше до комп'ютера. Ось така схема
Вхід даного пристрою підключаємо до будь-якого виходу, що нам сподобався, наприклад до D3, вхід GND з'єднуємо із загальним проводом роз'єму, а ось +12В доведеться взяти від окремого джерела живлення. Реле можна взяти автомобільне. Взагалі, всі параметри елементів можуть бути зовсім іншими (я брав те, що було під рукою). DlPortWritePortUchar &H378, 8 або DlPortWritePortUchar &H378, 9 або DlPortWritePortUchar &H378, 10 Головне, щоб на шині D3 була балка "1". Реле спрацює, а ось що ви до нього підчепите – це вже ваша справа. Взагалі при комутації високовольтних пристроїв необхідно (про всяк випадок) захиститися від короткого замикання, від пробою на корпус, загалом зробити так. Щоб у разі аварії ваш чудовий порт LPT не згорів. Тому для таких підключень зручно використовувати гальванічну розв'язку порту та вашого пристрою, наприклад через оптопару.
Якщо у вашому пристрої все "згорить", то через світло - на жаль, не пройде струм, не придумали ще такого. На цьому друга частина закінчується. Чи буде третя частина - думаю буде, а ось про що в ній йтиметься. Автор: Клюшников Олексій, м. Іваново; Публікація: cxem.net Дивіться інші статті розділу Комп'ютери. Читайте та пишіть корисні коментарі до цієї статті. Останні новини науки та техніки, новинки електроніки: Машина для проріджування квітів у садах
02.05.2024 Удосконалений мікроскоп інфрачервоного діапазону
02.05.2024 Пастка для комах
01.05.2024
Інші цікаві новини: ▪ Підвищення якості марсіанського ґрунту ▪ ТБ заважає немовлятам вчитися говорити ▪ Нанотрубочки відштовхують воду Стрічка новин науки та техніки, новинок електроніки
Цікаві матеріали Безкоштовної технічної бібліотеки: ▪ Розділ сайту Посадові інструкції. Добірка статей ▪ стаття Сміятися, право, не грішно з усього, що здається смішно. Крилатий вислів ▪ Що відбувалося у США у ХIХ ст.? Детальна відповідь ▪ стаття Черговий пульта керування з прийому сигналів. Типова інструкція з охорони праці ▪ стаття Технологічні поради. Енциклопедія радіоелектроніки та електротехніки ▪ Стабілізатор напруги на 35 вольт. Енциклопедія радіоелектроніки та електротехніки
Залишіть свій коментар до цієї статті: All languages of this page Головна сторінка | Бібліотека | Статті | Карта сайту | Відгуки про сайт www.diagram.com.ua |