Необходимые знания: [HW] Kasutajaliidese moodul, [AVR] Registrid,
[AVR] Digitaalsed sisendid-väljundid, [LIB] Sisend-väljundviigud,
[PRT] Valgusdiood
Переключатель - это электромеханическое устройство для соединения и разъединения электрических цепей. Существуют разные переключатели, но типичный механический переключатель состоит из клемм, которые можно подключать между собой механически. При соединение клемм электрическая цепь замкнута и через переключатель может протекать электрический ток. Если клеммы открыты, то электрическая цепь разомкнута, и электрический ток через переключатель протекать не может.
С помощью переключателей можно напрямую питать электрические цепи, но так же, их можно использовать в качестве датчиков. Переключатели в функции датчиков одна из тем этого упражнения, поэтому здесь не рассматриваются специфические переключатели высоких напряжений и больших токов. Переключатели отличаются количеством контактов и методами их подключений. Существуют переключатели с двумя контактами, а так же двойные выключатели, где соединяются пары контактов. Есть кнопочные-, клавишные- и движковые переключатели, а также переключатели при нажатие на которые электрическая цепь не замыкается, а размыкается.
У различных видов переключателей разное схематическое обозначение. Далее приведены переключатели, используемые в типичных электросхемах и их электри -
ческие обозначения:
Кнопочный переключатель | Тумблерный переключатель | Клавишный переключатель | Микро-переключатель | DIL-переключатель |
---|---|---|---|---|
При использовании переключателя в качестве датчика у микроконтроллера, один контакт выключателя соединяется с выводом микроконтроллера, который обозначается в программе входом. Когда происходит соединение контакта с землёй или электрическим потенциалом, изменяется так же значение бита шины соответствующее вводу микроконтроллера. Логический вариант использовать тумблер, что позволяет один контакт соединить с выбранным контактом (в данном случае с землей или питанием), но это не так легко. Причина в том, что во время переключения контакты не находятся в соединении между собой. Этот момент очень маленький (миллисекунды), но в течение этого самого момента входной вывод микроконтроллера никуда не подключен и у него неопределенное значение. В связи с электромагнитными помехами (что встречается повсюду) никуда не подключенный вывод может в любой момент получить значение 0 или 1.
Помехи усложняют использование переключателей. Один из главных методов для избежания неопределенных состояний это подключение вывода микроконтроллера через сопротивление с землей или питающим потенциалом. Сопротивление в этой функции на английском языке называют pull-down или pull-up сопротивлением. Обычно сопротивление pull-up или pull-down резисторов колеблется от нескольких килоом до одного мегаома. Если переключатель открыт, то на входе, где подключен резистор, остается напряжение. Eсли переключатель закрыть, то кo входу прикладывается напряжение, т.к. сопротивление выключателя намного меньше (приближено к нулю) чем сопротивление резистра. По существу имеем дело с делителем напряжения.
Простые двух контактные переключатели с pull-up или pull-down резисторами можно использовать в качестве датчиков так, чтобы переключатель соединял вход с одним потенциалом, а резистор с другим.
Обычно в микроконтроллерах встроена возможность использования pull-up или pull-down down резистора, вследствие чего не нужно в схему отдельно добавлять сопротивление. К примеру, в микроконтроллерах AVR у IO выводов имеются 20 – 50 килоом pull-up резистры.
Следует отметить, что механические переключатели имеют еще одну проблему - дребезг контактов. Это приводит к тому, что в момент переключения происходит множество кратковременных пере-ключений. Эта тема рассмотрена в следующей главе. Проблема дребезга контактов практически не влияет на примеры этой главы.
На плате модуля «Дигитальные входы-выводы» Домашней Лаборатории находятся три кнопочных переключателя. Переключатели соединяют выводы микроконтроллера с землей, но не на прямую, а через сопротивление – это по причине, чтобы при случайном определении вывода микроконтроллера выходом не случилось замыкания при нажатия кнопки. У переключателей тоже имеются pull-up сопротивления, но они с гораздо большим сопротивлением, чем защитные резистры, так что при нажатии на кнопку на выходе микроконтроллера остается напряжение, приближенное к 0.
Переключатели находятся на выводах PC0, PC1 и PC2. Для чтения состояния переключателей, нужно в микроконтроллере необходимые выводы отметить входом. Встроенные в AVR pull-up не нужно применять, потому что как было уже сказанно у выводов есть наружные резистры. Если нажать на кнопку, то на выводе соответсвующего битной шине значение будет 0, если кнопку отпустить, то значение будет 1. Для того чтобы увидеть, реагирует ли микроконтроллер на нажатие кнопки, можно использовать находящиеся на плате LED индикаторы.
Пример кода использования кнопок основан на библиотеке выводов Домашней Лаборатории, что представлено в примере светодиодов.
// // Программа для тестирования кнопок модуля «Дигитальные входы-выходы» // Домашней Лаборатории // #include <homelab/pin.h> // // Обозначение выводов LED-ов и кнопок // pin leds[3] = { PIN(C, 5), PIN(C, 4), PIN(C, 3) }; pin buttons[3] = { PIN(C, 2), PIN(C, 1), PIN(C, 0) }; // // Основная программа // int main(void) { unsigned char i; // Настройка выводов LED-а выходом и выводов кнопок входом for (i = 0; i < 3; i++) { pin_setup_output(leds[i]); pin_setup_input(buttons[i]); } // Бесконечный цикл while (true) { // Каждой кнопке соответсвует один LED, который загорается //при нажатии на кнопку. for (i = 0; i < 3; i++) { pin_set_to(leds[i], pin_get_value(buttons[i])); } } }
В приведенном примере LED-ы и кнопки определенны массивом – это позволяет использовать их в for цикле. При запуске программы выводы LED-ов обозначаются выходом, а выводы кнопок входом. Внутри программы бесконечным циклом происходит постоянный запрос состояния кнопок и определение состояния соответствующих им LED-ов. Первая кнопка зажигает зеленый LED, вторая желтый и третья красный.