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

21

En Arduinos más nuevos, uno puede establecer pinMode en uno de los 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 a la alimentación interna) a las que puede acceder. Si prefiere usar estos en lugar de resistencias desplegables externas, puede usar el argumento INPUT_PULLUP en pinMode (). Esto invierte efectivamente el comportamiento, donde ALTO significa que el sensor está apagado, y BAJO significa que el sensor está encendido.

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

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

    
pregunta Manishearth

2 respuestas

23

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

Las resistencias pullup internas con un valor de alrededor de 50 k-ohm son internas al Arduino. Estas resistencias pueden conectarse opcionalmente internamente usando INPUT_PULLUP . Esto es funcional (y eléctricamente) equivalente a la conexión de una resistencia de 50 k-ohmios entre el pin y + 5V, la única diferencia es que no requiere componentes externos y puede activarlo y desactivarlo en el software durante la ejecución de su programa.

Entonces, ¿por qué desplegar y no desplegar? Es probable que existan varias razones para ello, pero cuando se cablean botones o interruptores o cualquier cosa "normalmente abierta", solo tiene que atarlos a tierra, no necesita ejecutar + 5V a ellos. Dado que la mayoría de las tablas se diseñarán con grandes vertidos en el suelo por razones de blindaje, de todos modos, la conexión a tierra es prácticamente una razón.

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

    
respondido por el user178
8

Tenga en cuenta que antes de la versión 1.0.1, podría activar las funciones de recuperación utilizando digitalWrite() . Y todavía puedes.

El código:

pinMode(13, INPUT);
digitalWrite(13, HIGH); // Turns internal pull-up on
digitalWrite(13, LOW);  // Turns internal pull-up off

Esta es una distinción importante porque INPUT_PULLUP obviamente enciende la resistencia de pull-up. Sin embargo, menos obvio es que a partir de la versión 1.0.1, el simple hecho de llamar a INPUT obliga a desactivar el pull-up. (Anteriormente, el estado del pull-up se mantuvo igual).

Para ver cómo funciona un pin con y sin dominadas, mire los siguientes videos.

Pin flotante en un osciloscopio: enlace

Con Pull-Up habilitado: enlace

Video tutorial completo sobre Pull-Ups (tenga en cuenta que antes de agregar INPUT_PULLUP a la biblioteca de Arduino): enlace

    
respondido por el baldengineer

Lea otras preguntas en las etiquetas