Оглавление:

Как считывать данные с нескольких переключателей с помощью одного вывода MCU: 4 шага
Как считывать данные с нескольких переключателей с помощью одного вывода MCU: 4 шага

Видео: Как считывать данные с нескольких переключателей с помощью одного вывода MCU: 4 шага

Видео: Как считывать данные с нескольких переключателей с помощью одного вывода MCU: 4 шага
Видео: Урок 4 Создание входов, выходов, что такое переменная, базовый элемент «Клемма» программы Flprog 2024, Июнь
Anonim
Как читать много переключателей с одного пина MCU
Как читать много переключателей с одного пина MCU

Приходилось ли вам когда-нибудь усердно работать над проектом (проектами), и проект продолжает расти и расти, в то время как вы добавляете в него больше вещей (мы называем это Feaping Creaturism)? В недавнем проекте я построил частотомер и добавил пятифункциональный генератор сигналов / синтезатор частоты. Вскоре у меня оказалось больше переключателей, чем оставалось доступных контактов, так что же делать парню?

Однако вскоре у меня было еще семь переключателей на моем Funbox (да, это то, что я назвал своим генератором функций … Я знаю, у меня нет творческих способностей), и вот краткое руководство, показывающее, как вы можете сделать то же самое. Для этого не требуются регистры сдвига или специальные микросхемы. Фактически, для этого не требуется микроконтроллер, если вы катаетесь на дискретных полупроводниках. Вот один из способов чтения / управления несколькими переключателями, используя один вывод на вашем AVR (или другом микроконтроллере… Я слышал, что есть и другие микроконтроллеры помимо AVR, но я не могу себе представить…).:)

Шаг 1. Основы (не совсем)

Для этого вам понадобится несколько компонентов. Это помогает иметь множество переключателей, которыми вам нужно управлять. Вам также понадобятся некоторые резисторы и либо микроконтроллер с АЦП (аналого-цифровое преобразование), либо каким-либо другим способом, которым вы хотели бы указать, что был активирован переключатель, и какой переключатель это был.

Если вы хотите, вы можете использовать генератор, управляемый напряжением, чтобы указать это, возможно, с помощью мигающих огней или, альтернативно, со звуком. В этой статье я собираюсь представить, что мы используем AVR, но в вашем мире вы можете притвориться всем, что делает вас счастливым. Я скучаю по Бобу Россу.

Шаг 2: делитель напряжения

Делитель напряжения
Делитель напряжения
Делитель напряжения
Делитель напряжения

По сути, мы собираемся сделать это, используя технику и схему, называемую делителем напряжения. Делители напряжения, как вы уже догадались, делят напряжение V,, in,, на некоторое значение, которое вы определяете. Вы можете разделить напряжение на несколько компонентов, включая конденсаторы и катушки индуктивности, но здесь я собираюсь сделать это с помощью старого хорошего резистора. Идея. То, что мы делаем, - это соединяем два компонента последовательно, что вызовет, каждый в отдельности, падение напряжения на каждом компоненте. Посмотрите на первую картинку, если я не понимаю. Между рейкой и рейкой существует разность потенциалов 9В. Между 9 В и 0 В последовательно включены два резистора. Каждый из них будет испытывать падение напряжения на себе, в зависимости от сопротивления, как вы, вероятно, помните из V = IR. Если вы измеряете напряжение между двумя резисторами, вы получите некоторое значение от 9 В до 0 В, в зависимости от того, сколько напряжения упало на первом резисторе и сколько осталось упасть на 2-м резисторе, до 0 В. В этой ситуации есть простая формула для расчета падения напряжения на резисторе, и она выглядит так. Пусть напряжение на резисторе 1 (R1) равно V1, а напряжение на резисторе два (R2) равно V2. Поскольку я больше не могу использовать форматирование, посмотрите на картинку 2 ниже, чтобы увидеть формулу… Итак, в нашем резистивном делителе напряжение Vout можно определить по нашей формуле для V2 (поскольку мы будем ссылаться на GND на 0V). При чем тут несколько переключателей, обнаруживаемых с одного пина? Что ж, переверни страницу, и я тебе покажу!

Шаг 3: Лестница делителя напряжения

Лестница делителя напряжения
Лестница делителя напряжения

Теперь предположим, что у нас есть все наши переключатели, может быть, шесть, восемь или шестнадцать, все подключены через резисторы, каждый из которых действует как делитель напряжения, так что при изменении состояния контакта переключателя напряжение считывается и в зависимости от уровня напряжения мы может узнать, какой переключатель был только что активирован. Смотри ниже. На картинке ниже я соединил два блока переключателей. Самый верхний блок имеет два переключателя, а самый нижний блок - пять переключателей. Таким же образом можно подключить отдельный тумблерный, мгновенный, тактильный и т. Д. Переключатели. Важно отметить резистор, к которому подключен ваш переключатель. В моем примере я почти удвоил сопротивление следующего резистора, чтобы создать промежуток по напряжению, который легко измерить и не ошибиться с переключателем до или после. Если вы не заметили раньше, посмотрите еще раз и поймите, что мы вернулись к нашему старому другу - резистивному делителю напряжения. Первый резистор, 10 кОм, подключен к 5 В, а второй резистор - резистор, который будет определять V.из для вывода SWITCH_ADC подключен к каждому переключателю, и поэтому каждый переключатель связан с определенным напряжением Vout, которое может быть считано с вывода АЦП, подключенного к SWITCH_ADC. Затем определите ожидаемый Vout для каждого переключателя следующим образом.

Vout = Vin * (R2 / (R1 + R2))

для первого переключателя:

Vout = 5 В * (500 / (10000 + 500)) = 5 * 0,048 = 0,24 В или 240 мВ

для второго переключателя:

Vout = 5 В * (2200 / (10000 + 2200)) = 5 * 0,18 = 0,9 В или ~ 900 мВ

и так далее … Не стесняйтесь подставлять свои собственные значения для R2, если у вас есть только определенные резисторы под рукой … Ключевым моментом здесь является сохранение достаточно большого промежутка в напряжении между переключателями, чтобы любая погрешность на АЦП победила. t поставить вас в напряжение, ожидаемое от соседнего переключателя. Я обнаружил, что проще всего построить лестницу делителя и поставить мультиметр / вольтметр на вывод АЦП, нажать на каждый вывод и посмотреть, какие значения вы получите. Они должны точно соответствовать тому, что вы рассчитываете. Когда у вас есть все ожидаемые значения напряжения от каждого переключателя, использующего определенный резистор, вы можете попросить ваш MCU прочитать вывод АЦП и сравнить его с вашими известными значениями, чтобы определить, какой переключатель был нажат. Например, предположим, что вы зарегистрировали процедуру обслуживания прерывания, которая будет вызываться всякий раз, когда будет обнаружено изменение на выводе АЦП. Внутри этого ISR вы можете прочитать АЦП и сравнить это значение со своей таблицей переключателей. Если вы используете 8-битное значение АЦП, ваше напряжение будет преобразовано в число от 0 до 255, которое соответствует напряжению от 0 до 5 В. Предполагается, что ваш АЦП настроен таким образом.

Шаг 4: Резюме

Итак, теперь вы должны знать, как экономно использовать контакты GPIO для переключателей. Всякий раз, когда у вас заканчиваются контакты GPIO, или у вас почти нет их для начала, или если вы понимаете, что собираетесь использовать группу переключателей, резистивный делитель - это способ сохранить ваши контакты GPIO, при этом обеспечивая надежный механизм обнаружения доступа к коммутатору.

Рекомендуемые: