Подтягивающий резистор ардуино это

Стягивающие и подтягивающие резисторы. В чём различие

Стягивающие и подтягивающие резисторы широко применяются в схемотехнике для подавления помех (шумов).

Давайте сразу начнём с примера и зальём на arduino следующий скетч, а в пин 10 воткнём небольшой проводок:

Включив монитор порта увидим, что на экране мелькают нолики и единички — это и есть шум. Но от него легко избавится. Для этого нам понадобится либо стягивающий, либо подтягивающий резистор (сопротивление), в зависимости от ситуации.

Надо отметить, что физически стягивающий и подтягивающий резисторы ничем не отличаются, то есть один и тот же резистор можно использовать и так, и так. Различая только в подключении. Главное, чтоб наминал резистора был большой: 10 кОм или более. Но обо всём по порядку.

Возьмём к примеру подключение обычной кнопки к ардуино. Подсоединяем один контакт кнопки к плюсу, а другой к пину 10 (скетч у нас уже залит). На мониторе порта видны те же самые нолики и единички. Нажимаем на кнопку – 1, отпускаем опять 1..0..0..1..1… А должно быть нажали – 1, отпустили – 0. Чтобы добиться этого применим стягивающий резистор.

Стягивающий резистор

Стягивающий резистор – резистор соединяющий нужный нам участок цепи с нулём (землёй, GND). В нашем примере это участок между пином 10 и кнопкой. Подсоединим всё по схеме:

Открываем монитор порта: кнопка не нажата – нули. Нажимаем – единице. Таким образом мы чётко разграничили состояния кнопки: нажата – 1, не нажата – 0. С этим уже можно работать…

Подтягивающий резистор

Но что нам делать если при нажатой кнопке на вход ардуино мы можем подать только 0 (землю, GND). С этим я столкнулся, когда решил применить в проекте энкодер на модуле KY-040. В нём есть встроенная кнопка, при нажатии на которую на выход подаётся земля. И чтобы воспользоваться этой кнопкой я применил подтягивающий резистор.

Подтягивающий резистор – резистор соединяющий нужный нам участок цепи с плюсом (+). И так, переделаем нашу схему так: один контакт кнопки подсоединяем к земле (GND), другой к пину 10, а резистор одним концом подсоединяем к участку между кнопкой и пином 10, а другой к +5В (+3.3 — непринципиально).

Открыв монитор порта видим: когда кнопка не нажата на пин 10 подаётся логическая 1, нажимаем кнопку и там уже логический 0.

Источник

Arduino.ru

Цифровые выводы

Выводы платформы Arduino могут работать как входы или как выходы. Данный документ объясняет функционирование выводов в этих режимах. Также необходимо обратить внимание на то, что большинство аналоговых входов Arduino (Atmega) могут конфигурироваться и работать так же как и цифровые порты ввода/вывода.

Свойства порта вводы/вывода (pin), сконфигурированного как порт ввода

Выводы Arduino (Atmega) стандартно настроены как порты ввода, таким образом, не требуется явной декларации в функции pinMode(). Сконфигурированные порты ввода находятся в высокоимпедансном состоянии. Это означает то, что порт ввода дает слишком малую нагрузки на схему, в которую он включен. Эквивалентом внутреннему сопротивлению будет резистор 100 МОм подключенный к выводу микросхемы. Таким образом, для перевода порта ввода из одного состояния в другое требуется маленькое значение тока. Это позволяет применять выводы микросхемы для подключения емкостного датчика касания, фотодиода, аналогового датчика со схемой, похожей на RC-цепь.

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

Подтягивающие (нагрузочные) резисторы

Если на порт ввода не поступает сигнал, то в данном случае рекомендуется задать порту известное состояние. Это делается добавлением подтягивающих резисторов 10 кОм, подключающих вход либо к +5 В (подтягивающие к питанию резисторы), либо к земле (подтягивающие к земле резисторы).

Микроконтроллер Atmega имеет программируемые встроенные подтягивающие к питанию резисторы 20 кОм. Программирование данных резисторов осуществляется следующим образом.

Подтягивающий резистор пропускает ток достаточный для того, чтобы слегка светился светодиод подключенный к выводу, работающему как порт ввода. Также легкое свечение светодиодов означает то, что при программировании вывод не был настроен как порт вывода в функции pinMode().

Подтягивающие резисторы управляются теми же регистрами (внутренние адреса памяти микроконтроллера), что управляют состояниями вывода: HIGH или LOW. Следовательно, если вывод работает как порт ввода со значением HIGH, это означает включение подтягивающего к питанию резистора, то конфигурация функцией pinMode() порта вывода на данном выводе микросхемы передаст значение HIGH. Данная процедура работает и в обратном направлении, т.е. если вывод имеет значение HIGH, то конфигурация вывода микросхемы как порта ввода функцией pinMode() включит подтягивающий к питанию резистор.

Примечание: Затруднительно использовать вывод микросхемы 13 в качестве порта ввода из-за подключенных к нему светодиода и резистора. При подключении подтягивающего к питанию резистора 20 кОм на вводе будет 1.7 В вместо 5 В, т.к. происходит падение напряжения на светодиоде и включенном последовательно резисторе. При необходимости использовать вывод микросхемы 13 как цифровой порт ввода требуется подключить между выводом и землей внешний подтягивающий резистор.

Свойства порта ввода/вывода, сконфигурированного как порт вывода

Выводы, сконфигурированные как порты вывода, находятся в низкоимпедансном состоянии. Данные выводы могут пропускать через себя достаточно большой ток. Выводы микросхемы Atmega могут быть источником (положительный) или приемником (отрицательный) тока до 40 мА для других устройств. Такого значения тока достаточно чтобы подключить светодиод (обязателен последовательно включенный резистор), датчики, но недостаточно для большинства реле, соленоидов и двигателей.

Короткие замыкания выводов Arduino или попытки подключить энергоемкие устройства могут повредить выходные транзисторы вывода или весь микроконтроллер Atmega. В большинстве случаев данные действия приведут к отключению вывода на микроконтроллере, но остальная часть схемы будет работать согласно программе. Рекомендуется к выходам платформы подключать устройства через резисторы 470 Ом или 1 кОм, если устройству не требуется больший ток для работы.

Источник

Подтягивающий резистор — что это такое и зачем нужен

Для организации работы Ардуино, в частности для подачи управляющего напряжения на высокоимпедансный вход кнопкой требуется использования подтягивающего резистора. Без него невозможно организовать правильное функционирование контроллера.

Принцип работы подтягивающего резистора

Для подключения различных устройств к Ардуино используются резисторы. Резисторы бывают внутренние и внешние, постоянные и переменные (внутренние переменные могут быть цифровыми).

Устройство

Резистор – от английского глагола «resistance» (сопротивление). Пассивный элемент, который создает препятствие для движения электрического тока. Часть тока преобразуется из электрической энергии в тепло.

Пассивный резистор представляет из себя керамический цилиндр на поверхности которого нанесен резистивный (сопротивляющийся движению электрического тока) слой. На обоих концах цилиндра металлические (обычно медные) колпачки с выводами -проводниками. Проводники запаиваются на контактных площадках схемы.

Переменный резистор имеет еще один контакт, который называется ползунок. Он передвигается по резистивному слою и изменяет сопротивление между ползунком и контактами резистора.

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

Для чего используется

Они имеют разные функции:

  • токоограничивающие;
  • подтягивающие;
  • стягивающие;
  • делитель напряжения (комбинация из двух или потенциометр).

Работа токоограничивающего резистора заключается в ограничения тока.

Пример: в Ардуино требуется ограничить ток с выходных контактов. По документации он не должен превышать 40 мА. Напряжение питания 5В. По закону Ома определяется номинал резистора R= U/I = 5В/0,04А = 125 Ом (не меньше).

Стягивающий и подтягивающий резисторы используются в схемах рядом с входными контактами логических элементов. Стягивающие – когда нужен четкий логический ноль. Подтягивающий резистор arduino – когда нужна логическая единица.

Делитель напряжения используется для получения части напряжения от целого. Например: питание автомобильной бортовой сети 12,7В. Нужно зарядить аккумулятор для смартфона, который использует напряжение 5В. Делается делитель напряжения из двух резисторов сопротивление которых относится как 5 к 7. Еще одно сопротивление для ограничения тока.

Типы подтягивающих резисторов

Вход логических элементов обычно имеет, так называемое высокоимпедансное состояние – точка имеет высокое сопротивление и не подключена ни к питанию, ни к земле. Проводник подключенный к логическому входу будет выполнять роль антенны и срабатывать от паразитных наводок. На выходе Ардуино будет выдаваться совсем не то, что требуется. Чтобы вход не оставался в подвешенном состоянии его, через пассивный резистор, подключают (подтягивают) к линии питания. Соответственно на логическом входе гарантированно будет логическая единица. Такой резистор называется подтягивающим.

Подтягивающие резисторы могут быть:

  • внешние — подключаться в виде внешних пассивных элементов;
  • внутренние резисторы ардуино – как цифровой потенциометр входит в состав Ардуино.

Другой характеристикой является:

Сильный

Если резистор имеет небольшое сопротивление, то через него идет больший ток и разность потенциалов между линией питания и логическим входом будет небольшая. Он будет сильнее притягивать логическую единицу к входу Ардуино.

Но с другой стороны слишком большой ток постоянно идущий через вход устройство – это больший нагрев и бесполезные потери энергии.

Слабый

Если сопротивление резистора большое, то ток, идущий через резистор, будет небольшим. Соответственно разность потенциалов между входом и линией питания будет достаточно большой (подбирается так, чтобы напряжение между землей и входом не слишком отличалась от 3,3В).

Основные характеристики подтягивающих резисторов Arduino

Основные характеристики резисторов это:

  • Сопротивление (единица измерения — Ом, и кратные единицы – КилоОм, МегаОм);
  • Мощность (единица измерения — Вт);
  • Точность или допуск (единица измерения — %).

