Настало время попробовать поработать с :)
Для начала, возьмём обычную кнопку и соберём такую простую схему:
как видно – это просто дополненная схема -а :)
Что же происходит на 12-м цифровом порту? Если к порту ничего не подключено – его состояние меняется между 0V и 5V ().
Подключая резистор между портом и землёй — мы тем самым «прижимаем» порт к 0 (LOW), а при нажатии кнопки происходит соединение с напряжением питания и тем самым порт «подтягивается» к 5V (HIGH).
Тем самым мы узнаём – нажата кнопка или нет – просто считывая значение на входе 12 цифрового порта и проверяя – HIGH это или LOW.
код скетча прост:
/*
* LED with button
*/
int ledPin = 13; // сетодиод
int btnPin = 12; // кнопка
int val=0;
void setup()
{
pinMode(ledPin, OUTPUT); // это выход - светодиод
pinMode(btnPin, INPUT); // а это вход - кнопка
Serial.begin(9600); // будем записывать в COM-порт
}
void loop()
{
val = digitalRead(btnPin); // узнаём состояние кнопки
if(val==HIGH) // кнопка нажата
{
digitalWrite(ledPin, HIGH); // зажигаем светодиод
Serial.println("H");
}
else // кнопка не нажата
{
digitalWrite(ledPin, LOW); // гасим светодиод
Serial.println("L");
}
delay(100);
}
а вот что увидим в мониторе последовательного порта:
Вот и всё. А теперь можно проявить фантазию и использовать вместо обычной кнопки что-нибудь поинтереснее, например — геркон :)
Где-то читал, что ATmega уже содержит «подтягивающие» резисторы включаемые программно… а как это можно сделать? никто не знает? ведь тогда бы, насколько я понял не нужен бы был R1
Почитать как включается подтяжка можно (абзац после слов «схема включения») — это на Wiring-е, на С зависит от компилятора ( для WinAVR-а).
Только резистор этот подтягивает ногу к питанию — чтение будет возвращать 1, значит кнопкой пин нужно прижимать к земле.НО! тут вылезает один нюанс — если «кто-то что-то перепутает» и пин будет сконфигурирован как OUTPUT, HIGH то кнопка ему устроит КЗ на землю — можно подпалить МК. И пришлось бы снова, «на всякий случай», ставить резистор.
Эта схема включения выбрана как наиболее безопасная и простая в программной реализации=)
Что же происходит на 12-м цифровом порту? Если к порту ничего не подключено – его состояние меняется между 0V и 5V (LOW & HIGH).
Подключая резистор между портом и землёй — мы тем самым «прижимаем» порт к 0 (LOW), а при нажатии кнопки происходит соединение с напряжением питания и тем самым порт «подтягивается» к 5V (HIGH).
Почему нельзя просто поставить кнопку между пин12 и землёй? На пин12 вроде бы как есть своё напряжение?
Вот смотри, когда к нему ничего не подцеплено, то значения на нем непредсказуемы. Когда мы садим на землю то мы получаем ноль, и можем быть уверены в том что на этой ноге нет ничего кроме ноля. А через кнопку мы помимо земли садим на ногу +5, и значение будет уже не 0 (low) a High, резистор нужен что бы не замыкать напрямую землю и +5. Если делать как предложил ты, то ты просто выжжешь ногу, посадив ногу с +5 напрямую, без нагрузки к земле
Для кнопки то?
Как обычоно, по закону ома=)
Задача прижать PIN12 к земле так(таким сопротивлением), чтоб витающие в эфире помехи не повлияли на устойчивое чтение нуля пока кнопка не нажата(не навели напряжение достаточное для признание его еденицей)- то есть чем меньше сопротивление тем лучше.
С другой стороны не хочется получить короткое замыкание(ну или просто увеличение потребления) в момент когда кнопка будет нажата (мыж фактически "+" с "-" соеденияем через резистор) — то есть чем больше сопротивление тем лучше.
Нужно высчитать компромиссное значение!
Но так как всем лень искать по датащитам значения внутреннего сопротивления пина в режиме чтения (тока потребления) и прикидывать интенсивность помех наводимых на этот пин, ставят то что под рукой есть.
Обычно 1к до 100к. (часто можно видеть на схемах такие номиналы — 1к, 10к, 100к)
Можно даже от 500ом, в данном случае не принципиально.
Ну вот на Ардуино Uno насколько я помню рекомендуемый максимальный ток — 40мА (или путаю)
Вольтаж тут — 5В
Итого минимальное сопротивление, чтобы не превысить ток — 125 Ом. Получается 200 омного с головой бы хватало?
угу, хватит, чтоб посадить батарейку(«крону»)за несколько десятков нажатий на кнопку =D
Вы не так поняли,
речь о ПОТРЕБЛЯЕМОМ ПИНОМ токе и о напряжении ПОМЕХИ.
А если говорить о «критерии ДОПУСТИМОГО потребления при нажатой кнопке», то тогда конечно, да, и 10ом хватит =D
Ведь стабилизатор на плате может дать до 0.8-1А =D
Только зачем на кнопку такой вообще ток расходовать?!
И вообще не забивайте себе голову,
ставьте 1к, и не парьтесь =)
Комментарии (15)
RSS свернуть / развернутьManLee
Только резистор этот подтягивает ногу к питанию — чтение будет возвращать 1, значит кнопкой пин нужно прижимать к земле.НО! тут вылезает один нюанс — если «кто-то что-то перепутает» и пин будет сконфигурирован как OUTPUT, HIGH то кнопка ему устроит КЗ на землю — можно подпалить МК. И пришлось бы снова, «на всякий случай», ставить резистор.
Эта схема включения выбрана как наиболее безопасная и простая в программной реализации=)
Zoltberg
Почему нельзя просто поставить кнопку между пин12 и землёй? На пин12 вроде бы как есть своё напряжение?
lfway
Tickat
Не совсем ясно, зачем использовать 3 выхода, когда вроде бы можно обойтись двумя? Хочется разобраться в этом вопросе.
lfway
lfway
Tickat
lfway
Почитать можно у хальта
Zoltberg
Ryo
Как обычоно, по закону ома=)
Задача прижать PIN12 к земле так(таким сопротивлением), чтоб витающие в эфире помехи не повлияли на устойчивое чтение нуля пока кнопка не нажата(не навели напряжение достаточное для признание его еденицей)- то есть чем меньше сопротивление тем лучше.
С другой стороны не хочется получить короткое замыкание(ну или просто увеличение потребления) в момент когда кнопка будет нажата (мыж фактически "+" с "-" соеденияем через резистор) — то есть чем больше сопротивление тем лучше.
Нужно высчитать компромиссное значение!
Но так как всем лень искать по датащитам значения внутреннего сопротивления пина в режиме чтения (тока потребления) и прикидывать интенсивность помех наводимых на этот пин, ставят то что под рукой есть.
Обычно 1к до 100к. (часто можно видеть на схемах такие номиналы — 1к, 10к, 100к)
Можно даже от 500ом, в данном случае не принципиально.
Zoltberg
Вольтаж тут — 5В
Итого минимальное сопротивление, чтобы не превысить ток — 125 Ом. Получается 200 омного с головой бы хватало?
Ryo
Вы не так поняли,
речь о ПОТРЕБЛЯЕМОМ ПИНОМ токе и о напряжении ПОМЕХИ.
А если говорить о «критерии ДОПУСТИМОГО потребления при нажатой кнопке», то тогда конечно, да, и 10ом хватит =D
Ведь стабилизатор на плате может дать до 0.8-1А =D
Только зачем на кнопку
такойвообще ток расходовать?!И вообще не забивайте себе голову,
ставьте 1к, и не парьтесь =)
Zoltberg
raphtor
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.