En los nuevos Arduino, se puede establecer pinMode a uno de tres estados: OUTPUT
, INPUT
, y INPUT_PULLUP
.
Esta página dice:
El chip Atmega del Arduino tiene resistencias 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.
Sin embargo, estoy bastante seguro de que invertir el comportamiento no es lo único que hace.
¿Qué INPUT_PULLUP
hacer? ¿Qué lo hace diferente INPUT
y cómo se decide cuál usar?
Respuestas:
El valor predeterminado es el
INPUT
que configura el pin como anINPUT
. Si el pin está totalmente desconectado, se leerá al azarHIGH
yLOW
. Si lo vincula a + 5V o 0V, obviamente leeráHIGH
oLOW
.Interno al Arduino hay resistencias pullup con un valor de alrededor de 50k-ohm. Estas resistencias pueden conectarse opcionalmente internamente usando
INPUT_PULLUP
. Esto es funcionalmente (y eléctricamente) equivalente a conectar una resistencia de 50k-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-down? Probablemente hay varias razones para ello, pero cuando se conectan los botones o interruptores o cualquier cosa "normalmente abierta", solo tiene que atarlos a tierra, no necesita ejecutar + 5V hacia ellos. Dado que la mayoría de las tablas se diseñarán con grandes vertidos de tierra por razones de blindaje de todos modos, atarlas al suelo es prácticamente una razón.
Algunos circuitos integrados más destacados, como los chips ARM, tienen pull-ups y pull-ups, pero la línea AVR de 8 bits solo viene con pull-ups. Solo tiene que recordar que
HIGH
está "abierto" yLOW
está "cerrado".fuente
Tenga en cuenta que antes de 1.0.1, podría activar pullups usando
digitalWrite()
. Y aún puedes.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 llamarINPUT
obliga a que se apague el pull-up. (Anteriormente, el estado del pull-up se mantuvo igual).Para ver cómo funciona un pin con y sin pull-ups, mira 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 INPUT_PULLUP se agregara a la biblioteca Arduino): http://www.youtube.com/watch?&v=jJnD6LdGmUo
fuente