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