Сопротивление — это величина сопротивления проводника, к которому проложено напряжение в 1 Вольт и течет ток в 1 Ампер.

Допуск – отклонение сопротивления от номинала в результате технологической погрешности при изготовлении.

Мощность способность преобразовать в тепловую определенное количество электрической энергии при прохождении тока через резистор. Формула имеет вид: P= I 2 x R.

Расчет подтягивающего резистора

Расчет минимального сопротивления резистора достаточно прост и определяется из формулы:

Rp = (Vcc – 0,4)/3mA где:

  • Rp – минимальный номинал сопротивления резистора;
  • Vcc — Напряжение линии питания.

Соответственно Rp = (5V- 0,4V)/3mA= 1,5 кОм – Это минимальное сопротивление.

Максимальное сопротивление определяется по емкости шины конкретного устройства по формуле:

1µs – время нарастания сигнала для стандартного сигнала;

Cb – емкость шины – 20 пФ.

Расчет показывает, что сопротивление будет равно 50 кОм.

Как правильно выбрать номинал

Номинал резистора лежит в пределах от 1,5 кОм до 50 кОм. Подбирается обычно подбором. Подается соответствующий сигнал с рабочей частотой. Просматриваются осциллограммы и меняя сопротивления выбирается наиболее подходящее.

Схема подключения переменных резисторов к Ардуино

Для Подключения управляющих элементов на вход Ардуино разработаны стандартные схемы.

Подключение кнопок

Подключение кнопок хорошо представлена в схемах на рисунках.

Подключение кнопки с помощью стягивающего резистора.

Стягивающий резистор подключен между землей и логическим входом устройства.

Подключение кнопки с помощью подтягивающего резистора.

Подтягивающий резистор включен между линией питания и входом устройства.

Подключение микроконтроллера

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

Как сделать осциллограф на Ардуино для компьютера, читайте здесь.

Другие

Имея Ардуино с загруженной библиотекой Вы получаете инструмент управляющей нужной системой. Достаточно подключить нужные датчики. Датчики можно подключать цифровые и аналоговые. Цифровые уже ориентированы на работу с Ардуино. Аналоговые подключаются через аналогово-цифровые преобразователи, встроенные в микроконтроллер. Если их не хватает – приходится использовать мультиплексоры.

Спектр датчиков широк и постоянно пополняется новыми. Уже сейчас широко используются в качестве датчиков различные терморезисторы, объемные датчики, фотодатчики, резистивные датчики положения.

Наличие огромного количество уже готовых библиотек также облегчает жизнь изобретателей и просто «рукастых» людей. Возможности Ардуино ограничиваются только их фантазией.

Источник

Работа с кнопками

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

  • С фиксацией – кнопка остаётся нажатой после отпускания, без фиксации – отключается обратно.
  • Нормально разомкнутая (Normal Open, NO) – при нажатии замыкает контакты. Нормально замкнутая (Normal Closed, NC) – при нажатии размыкает контакты.
  • Тактовые кнопки – замыкают или размыкают контакт. У обычных тактовых кнопок ноги соединены вдоль через корпус (см. картинку ниже). Переключатели – обычно имеют три контакта, общий COM, нормально открытый NO и нормально закрытый NC. При отпущенной кнопке замкнута цепь COM-NC, при нажатой замыкается COM-NO.

Подключение и подтяжка

Из урока про цифровые пины вы помните, что микроконтроллер может считывать напряжение со своей ноги. Соответственно кнопка может подать на пин тот уровень, к которому подключена её вторая нога. В том же уроке мы обсуждали, что не подключенный никуда цифровой пин принимает наводки из воздуха, и считанное с него значение будет практически случайным. То есть подключив к пину 5V (сигнал высокого уровня) через кнопку, мы ничего не добьёмся: при нажатой кнопке на пине будет считываться четкий сигнал высокого уровня, а при отпущенной – случайное значение. Для решения этой проблемы существует такое понятие, как подтяжка (pull) пина. Подтяжка выполняется к земле (pull down) или питанию (pull up) микроконтроллера при помощи резистора. Подтяжка выполняется противоположно принимаемому сигналу, т.е. если нужно ловить высокий сигнал, подтяжка выполняется к земле, если ловить нужно сигнал земли – подтяжка выполняется к питанию. Вот два варианта подключения кнопки, с подтяжкой к VCC и GND соответственно: Как выбирается сопротивление резистора? Тут всё очень просто: при нажатии на кнопку через резистор потечёт ток, так как в любом случае замыкается цепь питание-земля. Чем выше ток, больше потери энергии и нагрев резистора, а это никому не нужно, поэтому сопротивление резистора подтяжки обычно выбирается в диапазоне 5-50 кОм. Если ставить больше – подтяжка может не обеспечить стабильный уровень сигнала на пине, а если ставить меньше – будут больше потери энергии в нагрев резистора: при сопротивлении в 1 ком через него потечёт ток величиной 5 В/1000 Ом = 5 мА, для сравнения плата Ардуино с МК в активном режиме потребляет 20-22 мА. Чаще всего для подтяжки используется резистор на 10 кОм. Как вы помните из урока о цифровых пинах, у МК AVR есть встроенные резисторы для всех GPIO, эти резисторы подключены к питанию (к VCC), то есть буквально дублируют первую схему из этого урока и позволяют не использовать внешний резистор. У микроконтроллеров другой архитектуры бывает подтяжка к GND, или вообще может не быть внутренней подтяжки. При использовании подтяжки к питанию мы получим инвертированный сигнал – функция digitalRead() вернёт 1 при отпущенной кнопке, и 0 при нажатой (при использовании нормально-разомкнутой кнопки). Давайте подключим кнопку на пин D3 (и GND):

Алгоритмы

Отработка нажатия

В большинстве реальных применений работать с текущим состоянием кнопки очень неудобно, например когда действие должно быть выполнено однократно при нажатии на кнопку, т.е. по клику. Чуть усложним конструкцию, добавив один флаг, который будет помнить состояние кнопки. Такая конструкция позволяет отслеживать нажатие и отпускание кнопки и реагировать на них однократно:

Дребезг контактов

Кнопка не идеальна, и контакт замыкается не сразу, какое-то время он “дребезжит”. Прогоняя данный алгоритм, система опрашивает кнопку и условия приблизительно за 6 мкс, то есть кнопка опрашивается 166’666 раз в секунду! Этого достаточно, чтобы получить несколько тысяч ложных срабатываний. Избавиться от дребезга контактов можно как аппаратно, так и программно: аппаратно задача решается при помощи RC цепи, то есть резистора (

1-10k) и конденсатора (

100nF). Выглядит это следующим образом:

Программно можно ввести простейший таймер нажатия, основанный на millis() , время гашения дребезга примем 100 миллисекунд. Вот так будет выглядеть код:

Рекомендуется конечно же использовать аппаратный способ, так как он не нагружает ядро лишними расчетами. В 99.99% проектов будет достаточно программного антидребезга, так то смело используйте конструкцию с millis() .

“Импульсное” удержание

В устройствах с управлением кнопкой очень часто бывает нужна возможность изменения значения как однократно кликом по кнопке, так и “автоматически” с тем же шагом – при удержании. Такой вариант реализуется очень просто, добавлением ещё одного условия в наш предыдущий алгоритм, а именно: если кнопка была нажата, но ещё не отпущена, и прошло времени больше, чем задано – условие вернёт true . В примере ниже периодичность “нажатий” при удержании настроена на 500 миллисекунд (2 раза в секунду):

Пользоваться таким кодом напрямую будет неудобно, поэтому можно “обернуть” его в класс (читай урок про классы и урок про написание библиотек).

Простейший класс кнопки

Вот так предыдущий пример можно сделать классом (мы делали это вот в этом уроке), положить его в отдельный файл (button.h) и пользоваться:

Другие возможности кнопки

Кнопка только с виду кажется простым устройством, дающим 0 и 1, но, подключив фантазию и время, можно придумать гораздо больше применений обычной кнопке. В моей библиотеке GyverButton реализовано очень много всяких интересных возможностей по работе с кнопкой, вот список:

  • Работа с нормально замкнутыми и нормально разомкнутыми кнопками
  • Работа с подключением PULL_UP и PULL_DOWN Опрос кнопки с программным антидребезгом контактов (настраиваемое время)
  • Отработка нажатия, удерживания, отпускания, клика по кнопке (+ настройка таймаутов)
  • Отработка одиночного, двойного и тройного нажатия (вынесено отдельно)
  • Отработка любого количества нажатий кнопки (функция возвращает количество нажатий)
  • Функция изменения значения переменной с заданным шагом и заданным интервалом по времени
  • Возможность работы с “виртуальными” кнопками (все возможности библиотеки используются для матричных и резистивных клавиатур)

Подробное описание библиотеки можно почитать в заголовочном файле на странице библиотеки, также там есть много примеров.

Аналоговые клавиатуры

Аналоговые клавиатуры – достаточно глубокая тема, достойная отдельного урока (у меня его пока что нет). Максимально подробный урок-исследование можно посмотреть на сайте Codius.

Видео


Источник

Подтягивающий резистор arduino это

Про Ардуино и не только

суббота, 3 февраля 2018 г.

Что такое подтягивающий (стягивающий) резистор

Мы бы хотели отслеживать нажатие кнопки для выполнения каких-то действий. Для этого мы подключили линию +5В через резистор и кнопку к цифровому выводу Ардуино, полагая, что при нажатии на кнопку ток потечет через нее и Ардуино считает на цифровом входе 2 сигнал высокого уровня. Соответственно, при размыкании контакта мы рассчитываем получить на входе сигнал низкого уровня. Так ли это? Проверим.
Подключим кнопку по приведенной схеме и загрузим в Ардуино следующий скетч. Результат его работы посмотрим в мониторе порта.

