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

Мал. 14.2. Найпростіший перетворювач для клавіатури
Іншим шляхом побудови перетворювача є використання так званої комутаційної матриці, стан якої періодично опитується з частотою тактового генератора. Комутаційна матриця являє собою дві групи пересічних провідників (рядки і стовпці), у всіх точках перетину яких знаходяться клавіші. В даному випадку кожна клавіша не формує свого окремого логічного сигналу, а тільки комутує (з'єднує) одну з рядків матриці з одним з її стовпців.
Найбільш універсальна схема перетворювача, легко нарощувана і досить проста, наведена на рис. 14.3.
Для опитування комутаційної матриці застосовується лічильник, тактируемого генератором. Старші розряди лічильника використовуються для вибору однієї з рядків матриці за допомогою дешифратора (на обрану рядок надходить сигнал логічного нуля, на невибраний - сигнал логічної одиниці). Молодші розряди лічильника використовуються для опитування стовпців матриці за допомогою мультиплексора. Сигнал з опитуваного стовпчика подається на вихід мультиплексора. Ознакою натискання клавіші є нульовий сигнал на виході мультиплексора. У цей момент на виходах лічильника присутній код номера натиснутоюклавіші. Така схема легко дозволяє будувати клавіатури на велику кількість клавіш (до 256, як на малюнку, і навіть більше), проте вона вимагає досить великого часу для повного опитування клавіатури (так як кількість тактів опитування одно повного кількості клавіш).

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

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

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