Главная » Микроконтроллеры » Подключение нескольких тактовых кнопок к одному выводу микроконтроллера

Подключение нескольких тактовых кнопок к одному выводу микроконтроллера

Обычно для одной тактовой кнопки требуется один цифровой вывод микроконтроллера. В некоторых конструкциях используется мультиплексирование сигналов клавиатуры с целью уменьшить количество входов.

Однако существуют и другие методы, которые позволяют подключать множество кнопок к одному выводу микроконтроллера. В этом статье рассмотрим один из таких приемов на примере микроконтроллера PIC12F683. Забегая вперед, следует сказать, что этот метод будет работать и с другими микроконтроллерами PIC, AVR, имеющими в своем составе АЦП.

В нашем случае к микроконтроллеру PIC12F683 подключены четыре светодиода и четыре тактовые кнопки. Каждый светодиод управляется через отдельный вывод I/O, а все четыре кнопки подключены к одному выводу АЦП микроконтроллера PIC12F683.

Теория

Методика подключения нескольких тактовых кнопок к одному каналу АЦП очень проста. Один вывод каждой кнопки подключается к источнику питания через отдельный подтягивающий резистор, а другой вывод заземляется через общий резистор. Когда кнопка нажата, она образует делитель напряжения между клеммами источника питания и заземления.

Значение делителя напряжения можно сделать уникальным для всех четырех кнопок, выбрав разные сопротивления подтягивающих резисторов. После нажатия кнопки, напряжение с делителя измеряется с помощью АЦП микроконтроллера, и это позволяет определить, какая из четырех кнопок была нажата.

Принципиальная схема, показанная ниже, вероятно, даст вам более четкое представление об этом методе. Четыре кнопки (SW1-Sw4) подключены к контакту AN0 микроконтроллера PIC12F683. Их один конец заземлен через общий резистор R (470 Ом), тогда как другой конец каждой кнопки подтянут через резисторы разного номинала (R1′-R4′), что обеспечивает разное напряжение на выходе делителя напряжения.

Таким образом, падение напряжения на резисторе R уникально для каждого нажатия кнопки. Когда ни одна из кнопок не нажата, на выводе AN0 через резистор R будет низкий уровень, и в идеале АЦП должен определить это как 0 В.

Четыре светодиода (LED1-LED4) подключены к контактам GP1, GP2, GP4 и GP5 микроконтроллера PIC12F683. Они будут включаться и выключаться четырьмя кнопками.

Расчет сопротивления подтягивающих резисторов

Мы знаем, что каждое значение резистора R1′-R4′ должно отличаться друг от друга, чтобы получить уникальный аналоговый выход для каждой кнопки. Но как подобрать их значения?

Следует иметь в виду, что резисторы имеют определенные значения допусков (отклонение от заявленного номинала). Также их сопротивление может незначительно меняться с изменением температуры. Следовательно, мы должны обеспечить достаточный промежуток между любыми двумя последовательными значениями на выходе делителя напряжения, чтобы избежать конфликта.

Лучшим решением было бы реализовать равномерно распределенные значения делителя напряжения для всех 4 кнопок. Помните, что когда вы нажимаете кнопку, вы не должны ожидать точного значения аналогового напряжения на резисторе R. Оно будет немного «плавать» в пределах определенного диапазона, который определяется значениями допуска резисторов, температурой, контактным сопротивлением кнопок, стабильностью напряжения питания и так далее.

Итак, чтобы идентифицировать нажатую кнопку, мы на самом деле смотрим на диапазон напряжения, в котором находится выход делителя напряжения.

В таблице ниже показаны диапазоны DN (делителя напряжения), определенные для всех четырех кнопок и соответствующие значения для резисторов R’. DN обозначает число (от 0 до 1024) 10-битного АЦП, который пропорционален входному аналоговому напряжению.

Предположим, мы задаем диапазон DN кнопки SW1 как 100-300. Наша цель — найти подходящее сопротивление R’, чтобы при нажатии SW1 результат 10-битного АЦП выход всегда находился в диапазоне от 100 до 300. Минимальное значение R’ будет соответствовать максимальному значению выбранного диапазона АЦП (300) для SW1. Уравнение для нахождения R’ для DN = 100:

1024 * R / (R + R ‘) = 100, где R = 470 Ом

Это дает R’= 4342,8 Ом. Точно так же для DN = 300 значение R’ должно быть 1134,3 Ом. Следовательно, R ‘= 2,2 кОм является подходящим значением для кнопки SW1. Остальные значения R’ для других кнопок показаны в таблице ниже.

Программного обеспечения

Программное обеспечение включает в себя несколько проверок, чтобы сравнить выход A/D с предварительно определенными диапазонами, чтобы определить, какая кнопка была нажата:

ADC_Value = ADC_Read(0);
if(ADC_Value > 700) {                     // Нажата кнопка SW4
  LED4 = ~LED4;
  Delay_250ms();
}
if(ADC_Value> 500 && ADC_Value < 700) {  // Нажата кнопка SW3
  LED3 = ~LED3;
  Delay_250ms();
}
if(ADC_Value > 300 && ADC_Value < 500) {  // Нажата кнопка SW2
  LED2 = ~LED2;
  Delay_250ms();
}
if(ADC_Value > 100 && ADC_Value < 300) {  // Нажата кнопка SW1
  LED1 = ~LED1;
  Delay_250ms();
}

Примечание. Микроконтроллер работает на частоте 4,0 МГц, используя свой внутренний источник синхронизации, а MCLR отключен.

Резюме

На микроконтроллере PIC12F683 была продемонстрирована технология сопряжения нескольких тактовых кнопок с использованием одного вывода АЦП. Напряжение от нажатия кнопок считывается каналом АЦП AN0 и отображается посредством четырех светодиодов.

Хотя этот метод экономит контакты микроконтроллера и уменьшает размер схемы, одним из недостатков такой конструкции является обнаружение одновременного нажатия нескольких кнопок. В этом случае решением является особый расчет резисторов R’. Сопротивление этих резисторов следует подбирать очень тщательно, чтобы напряжение, возникающее в результате нажатия нескольких кнопок, было уникальным.

Скачать прошивку (13,8 KiB, скачано: 210)

Оставить комментарий

Ваш email нигде не будет показан. Обязательные для заполнения поля помечены *

*