
Descubre los secretos para conectar múltiples pulsadores a un microcontrolador con recursos limitados. Atrévete a conocer cómo lograr grandes resultados con escasos pines y sorpréndete con soluciones innovadoras…
Conectar pulsadores a un microcontrolador para lograr la concreción de resultados predeterminados es una tarea que en apariencia no debiera contener muchos misterios. Bastará con disponer de un pin del microcontrolador y asunto resuelto pero, ¿Qué sucede cuando la cantidad necesaria de pulsadores supera a los pines disponibles del microcontrolador? Descubre algunos secretos y saca el máximo provecho de los escasos recursos de hardware que a veces dispones en un diseño tratando de hacer magia con uno o dos pines disponibles para más de 5 o 6 pulsadores. Recuerda: las cosas no siempre son tan sencillas ni tan difíciles como desde afuera aparentan.
Cuando comenzamos a transitar el apasionante mundo de la programación de microcontroladores, solemos encontrarnos con una catarata de información con ejemplos que cubren la mayoría de las necesidades. Sin embargo, una de las cosas que a menudo suelen ocurrir es que los encargados de transmitir una enseñanza o un ejemplo práctico, suponen que hay cosas ya sabidas. Es decir, dan por sentado que existen conocimientos básicos que el lector (tú) ya posee y no se detienen a explicar muchos detalles que no siempre se conocen previamente. Un caso puntual es la conexión de pulsadores o botones que se conectan en los puertos de los microcontroladores y se utilizan para controlar distintos eventos. Muchos deben creer que uno nace sabiendo cómo se le pueden sumar infinitos pulsadores a un diseño y no es así.

Una pregunta que suele rondar la cabeza de mucha gente es acerca del modo en que los diseñadores de equipos electrónicos logran conectar (y hacer funcionar) a decenas de pulsadores a través de un único pin. Recolectando información de aquí y de allá, logramos reunir algunos ejemplos que te pueden ser de utilidad para disponer de los mejores recursos según la situación que te toque resolver. Dicho de otro modo: cuando tengas que utilizar botones, pulsadores, interruptores o algún switch, conozcas las formas usuales de conectarlos al microcontrolador.
Sumando de a uno
El método más sencillo y elemental de sumar botones a un diseño es utilizando las entradas (I/O) libres de un microcontrolador, las cuales han sido predefinidas al comienzo del listado del programa como entradas. La forma en que esto se realiza es a través de la instrucción TRIS sea cual fuere el lenguaje de programación que utilicemos. De esta forma, en cualquier momento del programa, podemos utilizar un pin del microcontrolador como entrada o como salida con sólo indicarle el trabajo a realizar mediante la instrucción TRIS. Por ejemplo, si colocamos la instrucción TRISB.5 = 1 estaremos indicando que el pin 0 del puerto B pasa a funcionar como entrada. Por el contrario, un cero a la derecha de la igualdad indicará un funcionamiento como salida del pin utilizado.

En el dibujo superior vemos las dos posibilidades de conectar un botón a una entrada (al azar) de un microcontrolador. La única diferencia importante en los ejemplos mostrados es su implementación en el pin PORTA.4. Cabe destacar que este pin posee en su entrada un Schmitt Trigger que se utiliza habitualmente para contar impulsos externos mediante las propiedades del Timer 0 (T0CKI = Timer 0 Clock Input). Luego, solo debemos interrogar, en el momento oportuno, el estado del pin para tener funcionando nuestro botón en el PIC.

Trabajando con un teclado matricial
Se conoce como teclado matricial al arreglo organizado de teclas que permite utilizar la menor cantidad posible de pines en el microcontrolador, y es habitual en los teclados de teléfonos y calculadoras. Además, se utiliza la estructura filas-columnas para organizar la conexión de los pulsadores, tal como se muestra en el dibujo.

En el ejemplo se puede apreciar una configuración de 9 teclas que ocupa solo seis pines del microcontrolador y se organizan en tres filas y tres columnas. Gracias a las características del puerto B, y utilizando un PIC como el 16F628A, no se requieren resistores externos de polarización ya que el microcontrolador los tiene integrados. Solo bastará con habilitarlos a través del bit 7 del registro OPTION_REG presente en todos los PIC de la línea 16F.
Por supuesto que puedes agregar otra fila y otra columna hasta llegar a un modelo de 16 teclas o, si prefieres, quitar alguna columna o fila y utilizar 6 botones solamente. Menos de 6 teclas supone el uso de cuatro pines, lo que equivaldría a un botón por pin, por lo que esta técnica se emplea cuando se necesitan más de 6 pulsadores y hasta un máximo de 16 si solo se dispone de un puerto para su operación. Si trabajamos con un microcontrolador que tenga 2 puertos libres, el arreglo puede alcanzar hasta 64 teclas (8 filas y 8 columnas).
La forma de estructurar el programa para hacer funcionar un teclado matricial es sencilla, siempre y cuando se cuide el orden funcional. Es decir, la rutina encargada de leer el teclado debe tener una estructura correcta, ágil y optimizada para demorar el menor tiempo posible en detectar si se ha pulsado una tecla, evitando confusiones que hagan interpretar erróneamente la acción del .

