pullup вместо резистора для кнопки

wrun
Offline
Зарегистрирован: 03.07.2014

Добрый день!

Требуется подключить кнопку, и слушать ее состояние, обычно она замкнута, по обычной схеме, как я понял рекомендуется возврат с кнопки (который входит в ногу (D2)) подтянуть к GND через резистор 2,2-10кОм. Но вроде можно сконфигурировать pullup программно?

pinMode(pin, INPUT);
аdigitalWrite(pin, LOW);

Можно ли так пользоваться, или не зря рисуют отдельный резистор?

P.S. Arduino Nano

wrun
Offline
Зарегистрирован: 03.07.2014

Задачу решил по другому:

Кнопку подключил к GND и D2 и сделал pullup к 5В, теперь при замыкании она падает в 0, а резистора pullup имхо хватит для КЗ между GND и 5В

pinMode(pin, INPUT);
digitalWrite(pin, HIGH);

P.S. комментарии бы всё же послушал, мало ли ошибаюсь

leshak
Offline
Зарегистрирован: 29.09.2011

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

Непонятно только зачем вы обозвали это "хватит для КЗ между GND и 5В", так как его предназначение прямо противоположное: cделать подтяжку, но что-бы небыло КЗ в момент нажатия кнопки. C чем он багополучно справляется.

КЗ - это уже аварийное состояние. Это когда можно попалить дуину, USB порт и т.п. И у вас тут его - явно не будет.

Ну разве что pinMode(pin,INPUT) - не обязательно. По умолчанию пины и так на вход включены. Но... лично я тоже предпочитаю лишний раз написать pinMode. Не экономитьп пару нажатий клавиатуры. Явно видно по коду что это вход, и если случайно, где-то выше он включался на OUTPUT - меньше рисков.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Не понимаю почему все упорно отказываются писАть

pinMode(pin,OUTPUT); // выход

pinMode(pin,INPUT); // вход

pinMode(pin,INPUT_PULLUP); // вход с подтяжкой

 

 

leshak
Offline
Зарегистрирован: 29.09.2011

trembo пишет:

Не понимаю почему все упорно отказываются писАть

Ну, на 80% - дело привычки и существование большого объема кода где уже написанно "по старому".

К тому же старые версии IDE - еще встречаются. Так я знаю что "будет работать везде".
Да и, к "чистому AVR-ровскому стилю" как-то ближе. Меньше расстояние между ардуиновским кодом и тому что описано в даташите или любому туториалу по портам-ввода/вывода AVR-ки.

Вообщем "так" получается как бы "более осознанно". Лучше понимаешь что происходит и что именно ты делаешь.

Но, конечно, хотите писать INPUT_PULLUP - пишите. А я хочу - раздельно ;)
 

leshak
Offline
Зарегистрирован: 29.09.2011

Кстати название темы "pullup вместо резистора для кнопки" - идеологически неверно.

Так как у нас нет никакого "вместо". Резисторы бывает, смотря по тому куда подтягивают к земле или питанию, pullup и pulldown.
Различаются по тому где физически расположены: внешние и внутренние (встроенные в камень).
Соотвественно, теоретически у нас есть 4-ре комбинации-разновидности:

1. внешний pullup
2. внешний pulldown
3. внутренний pullup
4. внитуренний pulldown

Первый два естественно целиком под нашим контролем. Какой хотим - такой и сделаем. Какой номинал хотим - такой и поставим.
Третий и четвертый, естественно - что производитель камня сделал то и будем пользовать.
В случае AVR-рок восмибитных производитель сделал только "внутренний pullup" (но в других камнях и внутренний pulldown бывает).

Так что никаких "вместо". Мы продолжаем использовать резистор для кнопки. Просто "другой".

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Leshak, я понял где твои ты можешь быть страшно полезен. Когда нужно на диске порядок навести, разложить все по папочкам и составить описание.
Вот если бы ты еще писал повеселее, мы бы тебе предложение предложили.

JollyBiber
JollyBiber аватар
Offline
Зарегистрирован: 08.05.2012

Puhlyaviy пишет:
Вот если бы ты еще писал повеселее, мы бы тебе предложение предложили.

Ты меня пугаешь!

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

JollyBiber пишет:

Puhlyaviy пишет:
Вот если бы ты еще писал повеселее, мы бы тебе предложение предложили.

Ты меня пугаешь!


Да я сам себя боюсь.

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

Leshak - молодец! Как у него только нервы выдержали в  теме про   1023 - 1024 , я бы не смог.....

