¿Cuál ' es la diferencia entre INPUT e INPUT_PULLUP?

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

Esta página dice:

El chip Atmega en el Arduino tiene resistencias pull-up internas (resistencias que se conectan a la energía internamente) a las que puede acceder. Si prefiere usar estos en lugar de resistencias desplegables externas, puede usar el argumento INPUT_PULLUP en pinMode (). Esto efectivamente invierte 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 Sin embargo, no es lo único que hace.

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

Comentarios

  • INPUT_PULLUP se agregó con IDE 1.0.1. Es irrelevante qué placa Arduino utilice, todas admiten PULLUP.

Respuesta

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 ata a + 5V o 0V, obviamente leerá HIGH o LOW.

En el interior del Arduino, el chip Atmega tiene resistencias pullup internas con un valor de alrededor de 20k ohmios. (Consulte la documentación de DigitalPins para obtener más detalles). Estas resistencias se pueden conectar opcionalmente internamente mediante INPUT_PULLUP. Esto es funcional (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 puede encenderlo y apagarlo en el software durante la ejecución de su programa.

Entonces, ¿por qué pull-ups y no pull-downs? Es probable que existan varias razones para ello, pero cuando se conectan botones o interruptores o cualquier elemento «normalmente abierto», solo tiene que conectarlos a tierra, no es necesario que los conecte a + 5V. Dado que la mayoría de las placas serán diseñado con grandes vertidos de tierra por razones de blindaje de todos modos, atar a tierra es prácticamente razones.

Algunos circuitos integrados más destacados como los chips ARM tienen pull ups y pull downs, pero la línea AVR de 8 bits solo viene con pull -ups. Solo tienes que recordar que HIGH está «abierto» y LOW está «cerrado».

Comentarios

Respuesta

Tenga en cuenta que el anterior a 1.0.1, puede activar pullups usando digitalWrite(). Y aún puede hacerlo.

El código:

Esta es una distinción importante porque INPUT_PULLUP obviamente enciende la resistencia pull-up. Sin embargo, menos obvio es que a partir de 1.0.1, simplemente llamar a INPUT fuerza a que se desactive el pull-up. (Anteriormente, el estado del pull-up seguía siendo el mismo).

Para ver cómo funciona un pin con y sin pull-ups, vea los siguientes videos.

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

Con Pull-Up habilitado: 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

Comentarios

  • Muy inteligente. Gracias por escribir esto. Votar a favor.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *