Эта статья будет вводной в тему связи МК с периферийными устройствами в их стандартной, и не очень, конфигурации.
Список всех частей:
Грызём микроконтроллеры. Урок 1. Моргаем 8-ю светодиодами. CodeVision, Proteus, ISIS
Грызём микроконтроллеры. Урок 2. CodeVision и С
Грызём микроконтроллеры. Урок 3. Циклы, прерывания и массивы
Грызём микроконтроллеры. Урок 4. Мерим температуру или напряжение
Грызём микроконтроллеры. Урок 5. Кодовый замок
Грызём микроконтроллеры. Урок 6. Прошиваем МК
Грызём микроконтроллеры. Урок 7. Подключение к МК кнопок, клавиатуры, энкодера
Грызём микроконтроллеры. Урок 8. Программирование кнопок, клавиатуры, энкодера
Грызём микроконтроллеры. Урок 9. Клавиатура вглубину
Самой первой и неотъемлемой частью любого устройства являются органы управления.
Самый простейший способ взаимодействия МК с окружающим миром – кнопка. Но в зависимости от конструктивных особенностей устройства, она может быть подключена весьма разнообразными способами.
На этой схеме приведены простейшие варианты подключения кнопок.
Верхняя – при нажатии на кнопку на вход МК подается «низкий» логический уровень, т.е. логический «0». А резистор PULLUP предназначен для обеспечения «высокого» уровня при отпущенной кнопке. В этом варианте включения его можно не ставить, т.к. при программировании МК можно включить внутреннюю подтяжку любого вывода порта МК к логической «1». То есть, эти резисторы уже встроены в каждый вход МК и их можно по желанию включить и отключить.
Второй вариант – при нажатии на кнопку на вход МК подается логический «0». В этом варианте резистор PULLDOWN уже обязателен, т.к. в МК нет возможности «подтянуть» вывод к низкому логическому уровню. Так же, при этом желательно отключить внутреннюю «подтяжку», чтобы она не влияла на состояние этого вывода.
Из этих двух вариантов я бы советовал использовать первый, т.к. для него не нужно дополнительных элементов в обвязке МК, а так же необходимость согласования уровней, если кнопка расположена в другом модуле, напряжение питания которого отличается от напряжения питания МК, но об этом позже :laughing:
Следующий вариант управления устройством, который в последнее время приобрел немалую популярность – это валкодер (или энкодер – кому как ). Кому-то это устройство кажется страшным и непостижимым зверем, заброшенным к нам неземными цивилизациями для порабощения и истребления человеческого рода Но на самом деле использовать его ничуть не сложнее, чем обычную кнопку!
Сначала немного разберемся в принципе его работы.
Внутри него есть диск с тремя концентрическими кольцами контактов. Одно кольцо сплошное - это общий контакт. Два других сегментированы и их контакты сдвинуты на небольшой угол относительно друг друга. А сверху по этим контактам скользит бегунок, замыкая и размыкая внешние кольца с общим. Если развернуть эти кольца в прямую, то получится примерно следующее.
С устройством разобрались, но как же это всё действует? Представьте, что оранжевая полоса на изображении – начальное положение ползунка. С общим контактом соединено только внешнее (верхнее) кольцо. Теперь при вращении валкодера влево (красная полоса), в какой-то момент времени замкнутыми окажутся все три кольца. А при вращении в обратную сторону (синяя полоса) – с общим кольцом соединиться среднее. Вроде ничего сложного.
А как же заставить МК определить, в какую сторону мы крутим ручку? Да очень просто: В момент замыкания среднего кольца с общим, проверяем, соединено ли с ним внешнее. Если да – значит крутим влево, а если нет – вправо.
А теперь представим, что у нас есть всего два провода, а кнопок нужно штук 6 (а может и больше )… Думаете нереально? Поверьте, всё чрезвычайно просто!
Из схемы вы видите, что кнопки подключены к входу аналого-цифрового преобразователя МК (ADC или АЦП) и создают делитель напряжения. При нажатии на одну из кнопок, на входе АЦП будет появляться определенное напряжение (от 0 но 2,5 Вольт). А зная это напряжение, несложно определить, какая именно кнопка была нажата. Увы, но при этом невозможно реализовать обработку одновременно нажатых клавиш. Тут каждая клавиша имеет свой «приоритет», и чем она выше (по схеме), тем выше и приоритет.
Еще один очень интересный способ работы с кнопками – матричная клавиатура. В ней кнопки располагаются на пересечении «строк» и «столбцов». То есть, при нажатии на кнопку «=», строка «D» соединяется со столбцом «3». Таким образом, при использовании 8 выводов МК (4 строки и 4 столбца), можно реализовать клавиатуру с 16-ю кнопками, причем можно без проблем определять одновременное нажатие любого количества кнопок.
Определение нажатой кнопки называют «опросом» клавиатуру. Происходит он следующим образом: строки (а можно и столбцы, это кому как удобно) подключаем к выходам МК, по умолчанию на которых логическая «1», а столбцы – к входам с подтяжкой (чтобы не колхозить лишних резисторов). Теперь, при опросе, поочередно устанавливаем каждую строку в логический «0». Если на этой строке нет ни одной нажатой кнопки, то во всех столбцах (на всех входах МК) будет логическая «1» (ее обеспечивают подтягивающие резисторы внутри МК), а если какие-либо кнопки нажаты, то на соответствующих входах МК будет логический «0», что и позволяет определить МК все нажатые кнопки.
Так же есть множество других вариантов, например, с использованием параллельных и последовательных регистров, драйверов клавиатуры и их комбинаций. Но на них, как и на программной реализации выше описанных методов работы с клавиатурой, мы остановимся в следующей статье.
До скорых встреч!
С уважением, Владимир!
Камрад, рассмотри датагорские рекомендации
🌼 Полезные и проверенные железяки, можно брать
Опробовано в лаборатории редакции или читателями.