Один порт — две кнопки и т.д.©

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

Для определенной категории задач служит предлагаемая схема (рис.1). Цепь из трех светодиодов (два красных и зеленый) и пары резисторов с двумя обычными кнопками позволяет получить набор напряжений в узлах, необходимый и достаточный для надежной идентификации нажатия, а также позволяет, используя возможности стандартного выхода порта, независимо управлять двумя светодиодами разного цвета. Последовательно соединенные красные диоды будем считать за один.
tt_fig1
Так как светодиоды используются здесь не только по прямому назначению, но и как стабилитроны, для начала предупредим, что всевозможные замены на светодиоды с другим цветом, кроме указанных, вряд ли приведут к хорошим результатам. То же относится к напряжению питания схемы. Единственная допустимая замена — красных светодиодов на оранжевые.

Исходные данные. Приведенная на схеме цепь при отключенном входе/выходе (Uz) и при нажатой верхней/нижней кнопке (Uh/Ul) имеет следующий набор напряжений (в точке подключения к порту МК):

Uh / Uz / Ul = 1.4 / 2.1 / 4.8 V        R3=500
Uh / Uz / Ul = 1.3 / 2.1 / 4.7 V        R3=1K

При разорванной цепи управления светодиоды не светятся, мало напряжение на каждом них. Чтобы
различить уровни, микроконтроллер должен иметь возможность аналого-цифрового преобразования по выбранному, для подключения схемы,  порту. Далее все стандартно. Порт настроить как вход, преобразование входного напряжения, сравнение кода с установленными порогами, подавление «дребезга» и генерация флагов нажатий. Логика программы сканирования устроена так, что первое нажатие выбранной кнопки устанавливает её флаг, второе — сбрасывает. Вторая программа управляет светодиодами. Используется третье состояние порта, чтобы их независимо включать и выключать. Низкий уровень порта зажигает красные светодиоды, высокий — зеленый. Чтобы могли светиться все светодиоды одновременно, использован обычный принцип динамической индикации. Затраты на обслуживание мизерны. На свечение светодиодов в момент нажатия кнопки не нужно обращать внимания (такова уж схема), т.к. смена информации о нажатии в регистре микроконтроллера происходит при отпускании кнопки. Возможно потребуется немного времени для активации нового цикла вывода (старый может быть еще не окончен), так что воспринимайте это, как подмигивание контроллера лично вам, не более.

Программная часть отнимает всего 78 байт, что вполне позволяет применять данную схему даже с tiny13. Время сканирования состояния кнопок — 108 мкС (внутр. 9,6 МГц). Ниже приводится листинг подпрограмм обслуживания вышеприведенной схемы, вырванный из программы двухканального вольтметра на tiny13A.

__________________________________________________________________________________
Listing

___________________________________________________________________________

Кроме отладки микроконтроллерных систем предложенная схема может применяться в таких приложениях, как панельные измерительные микроприборы для управления дополнительными функциями без существенного увеличения цены изделий. Мигание светодиодом, как первая программа, и управление парой светодиодов, как вторая… Кажется, что скоро увидим эту схему встроенной в демонстрационные платы производителей микроконтроллеров и у ардуинщиков.

P.S. Странным образом, зеленый светодиод в smd исполнении обладает невысокой яркостью при выбранном токе. Рекомендуем применять обычный 3мм.

Уникальность текста: 100.0%                          051216_3

Добавить комментарий

Ваш e-mail не будет опубликован.