wrun
Offline
Зарегистрирован: 03.07.2014

Как то мне значит не везло на примеры, или искал криво. Т.к. у меня кнопка постоянно замкнута, то я от КЗ и спасался, может не однозначно сформулировал...

wrun
Offline
Зарегистрирован: 03.07.2014

trembo пишет:

Не понимаю почему все упорно отказываются писАть

pinMode(pin,OUTPUT); // выход

pinMode(pin,INPUT); // вход

pinMode(pin,INPUT_PULLUP); // вход с подтяжкой

Я использую CyberLib.h, а там (на сколько я знаю) это в любом случае в 2 строчки, поэтому и вопрос так задавал. Как правильно сказали - дело привычки...

Maverik
Offline
Зарегистрирован: 12.09.2012

Если кнопка постоянно-замкнутая, то лучше использовать внешний резистор.

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

И кстати, всё еще интересный вопрос - а в каких случаях имеет смысл задействовать и внутреннюю и внешнюю подтяжку одновременно ?  Как в этом случае соединены резисторы- параллельно или посделовательно ???

art100
Offline
Зарегистрирован: 09.03.2014

Maverik пишет:

Если кнопка постоянно-замкнутая, то лучше использовать внешний резистор.

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

внутри микросхем сгорает что-то не потому что микросхема дохлая, а потому что снаружи ...

Цитата:

И кстати, всё еще интересный вопрос - а в каких случаях имеет смысл задействовать и внутреннюю и внешнюю подтяжку одновременно ?  Как в этом случае соединены резисторы- параллельно или посделовательно ???

косинусом

может вам не стоит заниматься arduino?

 

SU-27-16
SU-27-16 аватар
Offline
Зарегистрирован: 13.08.2012

trembo пишет:

Leshak - молодец! Как у него только нервы выдержали в  теме про   1023 - 1024 , я бы не смог.....

дык, примерно одинаково рассуждаем - а вот победить в споре нельзя... тока в пари :)

Buzoff
Offline
Зарегистрирован: 03.04.2018

а можно ли програмно подтягивать Rx к плюсу?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Buzoff пишет:

а можно ли програмно подтягивать Rx к плюсу?

Клапауций запретил, лет пять тому как уже.

Logik
Offline
Зарегистрирован: 05.08.2014

А потом самого Клапуция запретили. Двойное отрицание ;)

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Logik пишет:

А потом самого Клапуция запретили. Двойное отрицание ;)

Ваще сложно стало, блин. Вот как теперь к плюсу подтягивать? :)

Buzoff
Offline
Зарегистрирован: 03.04.2018

DIYMan пишет:

Buzoff пишет:

а можно ли програмно подтягивать Rx к плюсу?

Клапауций запретил, лет пять тому как уже.

а где об этом можно почитать?

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Buzoff пишет:

DIYMan пишет:

Buzoff пишет:

а можно ли програмно подтягивать Rx к плюсу?

Клапауций запретил, лет пять тому как уже.

а где об этом можно почитать?

 

Да подтягивай, господи, это был сарказм :)

Buzoff
Offline
Зарегистрирован: 03.04.2018

[/quote]

Да подтягивай, господи, это был сарказм :)

[/quote]

я так по началу и подумал, но в соседней теме (этот же вопрос) я уже не понимаю, где сарказм, а где не сарказм)))

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Buzoff пишет:

я так по началу и подумал, но в соседней теме (этот же вопрос) я уже не понимаю, где сарказм, а где не сарказм)))

Ты UART на этом пине используешь? Если нет - не рефлексируй и юзай внутреннюю подтяжку. Если да - то тоже не рефлексируй и попробуй. У мну UART нормально и штатно работает с включенной внутренней подтяжкой на RX-линии, к слову.

Buzoff
Offline
Зарегистрирован: 03.04.2018

DIYMan пишет:

Buzoff пишет:

я так по началу и подумал, но в соседней теме (этот же вопрос) я уже не понимаю, где сарказм, а где не сарказм)))

Ты UART на этом пине используешь? Если нет - не рефлексируй и юзай внутреннюю подтяжку. Если да - то тоже не рефлексируй и попробуй. У мну UART нормально и штатно работает с включенной внутренней подтяжкой на RX-линии, к слову.

та в том то и дело, что использую UART. просто rx подключаю не напрямую к tx, а через мосфет (для согласования логических уровней 5 и 12в), в данном случее нужны подтягивающие резисторы.

мне захотелось избавиться от внешнего, вот и решил спросить у знающих, перед тем как эксперементировать)