Муфты электромонтажные от производителя Fucon

Чтение состояния 10 и более кнопок с помощью двух выводов микроконтроллера

Журнал РАДИОЛОЦМАН, май 2013


Aruna Rubasinghe

EDN

Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Существует несколько способов опроса состояния множества кнопок с помощью ограниченного числа линий ввода/вывода микроконтроллера. Например, используя аналоговый вход микроконтроллера, можно определять нажатую кнопку по уровню напряжения, присвоенного ей посредством цепочки резисторов. Можно также использовать приборы с однопроводным интерфейсом, такие, скажем, как 8-канальный адресуемый ключ Maxim DS2408.

Первому способу присущ ряд недостатков: микроконтроллер должен иметь встроенный АЦП, время подавления дребезга снижает частоту сканирования копок, а размыкание кнопки во время выполнения выборки АЦП приводит к ошибкам. Второй способ, использующий интерфейс 1-Wire, отличается относительно низкой скоростью и требует постоянного опроса микросхемы DS2408, в ответ на каждое обращение возвращающей 8-разрядный код позиции кнопки.

 Чтение состояния 10 и более кнопок с помощью двух выводов микроконтроллера
Рисунок 1. Подключение к микроконтроллеру 10 кнопок с помощью двух линий ввода/вывода. Количество кнопок может быть увеличено при каскадировании нескольких микросхем CD4017 через выходы переноса.

В статье описан еще один способ считывания статуса множества кнопок или переключателей, для которого потребуются лишь две цифровые линии ввода/вывода микроконтроллера и прерывания от интегрированного в микроконтроллер таймера (Рисунок 1). При необходимости можно использовать третью линию для периодического сброса счетчика CD4017 (каскадируемый десятичный счетчик Джонсона), позволяющего повысить устойчивость схемы к электромагнитным помехам и электростатическим разрядам. Можно также применить схему, изображенную на Рисунке 2, сохранив преимущество двухпроводного варианта. Диоды защищают выходы счетчика от повреждения при одновременном нажатии нескольких кнопок. Каскадированием нескольких микросхем CD4017 можно увеличить количество подключаемых кнопок, используя выход переноса (вывод 12) и вход счетных импульсов (вывод 14).

 Чтение состояния 10 и более кнопок с помощью двух выводов микроконтроллера
Рисунок 2. Добавив три резистора и транзистор, можно защитить схему от сбоев синхронизации, не используя третью линию ввода/вывода микроконтроллера.

Надежность работы схемы после первоначального включения и инициализации микроконтроллера зависит от последующей синхронизации счетчика CD4017 с таймером-счетчиком микроконтроллера. Однако синхронизация может быть нарушена электростатическими разрядами или электромагнитными помехами, например, от находящегося поблизости мобильного телефона, поэтому целесообразно предусмотреть в коде программы микроконтроллера функцию периодического аппаратного сброса счетчика CD4017. На Рисунке 2 показано, как можно сделать это без использования третьей линии ввода/вывода микроконтроллера.

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

При «лог. 1» транзистор Q1 включается через резистор R4, устанавливая высокий логический уровень напряжения в точке V1 и напряжение ниже логического нуля в точке V2. Таким образом, на тактовом входе микросхемы устанавливается высокий логический уровень, а на входе сброса удерживается низкий.

В состоянии «лог. 0» транзистор Q1 выключается, устанавливая низкий логический уровень напряжения в точке V1 и напряжение выше логической единицы в точке V2. В этом случае на тактовом входе микросхемы устанавливается низкий логический уровень, а на входе сброса удерживается высокий.

Если же вход будет «оторван» вследствие переключения выхода микроконтроллера режим ввода, транзистор Q1 включится через резисторы R3 и R4, а напряжение в точках V1 и V2 опустится ниже порога логического нуля. При этом на счетном входе и входе сброса микросхемы устанавливается низкий уровень.

Таким образом, чтобы сформировать фронт счетного импульса, необходимо изменять состояния вывода микроконтроллера в следующей последовательности: Z-состояние > «лог. 1» > Z-состояние. Аналогично, для сброса счетчика CD4017 последовательность должна быть такой: Z-состояние > «лог. 0» > Z-состояние.

Блок-схема на Рисунке 3 иллюстрирует процесс считывания микроконтроллером состояния всех кнопок и используемые в программе микроконтроллера функции. На этапе инициализации микроконтроллер сбрасывает переменную счетчика (n=0) и запускает таймер, сконфигурированный на генерацию прерываний по переполнению каждую 1 мс. В обработчике прерываний от таймера выполняется следующие операции: запрещаются внешние прерывания, значение переменной инкрементируется на 1, на микросхему CD4017 подается синхроимпульс длительностью 10 мкс, разрешаются внешние прерывания.

 Чтение состояния 10 и более кнопок с помощью двух выводов микроконтроллера
Рисунок 3. Блок-схема программы микроконтроллера для чтения состояния всех кнопок. В каждый момент времени должна быть нажата только одна кнопка.

Ввиду того, что каждую миллисекунду микроконтроллер посылает импульс счетчику CD4017 и инкрементирует значение переменной собственного счетчика до тех пор, пока оно меньше 9, номер выхода CD4017, на котором появляется высокий логический уровень, будет соответствовать значению переменной счетчика микроконтроллера. Например, если в счетчике микроконтроллера число 2, то высокий уровень появится на выходе 2 микросхемы CD4017 (вывод 4), в то время как на остальных выходах будет низкий логический уровень. Если в этот момент пользователь нажал кнопку S2, на вывод внешнего прерывания микроконтроллера поступит сигнал «лог. 1». Нажатие других кнопок не приведет к формированию сигнала внешнего прерывания из-за низкого логического уровня на остальных выходах CD4017.

При поступлении сигнала внешнего прерывания микроконтроллер получает из памяти значение переменной счетчика (в нашем примере это 2), определяет нажатие кнопки S2 и выполняет соответствующие функции и операции. По достижении переменной значения 9 она программно сбрасывается в 0, так же как счетчик CD4017 сбрасывается автоматически на десятом импульсе.

Обратите внимание, что в каждый момент времени нажатой должна быть только одна кнопка. Если одновременно нажаты две последовательные кнопки, микроконтроллеру может не хватить времени между последовательными состояниями для регистрации фронта сигнала внешнего прерывания. Возможный вариант решения этой проблемы поясняет блок-схема на Рисунке 4.

 Чтение состояния 10 и более кнопок с помощью двух выводов микроконтроллера
Рисунок 4. При использовании кнопок с фиксацией для декодирования комбинаций состояний нескольких кнопок можно проверять состояния входа внешнего прерывания микроконтроллера.

Дополнительные материалы:

Многокнопочная клавиатура с интерфейсом 1-Wire

Перевод: Vadim по заказу РадиоЛоцман

На английском языке: Read 10 or more switches using only two I/O pins of a microcontroller

Электронные компоненты. Бесплатная доставка по России
Для комментирования материалов с сайта и получения полного доступа к нашему форуму Вам необходимо зарегистрироваться.
Имя