Контроль 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. Чотири світлодіоди будуть відображати двійковий код натиснутої кнопки.
Рисунок 1 Схема контролю натискання 15 кнопок
На Рисунку 1 показано 8-бітний мікроконтролер PIC12F683, який контролює 4-бітний світлодіодний дисплей, що відображає, яка з кнопок була натиснута. Програма обробки переривання від компаратора миттєво реагує на будь-яку натиснуту кнопку. Підпрограма перевіряє по колу значення VREF, поки на виході компаратора COUT не з'явиться високий потенціал, який буде означати, що одна з кнопок була натиснута.
Повністю завершений програмний код на асемблері з коментарями має всього лише 100 слів. Він не надто оптимізований, тому ви зможете з легкістю його адаптувати для будь-якого іншого мікроконтролера.