на головну | список тем | перегляд презинтацій | самотестування | історія створення

 

 

 

Тема 28. Розробка клавіатури

Різні клавіатури з великою кількістю клавіш (кнопок) широко використовуються в цифрових системах: в комп'ютерах, контролерах, вимірювальних приладах, в побутовій техніці. Основна задача будь-якої клавіатури досить проста: вона повинна при будь-якому натисненні на клавішу видавати код номера цієї клавіші і сигнал прапора натиснення клавіші (строб цього коду). Одержавши цей сигнал прапора, зовнішній пристрій читає код натискуючої клавіші і робить необхідні дії.
Головна задача при проектуванні клавіатури полягає в мінімізації апаратурних витрат і в забезпеченні надійного спрацьовування в будь-якій ситуації. Існує маса рішень схемотехнік цієї задачі, від примітивних до найскладніших. Клавіатури можуть бути механічними, квазісенсорними або сенсорними, клавіатури можуть мати жорстку логіку роботи або бути інтелектуальними, навіть допускати перепрограмування. Ми як приклад розглядатимемо найпростішу механічну клавіатуру з жорсткою логікою роботи.
Кількість клавіш повнорозмірної клавіатури комп'ютера перевищує сотню, тому ми проектуватимемо клавіатуру на максимальну кількість клавіш, рівну 128. Природно, клавіатура повинна мати захист від брязкоту механічних контактів і повинна коректно обробляти ситуацію одночасного натиснення декількох клавіш. Приймемо, наприклад, що при одночасному натисненні декількох клавіш клавіатура повинна видавати код тільки однією з них. Приймемо також, що максимально можливий темп натиснення клавіш на клавіатурі не повинен перевищувати 20 натиснень в секунду (це занадто багато). Таким чином, основні вимоги до проектованого пристрою сформульовані. Почнемо розробку.
Дуже часто зручним і ефективним прийомом розробки є початок розробки пристрою «з кінця». Тобто проектування починається, виходячи з необхідного результату, з тих сигналів, які пристрій повинен видавати зовні і приймати ззовні. І лише в кінці проектування розробляється та частина пристрою, яка виконує необхідну функцію. Такий підхід гарантує, що розроблений пристрій не буде надмірно надмірним, не робитиме нічого зайвого, а також те, що він буде коректно взаємодіяти з іншими пристроями і системами. Цей принцип проектування не універсальний, деколи витримати його протягом всього процесу розробки важко, але спробувати його застосувати до будь-якого пристрою ніколи не перешкодить.
В нашому випадку необхідно спочатку визначитися, що повинна видавати зовні клавіатура. Звичайно це задається технічним завданням, але ми приймемо, що наша клавіатура повинна видавати 7-розрядний двійковий номер натискуючої клавіші (оскільки 27 = 128) і супроводжувати його позитивним сигналом прапора натиснення. Сигнал прапора і код клавіші повинні зберігатися до тих пір, поки натиснена клавіша. За цей час (декілька мілісекунд) зовнішній пристрій повинен встигнути проаналізувати сигнал прапора і прочитати вихідний код клавіатури. Звичайно дана вимога є не дуже жорсткою.
Альтернативне рішення - збереження коду натисненої клавіші і сигналу прапора до моменту читання вихідного коду зовнішнім пристроєм - звичайно ж, знижує вимогу до швидкодії читаючого зовнішнього пристрою, проте воно може привести до того, що деякі натиснення клавіш залишаться без реакції, не будуть оброблені.
Необхідно також визначитися, як клавіатура поводитиметься при одночасному натисненні декількох клавіш. Найскладніші, інтелектуальні клавіатури видають послідовно коди всіх натиснених клавіш, запам'ятовуючи їх в буферній пам'яті. Але ми приймемо, що клавіатура повинна видавати тільки код однієї з одночасно натиснених клавіш (першої по встановленому порядку). Натиснення всієї решти клавіш одночасно з даною клавішею просто ігноруються.
При проектуванні механічної клавіатури важливо вирішити, як оброблятиметься неминуче присутній брязкіт механічних контактів клавіш. Його можна обробляти як усередині клавіатури, так і зовні (тобто перенести цю функцію на зовнішній пристрій). Обидва ці підходи мають свої переваги. Але наша клавіатура оброблятиме брязкіт контактів самостійно. Принцип обробки вибираємо дуже простою: перше зафіксоване замикання контактів клавіші вважається початком натиснення, а кінець натиснення визначається тоді, коли контакти будуть розімкнені протягом заданого інтервалу часу.
В результаті тимчасова діаграма роботи клавіатури, що розробляється, може бути спрощено представлена у вигляді малюнок 28.1. Тут сигнал прапора починається при фіксації одиничного сигналу з клавіші (це може бути як під час брязкоту, так і після його закінчення). Після виставляння прапора фіксується вихідний код клавіші. Після відпуску клавіші (нульовий сигнал), через час затримки tзад знімається сигнал прапора. Час затримки повинен бути явно більше часу брязкоту контактів. Вихідний код може зберігатися після відпуску клавіші до наступного натиснення, а може і зніматися.

gf

Малюнок 28.1. Тимчасова діаграма роботи клавіатури.

Подальша розробка неможлива без вибору принципу перетворення сигналів від натиснення клавіш в код номера натискуючої клавіші.
Найпростішим шляхом побудови подібного перетворювача є використовування пріоритетних шифраторів (малюнок 28.2).
Кожна клавіша дає свій логічний сигнал, сигнали від всіх клавіш перетворяться шифратором в код номера клавіші. Проте такий найпростіший підхід хороший тільки при невеликій кількості клавіш (до 8 або до 16), оскільки при великій кількості входів пріоритетний шифратор виходить досить складним. При малій кількості клавіш брязкіт контактів звичайно усувається окремо для кожної клавіші за допомогою RS-трігера (як це показано на малюнку). Це рішення просте, але вимагаюче великих апаратурних витрат.
Іншим шляхом побудови перетворювача є використовування так званої комутаційної матриці, стан якої періодично опитується з частотою тактового генератора. Комутаційна матриця є двома групами пересічних провідників (рядки і стовпці), у всіх точках перетину яких знаходяться клавіші. В даному випадку кожна клавіша не формує свого окремого логічного сигналу, а тільки комутує (сполучає) один з рядків матриці з одним з її стовпців.

hjfk

Малюнок 28.2. Найпростіший перетворювач для клавіатури.

Сама універсальна схема перетворювача, легко нарощувана і достатньо проста, приведена на малюнку 28.3.

kyfrjtr

Малюнок 28.3. Перетворювач з опитом всіх клавіш.

Для опиту комутаційної матриці використовується лічильник, тактований генератором. Старші розряди лічильника використовуються для вибору одного з рядків матриці за допомогою дешифратора (на вибраний рядок поступає сигнал логічного нуля, на невибрану - сигнал логічної одиниці). Молодші розряди лічильника використовуються для опиту стовпців матриці за допомогою мультиплексора. Сигнал з опитуваного стовпця подається на вихід мультиплексора. Ознакою натиснення клавіші є нульовий сигнал на виході мультиплексора. У цей момент на виходах лічильника присутній код номера натисненої клавіші. Така схема легко дозволяє будувати клавіатури на велику кількість клавіш (до 256, як на малюнку, і навіть більше), проте вона вимагає досить великого часу для повного опиту клавіатури (оскільки кількість тактів опиту рівна повній кількості клавіш).
Поєднання двох розглянутих підходів дозволяє будувати достатньо великі клавіатури з малими апаратурними витратами і малим часом опиту.
При такому комбінованому методі (малюнок 28.4) також використовується комутаційна матриця з клавішами на всіх перетинах рядків і стовпців, але опитуються не всі клавіші по черзі, а тільки рядки (або стовпці) матриці. Для опиту, як і у попередньому випадку, застосовуються генератор, лічильник і дешифратор. Положення ж натисненої клавіші в рядку (або в стовпці) визначається за допомогою шифратора. Код натисненої клавіші утворюється з вихідного коду лічильника (старші розряди) і коду з виходу шифратора (молодші розряди).
В нашому випадку клавіатура має 128 клавіш, тобто комутаційна матриця повинна складатися з 16 рядків, опитуваних дешифратором 4-16 (ИДЗ), і 8 стовпців, сигнали з яких обробляються шифратором 8-3 (ИВ1). Лічильник повинен мати 4 розряди (ИЕ7). Ці 4 розряди і 3 розряди з виходу шифратора дадуть 7-розрядний номер натисненої клавіші. Повний цикл опиту клавіатури займатиме 16 тактів генератора (по числу рядків). Ознакою натиснення однієї з клавіш буде негативний сигнал на виході -GS шифратора. Якщо натиснені декілька клавіш в різних рядках, то оброблятися буде та клавіша, рядок якої буде опитаний першою. Якщо натиснено декілька клавіш в одному рядку, то шифратор видасть код клавіші, відповідної більшому номеру входу. Треба також враховувати, що шифратор ИВ1 видає інверсний номер входу, на який прийшов нульовий сигнал, ця особливість може зажадати вживання трьох вихідних інвертувань (на малюнку не показані).

tdfjkt

Малюнок 28.4. Перетворювач з опитом рядків клавіш

