Saltar al contenido

EPS32 – Problemas con INPUT_PULLUP

/

Introducción
Estoy utilizando el Esp32 para hacer un desarrollo de un teclado matricial.

Como sabrás, para ello es necesario que las entradas se puedan poner a PullUp.

El porque se tienen que poner a PullUp lo explicaré en otro artículo, pero básicamente es porque una entrada de un microcontrolador no puede estar en un estado indefinido, es decir, no puede “estar al aire”.
Porqué estar al aire significa que, puede con un ruido eléctrico ambiental o del mismo circuito, puede estar en un estado “1” o en un estado “0” y oscilar entre esos valores, lo cual no es útil a los fines prácticos.

Entonces lo correcto es que, cualquier entrada tiene que estar a un estado totalmente definido que puede ser a CERO (“0”) con lo cual ahí, usaríamos una resistencia PullDown o puede ser a UNO (“1”) con lo cual ahí estaríamos usando una resistencia PullUp.

Para usar el PullUp lo que se hace es utilizar una resistencia entre la entrada mencionada o en cuestión y la alimentación del microcontrolador.

Es decir la resistencia para PullUp tiene que estar conectada al mismo voltaje de alimentación del microcontrolador.

En mi caso utilicé el IDE de Arduino para programar el ESP32, utilizando la instrucción INPUT_PULLUP, o mejor dicho la condición de entrada del pin , es configurada con INPUT_PULLUP. Esto, lo que hace, es conectar internamente a nivel de Hardware (solo aplica en los microcontroladores que soportan esta características en los pines de entrada) una resistencia al voltaje de alimentación del micro. En este caso para el ESP32 es de 3.3 Volts.

Luego de haber compilado el programa y haberlo cargado en el ESP32, me encontré con la sorpresa de que cuando acercaba mi mano al cableado que iba del circuito, al teclado matricial, entraba mucho ruido y generaba caracteres como si estuviese apretando alguna tecla… lo cual no era cierto.

Con lo cual deduje que las resistencias del INPUT_PULLUP internas del microcontrolador ESP32 son demasiado altas.
Es casi como no tener puesta ninguna resistencia a PULLUP.

La verdad sigo sorprendido. !!! porque el fabricante tiene este Bug podríamos decir.

NOTA: Esto me está sucediendo con el módulo ESP32_DevKitc_V4 , que contiene al módulo Espressif ESP32-WROOM-32D.

Buscando en el manual del ESP32, en el DataSheet , me di cuenta que los valores de resistencia de PullUP son de 45 k ohms. Lo cual se me hace muy alta. Y más aún, dada mi reciente experiencia.


Mirando las características eléctricas del microcontrolador, me dí cuenta que podía bajar la resistencia bastante sin superar los límites permitidos de corriente del transistor de entrada.

En mi caso la solución para poder leer correctamente este teclado matricial fue poner una resistencia de 1800 Ohms en cada entrada del ESP32.

Espero que este TIP te haya sido de utilidad.