При нажатии на кнопку Ардуино, действительно, зафиксирует на входе сигнал высокого уровня, при этом в монитор порта будет выводиться значение «1». Но при отпускании кнопки в мониторе порта будут выводиться как «0», так и «1». Я даже больше скажу: можно исключить из схемы кнопку (все равно она разомкнута), у нас останется только провод, подключенный к порту 2 Ардуино, результат опроса порта будет таким же непредсказуемым. Особенно это хорошо заметно с длинным куском провода. Почему так происходит? Дело в том, что вход Ардуино не подключен ни к линии питания, ни к земле — он находится «ни в каком» состоянии. Такое состояние называется высокоимпедансным или Z-состоянием. Провод в данном случае выполняет роль антенны, на которую оказывают воздействие окружающие ее электромагнитные поля. В результате Ардуино непредсказуемо фиксирует то высокий, то низкий уровень сигнала на данном входе.

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

Иногда подтягивающим называют резистор, который подтягивает именно к питанию, также используют англоязычный термин pull-up (pull-up резистор). А для обозначения резистора, подтягивающего к земле, можно использовать термин стягивающий или pull-down резистор. Ниже приведены схемы подключения кнопки к логическому входу (не обязательно Ардуино) с использованием подтягивающего и стягивающего резисторов.

Попробуйте подключить кнопку к Ардуино используя одну из приведенных схем. В этот раз в мониторе порта не будет никаких неожиданных значений.

Как вы понимаете, подтягивающие резисторы весьма востребованы в электронике. Они нужны не только для подключения кнопок, но также при подключении выводов устройств с Z-состоянием или открытым коллектором. Поэтому многие контроллеры имеют встроенные подтягивающие резисторы, в том числе и Ардуино (а точнее используемые в них микроконтроллеры). Чтобы подтянуть порт Ардуино к питанию необходимо функцией pinMode установить для данного порта режим INPUT_PULLUP. Давайте немного изменим схему и скетч из начала этой статьи. Из схемы уберем резистор и установим кнопку между вторым портом и землей:

А в скетче изменим режим работы порта на INPUT_PULLUP, чтобы задействовать внутренний подтягивающий резистор:

Загрузите этот код в Ардуино и убедитесь, что схема работает как нам нужно без дополнительных (внешних) резисторов. В тот момент когда кнопка разомкнута порт Ардуино не остается подвешенным в воздухе: он подтянут к питанию внутренним резистором. Поэтому на нем гарантирован сигнал высокого уровня. А при нажатии кнопки будет считываться сигнал низкого уровня.

Не забывайте о встроенных подтягивающих резисторах Ардуино. Я довольно часто замечаю, что люди, пишущие статьи про Ардуино, не знают об их наличии и вешают для тех же кнопок внешние подтягивающие резисторы.

Что такое сильный (strong pull-up) и слабый (weak pull-up) подтягивающий резистор? Чем ниже сопротивление подтягивающего резистора, тем больший ток протекает через него и тем сильнее он подтягивает сигнал к питанию (или земле, если речь о pull-down резисторе). Отсюда и название сильный подтягивающий резистор. Соответственно, чем выше сопротивление, тем слабже резистор подтягивает сигнал, поэтому его называют слабым.

Как выбрать номинал для подтягивающего резистора? Общая рекомендация — это, как правило, 10кОм. Где-то от 5кОм и ниже считается сильной подтяжкой, 20..100кОм — слабая. Подтягивающие резисторы Ардуино имеют номинал 20..50кОм (конкретное значение подбирается и устанавливается на заводе изготовителе), т.е. являются слабыми. Поэтому в документации к различным устройствам можно увидеть рекомендации использовать более сильные подтягивающие резисторы. Особенно это актуально для устройств, работающих в неблагоприятных условиях или при значительной длине проводников, когда увеличивается вероятность возникновения электромагнитных помех.

Есть ли в Ардуино подтяжка к земле (внутренние pull-down резисторы)? — Нет. В Ардуино доступны только к подтягивающие к питанию резисторы. Поэтому если вам нужно подтянуть вывод к земле, то используйте для этого внешний резистор.

На этом всё. А дочитавшим до конца в качестве бонуса функциональная схема порта ввода/вывода микроконтроллера ATmega328P, используемого в Arduino UNO. На схеме показан подтягивающий резистор и условия для его включения:

  • бит PUD (PULLUP DISABLE) регистра MCUCR должен быть сброшен;
  • регистр DDxn (Data Direction) должен быть установлен в 0, т.е. порт сконфигурирован на ввод;
  • регистр PORTxn должен быть установлен в 1.

28 комментариев:

Друг ты опять спас меня, только из твоей статьи понял что если PULLUPом включаем подтягивающий резистор надо кидать контакт датчиков на землю. Весь русскоязычный интернет ато перешерстил. Спасибо.

Узнал про подтягивающие из курса универа в PIC16, использовать в ардуино начну сегодня :D

Надеюсь, в том смысле, что хорошая?

Получил Raspberry Pi и пользуюсь готовыми решениями с интернета, но ненмогу понять принципов работы, что очень напрягает (скорее раздражает). Ваш пост очень помог, хотя все ещё никакне могу понять две вещи:
1. Разве резистор на 10к Ом не должен снижать напряжение до нулевых значений, что при подводе к вводу должен преобразовываться в 0?
2. Почему при нажатии кнопки сигнал не разделяется и не поступает одновременно и на заземление и на ввод?

А почему резистор должен снижать напряжение?
Посмотрите на приведенную выше схему включения подтягивающего резистора. Когда кнопка разомкнута ток течет от VCC через резистор к микроконтроллеру — цифровой вход подтянут к питанию, на нем сигнал высокого уровня.
Сопротивление порта микроконтроллера (в режиме INPUT) очень велико и при нажатии на кнопку ток пойдет по цепи с меньшим сопротивлением — через кнопку. Через цифровой вход ток уже не потечет, на нем будет сигнал низкого уровня.

Спасибо за ответ, наконец то все понял. Странно что все это хорошо знал когда был школьником, а сейчас ума не приложу как все это работает. Хорошо что вы продолжаете поддерживать пост и читателей (особенно таких как я).

Великая статья. А главное понятно мне начинающему.

Привет Владимир !
Очень хорошая статья , спасибо .

Добрый день.
С удовольствием читаю ваши статьи.
Вопрос. Как влияют на энергопотребление подключение кнопки через стягивающий и подтягивающий резисторы?

Добрый день!
Вообще увеличивают, ведь через них протекает ток. Тем больший, чем меньше сопротивление резистора. Но по этому поводу не стоит заморачиваться, если вы работаете с Ардуино: на ее фоне подтяжка не влияет на потребление. А вот когда вы пересядете с Ардуино на отдельные микроконтроллеры и начнете считать микроамперы, вот тогда можно обратить на этот вопрос внимание.

Nick Gammon на странице http://www.gammon.com.au/power привел результаты своих измерений тока, потребляемого ATmega328P в режиме SLEEP_MODE_PWR_DOWN (BOD и ADC отключены) для различных состояний выводов:

Все пины в режиме OUTPUT, LOW: 0.35 мкА.
Все пины в режиме OUTPUT, HIGH: 1.86 мкА.
Все пины в режиме INPUT, LOW (внутренние подтягивающие резисторы не задействованы): 0.35 мкА.
Все пины в режиме INPUT, HIGH (задействованы внутренние подтягивающие резисторы): 1.25 мкА.

Разница в последних двух результатах — это и есть потери на подтяжку всех выводов.

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

Я сейчас в одном большом ступоре, если не сложно помогите, пожалуйста, определиться, какой контроллер (или систему) лучше взять за основу. Я биолог, но так получилось, что уже давно помимо прочего, отвечаю за сбор, хранение и обработку данных. Признаюсь сразу — программирование как таковое вызывает паралич мозга, но есть такое слово НАДО, поэтому уже 14 и 2 года соответственно у меня успешно работают две базы собранные на VB в Exel, из записей встроенного ридера, уроков «Планеты EXEL» и всякого разного не всегда цензурного….

В общем, сперва почитал восторги на счет Ардуино, посмотрел FLProg (с души вроде не воротит, как XOD ID), в процессе Arduino IDE мелькает — тоже вроде бы явного отторжения не вызывает. Не нравиться два момента — цена кусается, и кушать все таки любит она, а с моим зрение боюсь даже светодиод отпаять будет проблематично. Второй взгляд был на STM32L0 — тут вроде бы и энергопотребление вкусное и часы реального времени тебе встроенные и. зашел еще на один ресурс БЛИН, уши в трубочку свернулись. и мозги-то народу ардуиной зс$р@ны и все эти ваши таблЭтки и примочки хуже чем инвалиды на всю жизнь бейсиком искалеченные и ниже -10 уже не работает и вообще… ИДИТЕ ВЫ. Не мешайте народу НОРМАЛЬНЫЕ языки программирования изучать, ПУСТЬ УЧАТ, а не это ваше всякое-разное!

В общем аппаратная часть STM32 если честно нравиться, но как ее программировать и с какого боку прошивать, пока даже образно, если честно плохо понимаю, в то время как по Ардуино и в скетчах уже покопался и библиотеки посмотрел, логического шока вроде нет (пока). Вот и думаю имеет смысл углубляться в Ардуино среду или все же на какие-то другие контроллеры посмотреть? Например MSP430 еще рассматривал, но это я так понимаю еще одна среда и уже другая, значит и скетчи для датчиков не факт, что будут и библиотеки тоже, то есть все руками через регистры, что это такое я вроде бы (хотя не факт), а вот как руками делать пока увы не представляю.

Сама задача из-за чего весь сыр-бор выглядит так, есть необходимость сделать простую, но гибкую метеосистему. Гибкую в том плане, что вот надо сейчас сделать регистратор температуры и влажности воздуха, что бы просыпался, допустим каждые 10 минут, снимал данные, писал на SD и засыпал, но при этом с автономным сроком работы хотя бы полгода и МАЛЕНЬКИЙ (грибники тырят блин) и все это в количестве штук 5-10 за не сильно астрономическую сумму (к слову посмотрел цены очень хороших датчиков SHT35 и приятно офигел, с модулями не сравнить). А завтра надо тоже самое, но плюс замер света и каждый час продувание камеры вентилятором (для учета транспирации), то есть уже не такое автономное (пара недель), не такое маленькое (может с батарейкой солнечной или даже с выводом данных по wi-fi/sim/радиоканалу), но что бы не с нуля и в той же системе?

Про энергосбережение читал кстати очень внимательно, про прерывания тоже. Главная головная боль на данный момент, ОЧЕНЬ много информации о том, что из глубокого сна хорошо выходить по внешнему прерыванию, например с часов реального времени (выбрал DS3231), нашел даже связку блоков сон/пробуждение для FLProg, библиотеки вроде бы тоже есть. НО. нигде не найду, хоть сколько ни будь, внятного объяснения куда в этом случае прописывать или ставить в визуальную среду этот самый внутренний будильник часов реального времени, как программировать его, способна ли сама программа после пробуждения его перепрограммировать на новое время и как запрограммировать ногу SQW на модуле, что бы она выдавала этот самый вожделенный сигнал на пробуждение платы.

Буду очень признателен, если хотя бы по общему направлению сориентируете — куда смотреть и что искать.

Добрый день!
С STM я не работал, поэтому сравнить с AVR не могу. Может оно было бы и лучше. Но Ардуино однозначно популярнее, для нее куча библиотек, примеров — на ней будет проще сделать. И если использовать не саму Ардуину, а отдельно микроконтроллер, то потребление будет реально низким. Проработать автономно год, периодически просыпаясь для опроса датчиков — запросто.

Что касается flprog, то, мне кажется, для серьезных проектов он не очень. Лучше использовать нормальную IDE, в которой сам всё контролируешь.

Так что мне видится следующее решение: AVR (ATmega328P) + DS3231 + датчики + на что писать показания (flash). Часы программируются на генерацию сигнала с нужным интервалом (10 минут), они будут выдавать его на SQW. Микроконтроллер при включении переводим в режим PowerDown, разрешив пробуждение по внешнему прерыванию — от DS3231. Проснувшись, запитываем датчики и память, читаем показания, пишем их в память, отключаем всех и снова спать до следующего сигнала будильника.

Цена ATmega328P на Али меньше 100р. Потребление, как уже сказал, низкое: спать — хоть несколько лет; с учетом просыпаний — нужно иметь представление об общем потреблении системы, но батареи 1Ач на год-то должно хватить. Температурный диапазон -40..105C. Вполне нормальный МК для данной задачи.

Источник

Arduino – функции ввода / вывода

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

Пины настроены как ВХОД

Пины Arduino по умолчанию настроены как входы, поэтому их не нужно явно объявлять как входы с помощью pinMode (), когда вы используете их в качестве входов. Считается, что выводы, настроенные таким образом, находятся в состоянии высокого импеданса. Входные контакты предъявляют чрезвычайно малые требования к цепи, которую они дискретизируют, что эквивалентно последовательному резистору 100 мОм перед контактом.

Это означает, что для переключения входного контакта из одного состояния в другое требуется очень мало тока. Это делает выводы полезными для таких задач, как реализация емкостного сенсорного датчика или считывание светодиода в качестве фотодиода.

Контакты, сконфигурированные как pinMode (pin, INPUT), к которым ничего не подключено, или с проводами, подключенными к ним, которые не подключены к другим цепям, сообщают о случайных изменениях состояния контактов, захвате электрических помех из окружающей среды или емкостной связи состояния соседней булавки.

Подтягивающие резисторы

Подтягивающие резисторы часто полезны для приведения входного контакта в известное состояние, если вход отсутствует. Это можно сделать, добавив подтягивающий резистор (до + 5 В) или понижающий резистор (резистор к земле) на входе. Резистор 10K является хорошим значением для резистора с повышением или понижением.

Использование встроенного подтягивающего резистора с выводами, настроенными в качестве входа

В микросхему Atmega встроено 20 000 подтягивающих резисторов, к которым можно получить доступ из программного обеспечения. Доступ к этим встроенным нагрузочным резисторам можно получить, установив pinMode () как INPUT_PULLUP. Это эффективно инвертирует поведение режима INPUT, где HIGH означает, что датчик выключен, а LOW означает, что датчик включен. Значение этого подтягивания зависит от используемого микроконтроллера. На большинстве плат на базе AVR это значение гарантируется в пределах от 20 кОм до 50 кОм. На Arduino Due он составляет от 50 кОм до 150 кОм. Для точного значения, обратитесь к спецификации микроконтроллера на вашей плате.

