Microcontroladores: Sumando pulsadores – NeoTeo

2023-02-16 16:04:59 By : Mr. Kenny Liang

por Mario 12 septiembre, 2009, 6:49 pm 10 Comments

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 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 uno nace sabiendo como 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á 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.

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:

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.

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).

La 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.

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.

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.

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.

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.

Leer DespuésAgregar a FavoritosReportar

http://www.neoteo.com/Portada/tabid/54/id/17479/pg/0/cp/2/Default.aspx

http://www.neoteo.com/compran-patentes-a-microsoft-para-proteger-a-linux.neo

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

Hola Jorge! Fijate que en un lugar aclara que "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.", con lo que queda claro que se refiere a la línea PIC de microchip…. ?

Hola Ariel No lo tomes como crítica, si no todo lo contrario. Simplemente quiero ayudar dentro de mis posibilidades a quien lee una articulo como este por primera vez y no tiene ni idea de lo que es un PIC u otro microcontrolador. Como bien ha dicho Mario en varias oportunidades, a veces es un poco intimidante cuando se aborda un tema de estos por primera vez. Simplemente quise subrayar este tema para aquellos principiantes que tienen la intención de ingresar a este tema. Saludos Mario y Ariel.

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.

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

Lo más probable es que, aunque veas 4 pines, eléctricamente sólo sean 2, de modo que, por ejemplo, siempre tendrías 1 y 2 unidos y por otro lado el 3 y el 4, y al pulsarlo se cerrarían todos. La otra posibilidad es que sean cuantro pines y dos circuitos, por lo que al pulsarlo, por ejemplo, el pin 1 se cierra con el 2 y el 3 con el 4. Arturo.

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 usuarios 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

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

por Lisandro Pardo 24 julio, 2022, 3:20 pm

por Lisandro Pardo 23 mayo, 2022, 9:44 pm

Una monería Thug life Geeky No me gusta ¡Pero qué c...!

por Lisandro Pardo 11 abril, 2022, 9:51 pm

¡Pero qué c...! Geeky No me gusta Thug life Una monería

por Lisandro Pardo 10 abril, 2022, 3:43 pm

Geeky Una monería Thug life

por Lisandro Pardo 27 marzo, 2022, 4:12 pm

No me gusta Thug life Geeky ¡Pero qué c...! Una monería

por Edgardo Fernandez 18 octubre, 2021, 7:56 pm

Trending Hot Thug life Geeky No me gusta Una monería

por Lisandro Pardo 11 octubre, 2021, 3:10 pm

Trending Hot Una monería Thug life No me gusta ¡Pero qué c...! Geeky

por Lisandro Pardo 12 agosto, 2021, 4:28 pm

Hot Popular Thug life Una monería Geeky ¡Pero qué c...! No me gusta

Hot Thug life Una monería

Hot Thug life Una monería Geeky

Hot Geeky Thug life No me gusta ¡Pero qué c...! Una monería

por Lisandro Pardo 28 abril, 2021, 6:40 pm

Thug life Geeky Una monería

A veces, lo único que importa es el soundtrack…

La dinámica entre el cine y la música es tan compleja que en algunas ocasiones sucede esto: Celebramos el soundtrack, y nos olvidamos de la película (o queremos hacerlo). Otro aspecto llamativo es que no se trata de un fenómeno reciente, y los entusiastas del séptimo arte probablemente puedan compartir ejemplos que se remontan varias […] More

por Lisandro Pardo 9 febrero, 2023, 7:43 pm

¡Pero qué c...! Geeky Una monería

… sí, alguien pensó en esto

Más de nueve millones de kilómetros de superficie. Una de las regiones más hostiles del planeta Tierra, y una barrera contundente para las relaciones económicas entre buena parte de África y los países del Mediterráneo. El desierto del Sahara es grande, cálido, y no coopera. La evidencia sugiere que el Sahara se mantiene en un […] More

por Lisandro Pardo 12 febrero, 2023, 5:14 pm

No apta para principiantes, pero más útil de lo que parece

Historia larga en versión corta: Con cada edición mayor de Windows surge la necesidad de aplicar nuevas optimizaciones. Ajustar el ahorro de energía, reducir el consumo de memoria, eliminar bloatware, desactivar servicios absurdos y bloquear la telemetría puede tomar mucho tiempo sin las herramientas correctas, pero el pack XToolBox busca concentrarlas en un solo lugar. […] More

por Lisandro Pardo 14 febrero, 2023, 7:17 pm

El Doom puede ser ejecutado de diferentes formas y bajo entornos increíbles, pero no es el único FPS que se transforma en plastilina cuando llega a las manos de los jugadores. El Wolfenstein 3D es aún más fácil de ejecutar, y existen mods que mejoran notablemente la experiencia original… o la transforman por completo. Uno […] More

por Lisandro Pardo 14 febrero, 2023, 5:13 pm

Trending Thug life Una monería Geeky

Vaya aquí la cuota de imágenes seleccionadas de la semana del Tiradero Visual, con todo lo que te debería gustar y mucho más, todo en un conveniente lugar. Veintinueve imágenes elegidas de entre cientos, sino miles, de otras que no llegaron a dar en la talla. Para no dejarte con las ganas al final una […] More

A veces uno necesita una pequeña pausa de todo lo que nos aqueja. Pequeña, siendo la palabra clave. Algo que nos quite la mente de los problemas, pero no tanto como para enajenarnos por completo. Para eso existe el Vertedero Animado de la Semana, la pausa justa. Como siempre, acompañado por un temazo, generalmente de […] More

Nombre de usuario o correo electrónico

¿No tienes cuenta? Regístrate

Escribe la información de tu cuenta y te enviaremos un enlace para reiniciar tu contraseña.

Nombre de usuario o correo electrónico

To use social login you have to agree with the storage and handling of your data by this website.

Here you'll find all collections you've created before.