36 votos

¿Cuál es la diferencia entre INPUT y INPUT_PULLUP?

En Arduinos más nuevos, uno puede configurar pinMode en uno de tres estados: OUTPUT, INPUT y INPUT_PULLUP.

Esta página dice:

El chip Atmega en el Arduino tiene resistencias de pull-up internas (resistencias que se conectan internamente a la alimentación) a las que se puede acceder. Si prefieres usar estas en lugar de resistencias de pull-down externas, puedes usar el argumento INPUT_PULLUP en pinMode(). Esto Invierte efectivamente el comportamiento, donde HIGH significa que el sensor está apagado, y LOW significa que el sensor está encendido.

Estoy bastante seguro de que invertir el comportamiento no es lo único que hace, sin embargo.

¿Qué hace INPUT_PULLUP? ¿Qué lo hace diferente de INPUT, y cómo decide uno cuál usar?

1 votos

INPUT_PULLUP se agregó con IDE 1.0.1. No importa qué placa de Arduino uses, todas admiten PULLUPs.

35voto

El valor predeterminado es INPUT que configura el pin como un INPUT. Si el pin está totalmente desconectado, leerá aleatoriamente HIGH y LOW. Si lo conectas a +5V o 0V, obviamente leerá HIGH o LOW.

Internamente en el Arduino, el chip Atmega tiene resistencias pullup internas con un valor de alrededor de 20k ohmios. (Ver la documentación de DigitalPins para más detalles) Estas resistencias se pueden conectar opcionalmente internamente mediante INPUT_PULLUP. Esto es funcionalmente (y eléctricamente) equivalente a conectar una resistencia de ~20k ohmios entre el pin y +5V, la única diferencia es que no requiere componentes externos y se puede encender y apagar en el software durante la ejecución del programa.

Entonces, ¿por qué pull-ups y no pull-downs? Probablemente hay varias razones para ello, pero al cablear botones o interruptores o cualquier cosa "normalmente abierto", solo tienes que conectarlos a tierra, no necesitas llevar +5V hasta ellos. Dado que la mayoría de las placas van a estar diseñadas con grandes coberturas de tierra por razones de blindaje de todos modos, la conexión a tierra es prácticamente suficiente.

Algunos ICs más avanzados como los chips ARM tienen tanto pull ups como pull downs, pero la línea AVR de 8 bits solo viene con pull-ups. Solo tienes que recordar que HIGH es "abierto" y LOW es "cerrado".

1 votos

Upvote. FYI, según la documentación las resistencias internas de pull-up son de 20K, no que haga mucha diferencia de 50K. arduino.cc/en/Tutorial/DigitalPins

12voto

g-man Puntos 31

Tenga en cuenta que antes de la versión 1.0.1, podía activar las resistencias de pull-up utilizando digitalWrite(). Y todavía puede hacerlo.

El código:

pinMode(13, INPUT);
digitalWrite(13, HIGH); // Activa la resistencia de pull-up interna
digitalWrite(13, LOW);  // Desactiva la resistencia de pull-up interna

Esta es una distinción importante porque INPUT_PULLUP obviamente activa la resistencia pull-up. Sin embargo, menos evidente, es que a partir de la versión 1.0.1, simplemente llamar a INPUT hace que la resistencia pull-up se apague. (Anteriormente, el estado de la resistencia pull-up permanecía igual).

Para ver cómo opera un pin con y sin resistencias de pull-up, vea los siguientes videos.

Pin flotante en un osciloscopio: http://www.youtube.com/watch?v=dBIBFLYCjMM

Con Pull-Up activado: http://www.youtube.com/watch?v=SAIw7LLVl-U

Video tutorial completo sobre Pull-Ups (tenga en cuenta que hice esto antes de que se agregara INPUT_PULLUP a la biblioteca de Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo

0 votos

Muy inteligente. Gracias por escribir esto. Voto arriba.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X