Подключение до 15 кнопок к одному выводу PIC

В статье мы рассмотрим один простой способ, позволяющий контролировать до 15 кнопок, подключенных лишь к одному выводу микроконтроллера. Единственным требованием для реализации этого метода является наличие в микроконтроллере внутреннего аналогового компаратора с функцией настройки значения опорного напряжения (VREF). Большинство 8-разрядных микроконтроллеров PIC компании Microchip имеют один или два таких компаратора.

В качестве простого и практичного примера в изображенной на рисунке схеме используется микроконтроллер PIC12F683 и 4 светодиода, в двоичном формате индицирующие номер нажатой кнопки. Кнопки подключены к выводу GP1 микроконтроллера (вход CIN- аналогового компаратора). Для тактирования микроконтроллера используется внутренний генератор.

15keys

Контроль состояния кнопок выполняется в обработчике прерываний от аналогового компаратора, который вызывается при нажатии любой кнопки. В обработчике прерываний выполняется пошаговое изменение значения опорного напряжения компаратора до тех пор, пока на выходе компаратора СOUT не появится «лог. 1».

В краткой форме алгоритм можно описать следующим образом.

  1. Исходное состояние: режим пониженного энергопотребления (Idle). Опорное напряжение компаратора VREF устанавливается на уровне VREF = (1/24)Vdd, напряжение VCIN- на входе компаратора CIN- равно 0 – меньше значения опорного напряжения, на выходе компаратора COUT «лог. 1».
  2. В случае нажатия любой кнопки напряжение VCIN- становится больше опорного напряжения и на выходе компаратора появляется «лог. 0», что вызывает прерывание.
  3. В обработчике прерывания выполняется пошаговое изменение опорного напряжения согласно выражению VREF = (i/24)Vdd, где i принимает значения от 2 до 15. Изменение опорного напряжения выполняется одновременно с проверкой условия VREF > VCIN-, и как только оно выполняется, на выходе компаратора COUT появится «лог. 1», указывающая на то, что нажата кнопка с индексом Btn(i-1). Если же опорное напряжение остается меньше входного VCIN- при значении i = 16, значит, нажата кнопка Btn15.
  4. Четыре светодиода отображают двоичный номер (индекс) нажатой кнопки.

Исходный код программы микроконтроллера на ассемблере с подробными комментариями занимает менее 100 слов. Он легок для понимания и может использоваться на других микроконтроллерах.

Загрузка...