Оцінимо, якою повинна бути частота тактового генератора. Ми прийняли, що максимальна швидкість натиснення рівна 20 разів в секунду. Значить, за 1/20 секунди треба встигнути опитати всю клавіатуру, тобто всі 16 рядків. Таким чином, мінімально допустима тактова частота складає 16 • 20 = 320 Гц. Але треба закласти і запас на обробку брязкоту контактів. Тому приймемо тактову частоту опиту рівну 400 Гц. Вона може бути і більше, але надмірно збільшувати її (наприклад, вище 1 кГц) не варто, оскільки при швидкому перемиканні мікросхем збільшується споживаний схемою струм. Зрозуміло, що генератор повинен бути не кварцовим, оскільки кварцові резонатори на низькі частоти не випускаються, а дільник частоти різко ускладнить схему. До того ж точна витримка частоти генератора в даному випадку абсолютно не потрібна.
Вихідний сигнал -Нажатие, звичайно ж, матиме короткі паразитні імпульси. По-перше, вони виникатимуть через брязкіт контактів натисненої в даний момент клавіші. По-друге, вони можуть виникати через перехідні процеси при перемиканні лічильника і дешифратора. Ці паразитні імпульси треба виключати.
Щоб виключити дію паразитних імпульсів через перехідні процеси при перемиканні лічильника і дешифратора, достатньо застосувати стробування або тактування  сигналу -Нажатие в середині кожного тактового інтервалу. Для цього з схеми перетворювача треба вивести сигнал -Такт.
Виключення коротких вихідних імпульсів через брязкіт контактів клавіш складніше. Перш за все, на час натиснення клавіші доцільно зупинити опит рядків за допомогою сигналу -Запрет. Потім треба обробити сигнал -Нажатие за принципом, показаним на малюнок 28.1. Вважатимемо, що при брязкоті контактів тривалість короткочасного розмикання не перевищує періоду тактового генератора (2,5 мс при тактовій частоті 400 Гц). Тоді затримка закінчення сигналу прапора натиснення (див. малюнок 28.1) повинна бути не менше одного періоду тактового сигналу. Для вироблення затримки можна використовувати ланцюжок трігерів, тактованих сигналом -Такт.
Схема вироблення вихідних сигналів клавіатури приведена на малюнку 28.5.


uuu

Малюнок 28.5. Схема вироблення вихідних сигналів клавіатури.

Інверсний вихід трігера Т1 перемикається в стан логічної 1 в середині тактового інтервалу (по позитивному фронту сигналу -Такт), якщо сигнал -Нажатие - нульовий. Своїм вихідним сигналом трігер Т1 перекидає в одиницю трігер Т2, який вже ніяк не пов'язаний з сигналом -Нажатие, не реагує ні на який брязкіт цього сигналу. Вихідний сигнал трігера Т2 використовується як сигнал прапора натиснення клавіатури. Інверсний сигнал з виходу трігера Т2 використовується як сигнал -Запрет, що зупиняє опит рядків клавіатури.
Ланцюжок трігерів ТЗ і Т4, тактований сигналом -Такт, служить для затримки зняття сигналу прапора після відпуску клавіші (коли сигнал -Нажатие стає рівним одиниці). Після установки прапора в одиницю сигнал прапора починає записуватися по фронту сигналу -Такт в трігери ТЗ і Т4, але тільки у тому випадку, коли сигнал -Нажатие встановлений в одиницю. В результаті на інверсному виході трігера Т4 з'явиться сигнал логічного нуля при одиничному значенні сигналу -Нажатие в моменти двох послідовних позитивних фронтів сигналу -Такт. Сигнал з виходу Т4 скидає сигнал прапора в нуль, після чого вся схема переходить в початковий стан і чекає наступного нульового сигналу -Нажатие.
Якщо короткочасне розмикання при брязкоті контактів клавіш триває більше 2,5 мс, то можна збільшити кількість трігерів в послідовному ланцюжку (ТЗ і Т4), що приведе до збільшення затримки зняття сигналу прапора на ціле число тактів генератора.

Таким чином, схема повністю розроблена. Відзначимо, що низька тактова частота роботи схеми дозволяє нам не розраховувати затримок мікросхем, тобто використовувати тільки перший рівень уявлення, логічну модель. А ефекти, пов'язані з перехідними процесами при перемиканні мікросхем, ми усунули, забезпечивши часовий зсув між тактовими сигналами схеми перетворювача (малюнок 28.4) і схеми вироблення вихідних сигналів (малюнок 28.5) на половину періоду генератора. Номінали всіх резисторів, застосованих в схемі, повинні бути близько 1 кОм.

попередня тема наступна тема