При подключении датчика к выводу, настроенному с помощью INPUT_PULLUP, другой конец должен быть заземлен. В случае простого переключателя это заставляет штифт читать HIGH, когда переключатель разомкнут, и LOW, когда переключатель нажат. Подтягивающие резисторы обеспечивают достаточный ток, чтобы зажечь светодиод, слабо подключенный к выводу, настроенному как вход. Если кажется, что светодиоды в проекте работают, но очень тускло, это, вероятно, происходит.

Те же регистры (места внутренней памяти чипа), которые контролируют, является ли вывод ВЫСОКИМ или НИЗКИМ, управляют подтягивающими резисторами. Следовательно, вывод, который настроен на включение подтягивающих резисторов, когда вывод находится в режиме INPUT, будет иметь вывод, настроенный как ВЫСОКИЙ, если вывод затем переключается в режим ВЫХОД с помощью pinMode (). Это работает и в другом направлении, и на выходном выводе, который остается в ВЫСОКОМ состоянии, будет настроен подтягивающий резистор, если он переключен на вход с помощью pinMode ().

Пины настроены как выходной

Пины, настроенные как OUTPUT с pinMode (), как говорят, находятся в состоянии низкого сопротивления. Это означает, что они могут обеспечить значительную величину тока для других цепей. Контакты Atmega могут подавать (обеспечивать положительный ток) или потреблять (обеспечивать отрицательный ток) до 40 мА (миллиампер) тока на другие устройства / цепи. Этого тока достаточно, чтобы ярко загореться светодиод (не забывайте о последовательном резисторе) или запустить много датчиков, но недостаточно тока для работы реле, соленоидов или двигателей.

Попытка запустить устройства с высоким током от выходных выводов может привести к повреждению или разрушению выходных транзисторов в выводе или повреждению всего чипа Atmega. Часто это приводит к «мертвому» выводу в микроконтроллере, но оставшиеся микросхемы по-прежнему функционируют адекватно. По этой причине рекомендуется подключать выводы OUTPUT к другим устройствам через резисторы сопротивлением 470 Ом или 1 кОм, если для конкретного применения не требуется максимальный ток, снимаемый с выводов.

Функция pinMode ()

Функция pinMode () используется для настройки определенного вывода на поведение входа или выхода. Внутренние подтягивающие резисторы можно включить в режиме INPUT_PULLUP. Кроме того, режим INPUT явно отключает внутренние подтягивания.

pinMode () Синтаксис функции

pin – номер пина, режим которого вы хотите установить

режим – INPUT, OUTPUT или INPUT_PULLUP.

pin – номер пина, режим которого вы хотите установить

режим – INPUT, OUTPUT или INPUT_PULLUP.

Функция digitalWrite ()

Функция digitalWrite () используется для записи значения HIGH или LOW на цифровой вывод. Если вывод был сконфигурирован как OUTPUT с помощью pinMode () , его напряжение будет установлено на соответствующее значение: 5 В (или 3,3 В на платах 3,3 В) для ВЫСОКОГО, 0 В (заземление) для НИЗКОГО. Если вывод сконфигурирован как INPUT, digitalWrite () активирует (HIGH) или отключает (LOW) внутреннее подтягивание на входном выводе. Рекомендуется установить для pinMode () значение INPUT_PULLUP, чтобы включить внутренний подтягивающий резистор.

Если вы не установили pinMode () на OUTPUT и подключили светодиод к контакту, то при вызове digitalWrite (HIGH) светодиод может выглядеть тусклым. Без явной установки pinMode () digitalWrite () включит внутренний подтягивающий резистор, который действует как большой ограничивающий ток резистор.

Синтаксис функции digitalWrite ()

pin – номер пина, режим которого вы хотите установить

значение – ВЫСОКОЕ или НИЗКОЕ.

pin – номер пина, режим которого вы хотите установить

значение – ВЫСОКОЕ или НИЗКОЕ.

функция analogRead ()

Arduino может определить, есть ли напряжение на одном из его выводов, и сообщить об этом через функцию digitalRead (). Существует разница между датчиком включения / выключения (который обнаруживает присутствие объекта) и аналоговым датчиком, значение которого постоянно изменяется. Чтобы прочитать этот тип датчика, нам нужен другой тип булавки.

В правой нижней части платы Arduino вы увидите шесть выводов с пометкой «Analog In». Эти специальные контакты показывают не только напряжение, приложенное к ним, но и его значение. Используя функцию analogRead () , мы можем прочитать напряжение, приложенное к одному из выводов.

Эта функция возвращает число от 0 до 1023, которое представляет напряжения от 0 до 5 вольт. Например, если на вывод № 0 подается напряжение 2,5 В, analogRead (0) возвращает 512.

Синтаксис функции analogRead ()

pin – номер вывода аналогового входа для чтения (от 0 до 5 на большинстве плат, от 0 до 7 на Mini и Nano, от 0 до 15 на Mega)

pin – номер вывода аналогового входа для чтения (от 0 до 5 на большинстве плат, от 0 до 7 на Mini и Nano, от 0 до 15 на Mega)

Источник

Adblock
detector