Microcontroladores: Sumando Pulsadores  

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 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 dentro de esa mayoría 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 hay 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 conecten en los puertos de los microcontroladores y se utilicen para controlar distintos eventos. Muchos deben creer que tú naciste sabiendo como se le pueden sumar infinitos pulsadores a un diseño. 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.


Una de las interfaces de entrada a un microcontrolador, son los pulsadores.
Monitor Cardíaco


 

Recolectando información de aquí y de allá mientras caminamos la web, logramos reunir algunos ejemplos que creemos 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 y que hayan 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 y en cualquier momento del programa, podemos utilizar un pin del microcontrolador como entrada o como salida con sólo indicarle el trabajo a realizar con 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.

Mi primer receptor: TDA7000
ON-OFF de un toque
Capacímetro Digital
Construye tus propios LCD I2C
Montajes    
Dip - Meter
Ejemplos de conexiones de un pulsador en un PIC
 
Servomotores
Amperímetro 0 - 5Amper


 


En el dibujo superior vemos las dos posibilidades que tenemos de conectar un botón a una entrada (al azar) de un microcontrolador. La única diferencia importante que encontramos 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 es utilizado habitualmente para contar impulsos externos utilizando las propiedades del Timer 0 (T0CKI = Timer 0 ClocK Input). Luego, sólo debemos interrogar, en el momento oportuno, por el estado del pin y ya tendremos funcionando nuestro botón en el PIC. El ejemplo en nuestro clásico Proton BASIC será de la siguiente forma:

 


Ejemplo del listado para utilizar un solo boton
 


Trabajando con un teclado matricial

Se conoce como teclado matricial al arreglo o disposición organizada de teclas para lograr un conjunto que utilice la menor cantidad posible de pines del microcontrolador, pudiendo sumar la mayor cantidad de teclas. Esta disposición es la habitual en los teclados de teléfonos y calculadoras. En la mayoría de los casos la organización de la conexión de los pulsadores se realiza mediante la estructura filas-columnas de la manera que vemos en el dibujo.

 

 


Microcontroladores - PIC
No te pierdas este nuevo espacio donde hablamos de ... más Electrónica.


Matriz de 9 teclas
 
   



El primer Tutorial de TV en castellano de la Web.
Para aprender a reparar y todo lo que quieras saber de TV.

En el ejemplo se puede apreciar una configuración de 9 teclas que ocupa solo seis pines del microcontrolador y que se organizan en tres filas y tres columnas. Gracias a las características del puerto B, en esta disposición de teclas y utilizando un PIC como el 16F628A, no necesitamos resistores externos de polarización ya que el microcontrolador los posee integrados en el mismo dispositivo. Solo bastará con habilitarlos a través del bit 7 del registro OPTION_REG existente en todos los PIC de la línea 16F. Si deseas utilizar los resistores internos del puerto B para ésta u otras aplicaciones, recuerda siempre configurar correctamente el registro mencionado.

Por supuesto que puedes agregar otra fila y otra columna hasta llegar a un modelo de 16 teclas o si prefieres también puedes quitar alguna columna o fila y utilizar 6 botones solamente. Menos de 6 teclas ya supone el uso de cuatro pines y eso equivaldría a un botón por pin, por lo que esta técnica se debe utilizar cuando necesitamos más de 6 pulsadores y hasta un máximo de 16 cuando solo tengamos posibilidad de utilizar un solo puerto para su operación. Si en cambio trabajamos con otro microcontrolador que posea 2 puertos libres, el arreglo de teclas puede alcanzar a 64 unidades (8 filas, 8 columnas).

La forma de estructurar el programa para hacer funcionar un teclado matricial es sencilla mientras se cuiden ciertos aspectos de orden funcional. Es decir, que la rutina que se encarga de leer el teclado posea una estructura correcta, ágil y optimizada para demorar el menor tiempo posible investigando si se ha pulsado una tecla o no y que además no cometa errores de confusión (que pulsemos un botón y el programa interprete que actuamos sobre otro).
 


  
Más Artículos
  Contador  LED
 
Monitor Cardíaco
 
Robot Siguelíneas
 
Servomotores
 
Dip - Meter
 
Láser
 
EEPROM 24CXX


 


Encabezado del programa que escanea un teclado matricial


Lo manera habitual de hacer funcionar un teclado es habilitando las columnas o filas como salidas y las no definidas de esta forma, como entradas. Por ejemplo, las columnas las configuraremos como entradas y las filas como salidas. Esto se realiza como dijimos anteriormente con la instrucción TRIS. De acuerdo al circuito propuesto nos quedará TRISB = %00000111 donde los tres bits menos significativos se colocan en uno para configurar esos pines como entradas y al resto como salidas. De esta forma comenzamos a habilitar en forma secuencial las filas de a una mientras se controla si algún botón se oprime “leyendo” cada una de las columnas. Realizando de forma rápida el barrido de las habilitaciones de las filas y la observación de los sucesos en las columnas, podremos determinar cuál tecla se pulsa en el momento en que el teclado se habilita para su funcionamiento.

En el listado de ejemplo podemos ver el encabezado del programa con las definiciones de las variables, los nombres que asignamos a cada pin del puerto según su función, y como dato destacado, el ajuste de los registros TRIS y OPTION_REG. Luego se inicia el programa que realizará el trabajo y las acciones que hayamos decidido para él y en el momento que sea necesario saldremos a leer el teclado con la subrutina PULSAR.




Rutina que se encarga de leer la matriz


Como vemos en el ejemplo, el barrido de activación se realiza en forma secuencial habilitando una fila tras la otra y atendiendo si se pulsa 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 instrucciones poderosas que posee este lenguaje de programación se llama INKEY y existe para evitarnos los tediosos y engorrosos listados que otros compiladores se empeñan en que utilicemos y que a veces solo logran hacernos confundir (y casi siempre lo logran) entre tantas filas y columnas al programar la rutina de un teclado matricial. Solo debemos indicarle al programa cuál será el puerto dedicado al teclado mediante la declaración: DECLARE KEYPAD_PORT PORTB. Luego, con sólo incluir la línea BOTON = INKEY, el programa realizará automáticamente la búsqueda de cualquier tecla pulsada devolviéndonos su valor con tan sólo utilizar una línea de comando.




La instrucción INKEY nos ahorra muchas líneas de programa

sencilla matriz de LEDs


Como pueden ver, el programa completo se reduce a unas pocas líneas y esto cobra vital importancia para aumentar la sencillez del programa. En el HELP de Proton encontrarán datos adicionales para aumentar la capacidad operativa de esta instrucción tan importante.

¿Y cuando 16 teclas son pocas?
Otra de las maneras de organizar un teclado cuando los recursos son escasos es aplicar el principio de funcionamiento que utilizan la mayoría de los fabricantes de equipos electrónicos de consumo masivo. Con el afán de administrar los recursos de hardware al límite, se utiliza una o varias entradas ADC del PIC y sobre ellas se “apilan” en serie una cascada de pulsadores en una cantidad a veces impensada.





Teclado clásico de un TV


En la imagen superior tenemos el ejemplo de un TV donde se utiliza un solo pin para leer 5 botones. Como podemos ver, la alimentación de 5Volts en el extremo inferior se conecta a la serie de resistencias R1901 – R1907 para llegar al pin 12 del microprocesador (KEY–IN) donde tenemos a R819 respecto a GND que nos completará una configuración de divisor resistivo variable según la tecla pulsada. La alimentación al ser común a cada tecla provocará la llegada de una tensión diferente ante la pulsación de una u otra tecla. El ADC se encargará de determinar el nivel de esta tensión y determinará en consecuencia cuál tecla fue pulsada.



Combinación de un teclado matricial y uno serie en un mismo equipo


En este diagrama vemos que en otros casos se utilizan la combinación de matrices con circuitos series como el anterior. Esto es común en los grandes equipos musicales y fue una técnica híbrida muy utilizada priorizando las funciones principales al teclado de matriz y las secundarias o de segundo orden y jerarquía al circuito serie. El motivo se asentaba en la confiabilidad de los botones “soft-touch” empleados en la fabricación de los equipos. Una calidad pobre de pulsadores en una configuración serie provocaba errores de interpretación al microprocesador que terminaba ejecutando una instrucción que no era la deseada por el usuario. Por ejemplo, si pulsabas PLAY para reproducir un CD se pasaba a la función RADIO o se cambiaba la configuración del ecualizador de audio.

Si bien la técnica de teclas en serie con divisor resistivo trabajando sobre el ADC del microcontrolador nos brinda la posibilidad de colocar en nuestros diseños una enorme cantidad de teclas (imagina que una variable BYTE puede albergar hasta 256 valores distintos para una equivalente cantidad de botones), debemos estar muy atentos a la calidad de los pulsadores que utilizaremos ya que nuestro desarrollo puede fallar en el momento menos esperado. 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. Por lo tanto, el consejo es utilizar pulsadores de excelente calidad cuando decidamos este tipo de desarrollo para evitar futuros dolores de cabeza.
 

Importante: Si lo que encuentras aquí te resulta útil,  ayúdanos a mantener este sitio. Cualquier donación es bienvenida. Tu apoyo nos permitirá acceder a nuevos materiales y a montajes más interesantes y útiles. Gracias por ayudarnos a hacer Servisystem cada día mejor. Tu ayuda será muy importante para nosotros. Gracias.

 

 

     
  Indice de Montajes