Опитування дискретних датчиків
Практично жоден мікропроцесорний пристрій не обходиться без кнопок і простих датчиків. За допомогою цих периферійних елементів в МПП надходить різна інформація, яка використовується для зміни алгоритму роботи програми. Схема підключення контактного датчика до МК наведена на рисунку 1. У наведеному прикладі датчик підключений до лінії РD0 порту D МК. Через цей вхід МК проводить зчитування стану датчика. Датчик можна підключити і до будь-якої іншої лінії будь-якого з портів МК.
Рисунок 1 – Підключення контактного датчика до МК
Рисунок 2 – Підключення кнопок або простих датчиків до МК
У початковому стані контакти датчика розімкнені. На вхід МК через резистор R1 прикладається напруга від джерела живлення + 5 В. МК сприймає цю напругу як сигнал логічної одиниці. При спрацьовуванні датчика контакти замикаються і з’єднують вивід МК із загальним дротом. Тепер мікросхема сприймає вхідний рівень сигналу як логічний нуль. Резистор R1 при цьому служить струмообмежувальним елементом, запобігаючи короткому замиканню між шиною живлення і загальним дротом. Деякі МК мають свої внутрішні резистори навантаження, які можуть замінити зовнішній резистор. Схема підключення декількох датчиків або кнопок до МК зображена на рисунку 2.
Рисунок 3 – Підключення кнопок зміною напруги на аналоговому вході МК
У схемі, що зображена рисунку 3, при натисканні однієї з клавіш змінюється постійна напруга на відповідному вході процесора, яка розпізнається процесором і дешифрується в певну команду. Ця напруга максимальна (приблизно 5 В), коли кнопки не натиснуті, і мінімальна (0 В) при натиснутій клавіші S1.
Існує два види клавіатур, що підключаються до МК: зі скануванням і з кодуванням. Блок-схема 12-клавішної клавіатури зі скануванням показана на рисунку 4.
Рисунок 4 – Матрична клавіатура 4×3
Клавіші розташовані у вузлах матриці, у якої чотири лінії рядків і три лінії стовпців. На лінії стовпців по черзі подається негативний імпульс (логічний "0"). У цей момент перевіряється стан чотирьох ліній рядків. Якщо натиснутих клавіш немає, всі лінії рядків мають високий рівень (вони підключені до напруги +5 В через резистори). Якщо ж клавіша натискається, і на лінії стовпця, відповідного натиснутій клавіші, все ще нуль, то адекватна лінія рядка також стає рівною нулю. Знаючи номери стовпця і рядка, можна отримати позицію натиснутої клавіші.
У клавіатурі з кодуванням застосовують спеціалізовані мікросхеми, які виявляють натискання клавіші і передають її код. Прикладом такого пристрою є мікросхема MM74C922 (National Semiconductors).
Окрім розпізнавання положення натиснутої клавіші слід програмно захиститися від "тремтіння" контактів, тобто від впливу перехідних процесів, а також від ситуацій, пов'язаних з одночасним натисканням декількох клавіш.
Для того, щоб запобігти протіканню небезпечних струмів при одночасному замиканні декількох клавіш у одному стовпці, в лініях R-0...R-3 зазвичай встановлюють послідовно резистори або діоди. З цією ж метою можна використовувати і інший метод сканування, при якому всі неактивні горизонтальні шини, окрім шини нуля, що "біжить", програмно призначаються входами. Впливу перехідних процесів можна уникнути, якщо повторно зчитувати стан входів матриці сканування через певну часову затримку.
Рисунок 5 – Мультиплексорне керування матричною клавіатурою та семисегментним світлодіодним табло
Для раціонального використання ресурсу портів їх виводи, які використовуються для сканування клавіатури, можна використовувати і для інших функцій, наприклад, для підтримки динамічної світлодіодної індикації. На рисунку 5 показаний приклад такого мультиплексування портів МК.
Схема клавіатури з дешифратором наведена на рисунку 6. У цій схемі для вибору одного з чотирьох стовпців клавіатури використовується дешифратор DD2 типу К555ИД4. У такій схемі для сканування стовпців МК повинен подавати на виходи РD0 і РD1 двійковий код номера стовпця. Код надходить на входи А0 і А1 дешифратора. В результаті один з його виходів (той, номер якого відповідає коду, що надійшов) прийме нульове значення. На решті виходів буде одиниця. Так, при коді 00 на вході дешифратора вихід Q0 (вивід 9) приймає нульове значення. Для коду 01 – нуль буде на виході Q1 і так далі. Таким чином, МК може перебирати всі чотири стовпці, використовуючи всього два розряди.
Рисунок 6 – Підключення клавіатури з використанням дешифратора
Існують й інші способи зменшення числа використання виводів МК, призначених для сканування клавіатури. Реалізація одного з таких способів наведена на рисунку 7. У звичайних матричних клавіатурах при замиканні кожного контакту утворюється електричне з'єднання між вихідною і вхідною ланками схеми сканування. Але якщо змінити топологію розташування клавіш так, щоб при замиканні контакту забезпечувалася зміна потенціалів групи шин, то число кодованих клавіш можна значно збільшити. Така конструкція клавіатури забезпечує кодування більшого числа клавіш, ніж звичайна матрична, при однаковому числі шин, що використовуються для кодування. Збільшення досягнуте за рахунок того, що додаткові кодові комбінації утворюються парами шин кодування.
Рисунок 7 – Топологія клавіатури з одним контактором
Для подібного варіанта топології сканування не потрібне. Всі шини є входами з підтягуванням до напруги живлення резисторами. Контактор з’єднаний з загальною шиною. При замиканні контакту потенціал контактора передається на одну або дві кодові шини, на перетині яких він знаходиться. Якщо ввести другий замикальний контактор з потенціалом живлення, то можна вдвічі збільшити число сканованих клавіш. Для цього варіанту необхідно проводити сканування, наприклад, з періодом 20-30 мс. При скануванні використовується ефект пам'яті на паразитній ємкості шин. У першій фазі сканування всі шини визначаються виходами, і на них подається потенціал логічного 0. Потім виводи порту перевизначаться як входи, і проводиться зчитування їх стану. Факт замикання фіксується за зміною потенціалу, після чого проводиться друга фаза сканування. Цього разу на шини подається потенціал живлення, проводиться аналіз можливих станів шин і визначаються позиції замкнутих контактів.
;Підпрограма опитування клавіатури 3*5
;Опитування першого стовпця
Klava:
ldi temp, 0b11110111 ;код стовпця 1
out PortB, temp ;
sbis PinB,0 ;Перевіряємо клавішу 1
ldi sklav,1 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,1 ;Перевіряємо клавішу 6
ldi sklav,6 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,2 ;Перевіряємо клавішу 11
ldi sklav,11 ;Якщо натиснута зберігаємо код в
;клавіші в регістрі стану клавіатури
; Опитування другого стовпця
ldi temp, 0b11101111 ;код стовпця 2
out PortB, temp ;
sbis PinB,0 ;Перевіряємо клавішу 2
ldi sklav,2 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,1 ;Перевіряємо клавішу 7
ldi sklav,7 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,2 ;Перевіряємо клавішу 12
ldi sklav,12 ;Якщо натиснута зберігаємо код в
;клавіші в регістрі стану клавіатури
; Опитування третього стовпця
ldi temp, 0b11011111 ;код стовпця 3
out PortB, temp ;
sbis PinB,0 ;Перевіряємо клавішу 3
ldi sklav,3 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,1 ;Перевіряємо клавішу 8
ldi sklav,8 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,2 ;Перевіряємо клавішу 13
ldi sklav,13 ;Якщо натиснута зберігаємо код в
;клавіші в регістрі стану клавіатури
; Опитування четвертого стовпця
ldi temp, 0b10111111 ;код стовпця 4
out PortB, temp ;
sbis PinB,0 ;Перевіряємо клавішу 4
ldi sklav,4 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,1 ;Перевіряємо клавішу 9
ldi sklav,9 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,2 ;Перевіряємо клавішу 14
ldi sklav,14 ;Якщо натиснута зберігаємо код в
;клавіші в регістрі стану клавіатури
; Опитування п’ятого стовпця
ldi temp, 0b01111111 ;код стовпця 5
out PortB, temp ;
sbis PinB,0 ;Перевіряємо клавішу 5
ldi sklav,5 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,1 ;Перевіряємо клавішу 10
ldi sklav,10 ;Якщо натиснута зберігаємо код
;клавіші в регістрі стану клавіатури
sbis PinB,2 ;Перевіряємо клавішу 15
ldi sklav,15 ;Якщо натиснута зберігаємо код в
;клавіші в регістрі стану клавіатури
rcall drebezg ;Виклик підпрограми захисту від тремтіння
;контактів
; Достатьо 4 NOP. Потрібно для того, щоб перед перевіркою дати ніжці час на
; те, щоб зайняти потрібний рівень. Річ у тому, що реальна схема має деяке
; значення С і L, яке робить неможливою миттєву зміну рівня, невелика затримка
; все ж є. А на швидкості в 8Мгц і вище процесор клацає команди з такою, що
; швидкістю напруга на виводі ще не спала, а ми вже перевіряємо стан виводу.
ret ;Вихід з підпрограми
<== предыдущая лекция | | | следующая лекция ==> |
Приклад виконання завдання | | | ОБЩИЕ ПРОБЛЕМЫ СПЕЦИАЛЬНОЙ ПСИХОЛОГИИ 1 страница |
Дата добавления: 2015-10-19; просмотров: 806;