Pages: [1]   Go Down
Author Topic: INPUT_PULLUP usage  (Read 1482 times)
0 Members and 2 Guests are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

I was just reading about the new INPUT_PULLUP in Arduino 1.0.1+ and had a couple of questions.
Firstly my understanding of this function is that instead of:
10k resistor from 'button' pin to ground and then 5v > 'button' pin being toggled by the button/switch etc.
if (buttonpin == HIGH) {
do stuff here
}

We can use:
Only GND > 'button' pin via switch/toggle
INPUT_PULLUP instead of INPUT
if (buttonpin == LOW) {
do stuff here
}

So firstly is my understanding correct?
Secondly, is there a limit on how many INPUT_PULLUP's we can use or is it available to every digital pin?
Thirdly, are there any con's in using it this way?  To me saving on a resistor and the additional wiring is a massive pro, but why would one NOT use this INPUT_PULLUP and instead use INPUT with a manually inserted pulldown resistor?
Logged

Austin, TX
Online Online
Faraday Member
**
Karma: 71
Posts: 6132
Baldengineer
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

The pull-up isn't new.  It was just more cryptic to use before 1.0.1.  Every pin has a pull-up resistor that can be turned on, including the analog inputs.

One tradeoff is that Pull-Ups will have inverted logic relative to a Pull-Down.  E.g. when a button is NOT pressed, the value will be HIGH.  when the button IS pressed, the value will be LOW.  (This trips up some people at first.)
Logged

Capacitor Expert By Day, Enginerd by night.  ||  Personal Blog: www.baldengineer.com  || Electronics Tutorials for Beginners:  www.addohms.com

Montreal
Offline Offline
Faraday Member
**
Karma: 27
Posts: 2566
Per aspera ad astra.
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
So firstly is my understanding correct?
Secondly, is there a limit on how many INPUT_PULLUP's we can use or is it available to every digital pin?
Thirdly, are there any con's in using it this way?  To me saving on a resistor and the additional wiring is a massive pro, but why would one NOT use this INPUT_PULLUP and instead use INPUT with a manually inserted pulldown resistor?
1 Yes.
2 No limits.
3 Resistors value are not accurate, 20 - 50 kOhm.  Plus, for battery powered  MCU this is too low, if button get pressed for long. 
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Thanks for that James - That's what I thought in terms of the logic (The new relay circuits I purchased also were LOW to trigger instead of HIGH which caused me some issues)
Can anyone elaborate on Magician's 3rd comment? More specifically:
Is there a problem with having these 'bad' valued resistors if I'm only using it to take input(s) for a button(s)?
What is meant by "Plus, for battery powered  MCU this is too low, if button get pressed for long."? 
Logged

Austin, TX
Online Online
Faraday Member
**
Karma: 71
Posts: 6132
Baldengineer
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

If the internal pull up is only 20k, then each time a button is pressed 250uA is drawn.  I guess the concern is the button is held down for a long period of time, it could contribute to reduced battery life.  With external resistors you could use larger (known) values.

I'm not sure I'd put a lot of thought into that though, but, that's just me.
Logged

Capacitor Expert By Day, Enginerd by night.  ||  Personal Blog: www.baldengineer.com  || Electronics Tutorials for Beginners:  www.addohms.com

0
Offline Offline
Newbie
*
Karma: 0
Posts: 25
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So in a nutshell for anyone else who looks at this thread the following is correct for using INPUT_PULLUP?:
Pro: Less physical wiring
Cons: 250ua (0.00125w) extra drain per button in use.  Logic reversed - If (XX == HIGH) now needs to be If (XX == LOW) for the function to remain working the same)

For my particular project the battery life doesn't matter as it's going to have 12v 7AH batteries as it's only a small part of a larger project but I understand for some people that battery life is critical.

Thanks for the help guys, you've saved me about $0.20 in resistors and $50 in time smiley
Logged

Anaheim CA.
Offline Offline
Faraday Member
**
Karma: 46
Posts: 2865
...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in a noisy environment and with longish leads >6" I would install a 1K pull-up or a .047 uf cap from the button pin to Vcc, might even buy some cheap debounce w/o the 1K resistor. Both together would simply add to the noise suppression.

Doc
Logged

--> WA7EMS <--
“The solution of every problem is another problem.” -Johann Wolfgang von Goethe
I do answer technical questions PM'd to me with whatever is in my clipboard

Offline Offline
Edison Member
*
Karma: 19
Posts: 1041
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

So in a nutshell for anyone else who looks at this thread the following is correct for using INPUT_PULLUP?:
Pro: Less physical wiring
Cons: 250ua (0.00125w) extra drain per button in use.  Logic reversed - If (XX == HIGH) now needs to be If (XX == LOW) for the function to remain working the same)

For my particular project the battery life doesn't matter as it's going to have 12v 7AH batteries as it's only a small part of a larger project but I understand for some people that battery life is critical.

Thanks for the help guys, you've saved me about $0.20 in resistors and $50 in time smiley

The current drain is only when the switch is closed. However, you get the same draw if you use an external resistor -- it's just that you get to use whatever value resistor you want (although 10k to 20k is standard -- I've always used 10k, so the built in resistor draws less power).
Logged

Anaheim CA.
Offline Offline
Faraday Member
**
Karma: 46
Posts: 2865
...
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

The whole point was not what was conventional but a possible source of intermittent sketch operation due to noise being picked up if only the weak pull-up is used, either by passing it with more pull-up current (lowering it's input impedance to 1K instead of 20 - 50K or by by-passing the noise picked up to the positive rail and thus into the nearest big bypass with the .047uF cap a larger value might be needed the caution would be not to make it so large as to provide a delay of it's own..., either way would work. Both methods bypass the antenna lead (the wire to the button) and solve a potential noise issue that has plagued several users here. In those cases it was an open input pin, disconnected that was ultimately tied to a pin with nothing connected to it, merely proximity to the OP's hand.

Doc
Logged

--> WA7EMS <--
“The solution of every problem is another problem.” -Johann Wolfgang von Goethe
I do answer technical questions PM'd to me with whatever is in my clipboard

Pages: [1]   Go Up
Jump to: