Контроль 15-ти контактів одним входом PIC-мікроконтролера

В деяких простих методах контролю натискання кнопок використовується мінімальна кількість входів. Для цього використовуються RC-ланцюги, в яких вимірюється час спрацьовування для ідентифікації натиснутої кнопки, або використовується вхід АЦП з резисторним дільником для кожної натиснутої кнопки.

В цьому невеликому проекті використовується всього лише один вихід мікроконтролера для контролю натискання до 15 кнопок. Використовуваний мікроконтролер повинен мати на борту вбудований компаратор з вибираними значеннями для внутрішнього джерела опорної напруги VREF. Більшість 8-бітних PIC мікроконтролерів середнього сімейства мають один або два внутрішніх компаратора, що цілком підходить для виконання нашого проекту.

Алгоритм роботи наступний:

1. Стан простою, Vref = (1 / 24).Vdd. Vcin- = 0 < Vref --- Cout = 1

2. Натиснута будь-яка кнопка --- Vcin->Vref --- Cout = 0 --- Виклик переривання

3. Усередині переривання, збільшується Vref = (i / 24).Vdd, де i = від 2 до 15, поки Vref > Vсin- --- Cout = 1 далі --- була натиснута кнопка Btn(i-1).

(якщо Vref залишається < Vсin-, тоді i = 16 --- була натиснута кнопка Btn15)

4. Чотири світлодіоди будуть відображати двійковий код натиснутої кнопки.

Схема контролю натискання 15 кнопок
Рисунок 1 Схема контролю натискання 15 кнопок

На Рисунку 1 показано 8-бітний мікроконтролер PIC12F683, який контролює 4-бітний світлодіодний дисплей, що відображає, яка з кнопок була натиснута. Програма обробки переривання від компаратора миттєво реагує на будь-яку натиснуту кнопку. Підпрограма перевіряє по колу значення VREF, поки на виході компаратора COUT не з'явиться високий потенціал, який буде означати, що одна з кнопок була натиснута.

Повністю завершений програмний код на асемблері з коментарями має всього лише 100 слів. Він не надто оптимізований, тому ви зможете з легкістю його адаптувати для будь-якого іншого мікроконтролера.

Оригінал статті

Top