La manera habitual de hacer funcionar un teclado es habilitando las columnas o filas según la función: las que actúan como salidas y las restantes como entradas. Por ejemplo, se configuran las columnas como entradas y las filas como salidas utilizando la instrucción TRIS. De acuerdo al circuito propuesto, obtendremos algo como TRISB = %00000111, donde los tres bits menos significativos se configuran como entradas y el resto como salidas. Así, se habilitan secuencialmente las filas mientras se controla si alguna columna registra una pulsación.
En el listado de ejemplo se aprecia el encabezado del programa con las definiciones de variables, la asignación de nombres a cada pin según su función, y de forma destacada, el ajuste de los registros TRIS y OPTION_REG. Luego se inicia el programa, que ejecuta las acciones definidas, y cuando es necesario se invoca la subrutina PULSAR para leer el teclado.

Como se observa en el ejemplo, el barrido de activación se realiza secuencialmente, habilitando una fila tras otra y comprobando si se presiona alguna tecla. En ese caso, el programa salta rápidamente al lazo principal llevando consigo la variable BOTON cargada con el número de la tecla pulsada.
Proton al rescate
Una de las poderosas instrucciones de este lenguaje se llama INKEY y evita los tediosos listados propios de otros compiladores. Simplemente se declara el puerto del teclado con: DECLARE KEYPAD_PORT PORTB. Luego, al incluir la línea BOTON = INKEY, el programa busca automáticamente cualquier tecla pulsada y devuelve su valor.

Como pueden ver, el programa completo se reduce a unas pocas líneas, lo cual es vital para mantener la sencillez del código. En el HELP de Proton encontrarán datos adicionales para potenciar la capacidad operativa de esta importante instrucción.
¿Y cuando 16 teclas son pocas?
Otra forma de organizar un teclado cuando los recursos son escasos es aplicar el principio de funcionamiento usado por la mayoría de los fabricantes de equipos electrónicos de consumo masivo. Con el afán de istrar al límite los recursos de hardware, se utiliza una o varias entradas ADC del PIC sobre las cuales se “apilan” en serie múltiples pulsadores, en cantidades a veces impensadas.

En la imagen superior se observa el ejemplo de un televisor donde se utiliza un solo pin para leer 5 botones. La alimentación de 5 Volts en la parte inferior se conecta a una serie de resistencias (R1901 – R1907) que, junto a R819 respecto a GND, conforman un divisor resistivo variable según la tecla pulsada. La alimentación común a cada tecla provoca que se genere una tensión distinta, la cual es evaluada por el ADC para determinar qué tecla fue accionada.

En este diagrama se muestra que en algunos casos se combinan matrices con circuitos en serie. Esto es frecuente en equipos musicales grandes, donde se priorizan las funciones principales en el teclado matricial y las secundarias en el circuito serie. Una mala calidad en los pulsadores del circuito en serie puede inducir errores en el microprocesador, por ejemplo, si pulsabas PLAY para reproducir un CD se pasaba a la función RADIO.
Si bien la técnica de teclas en serie con divisor resistivo trabajando sobre el ADC del microcontrolador permite incorporar una gran cantidad de botones (imagina que una variable BYTE puede albergar hasta 256 valores distintos para una equivalente cantidad de botones), es crucial vigilar la calidad de los pulsadores, ya que el desarrollo podría fallar en el peor momento. Además, como dice Murphy, no sólo fallará en el momento menos esperado, sino que cuando lo haga, provocará el mayor daño imaginable.
Muy buen articulo pero cabe aclarar para aquellos que quieren empezar a programar microcontroladores que las instrucciones citadas por ejemplo :
"La forma en que esto se realiza es a través de la instrucción TRIS sea cual fuere el lenguaje de programación que utilicemos..." es aplicable a la línea PIC de microchip.
En otros micros (hasta donde yo conozco) se implementan de otras formas y son otras instrucciones.
Vuelvo a repetir: Muy buenos tus articulos Mario
Buen dia Mario:
Me gusto mucho con lo que empezaste este articulo, y es que muchas veces fallamos en cosas pequeñas pero que son importantes y esto de las entradas a los micros es bastante importante.
El ejemplo del teclado matricial me gusto mucho y las instrucciones que reducen la adquisicion de los botones pulsado pues muchisimo mejor y el ultimo ejemplo de la entrada de multiples pulsadores por usa sola entrada esta genial aunque no nos das un programa especifico pero nosotros mismos los haremos, y pues creo que si queremos hacerlo lo deberiamos hacer con valores de resistencias distanciados para evitar confusiones y pensaria que con condensadores para evitar corrientes parasitas.
Mario muchas gracias por este articulo, el del dip meter es un hit para los electronicos (como yo) y no te olvidaste esta semana tampoco de nosotros los adictos a los microcontroladores (como yo), un gran abrazo desde Colombia.
Son los mejores NEOTEO
Hola...yo tengo una dudisima desde hace un poco de tiempo...espero me la puedan contestar...un pulsador de 2 terminales...i es presionado pasa la corriente que ingresa por uno de sus pines al otro ya que son solo 2 pines....pero ocupan mucho los pulsadores de 4 terminales...a estos push... por que pin se ingresa la corriente? a que pin la envia si es pulsado? como funcionan los push de 4 terminales
desde ya gracias
Yo apenas, me estoy recuperando de anterior je je ya que son muy extensos pero con mucha buena información así que hay que repasarlos con detenimiento.
Seria interesante dar ejemplo para descargar, por dar una idea el código compilado y un ejemplo en isis-proteus para que los s nuevos o que desconozca la electrónica, vea lo interesante que es. Claro es una idea ^_^
Respecto a este articulo como siempre 10/10
A estos días le di el link de limpieza ZEN a una amiga la cual le sirvió mucho así que otro agradecimiento =)
Wow, demasiado tecnico para mi... supongo
Debes iniciar sesión para publicar un comentario.