Objetivo: Leer un teclado matricial de 4 x 4 teclas mediante un único pin del PIC.
Conceptos involucrados: Suma de resistencias en serie, divisor de tensión y conversión Analógico-Digital del PIC.
Necesitamos: Un teclado matricial de 4 x 4 teclas, 9 resistencias y un PIC.
Antecedentes: En el documento "Hardware Techniques for PICmicro Microcontrollers"
AN234 de Microchip se describe someramente lo que vamos a intenta realizar. De ahí he sacado la idea y a continuación os describiré lo que he desarrollado a partir de ella.
Desarrollo: Como todos sabéis, y si no lo sabéis este es un buen momento para aprenderlo, un teclado matricial 4 x 4 es un artilugio compuesto por 4 x 4 teclas con 4 + 4 lineas que conectan entre si las teclas, una linea por cada fila de teclas mas una linea por cada columna de teclas. Al ser pulsada una cualquiera de ellas une entre sí una de las lineas, la de su columna, con otra de ellas, la de su fila. Así al pulsar una tecla quedan unidas solo dos de las ocho que tiene.
Tradicionalmente se ha conectado un teclado de estos a un PIC usando 8 pines de éste, 4 para las filas y 4 para las columnas y se leían poniendo en alto las filas, o las columnas, y leyendo las columnas, o las filas, para detectar qué tecla se había pulsado. Esta técnica es muy fácil de implementar pero tiene el costo de usar muchos pines del PIC.
Lo que aquí vamos a desarrollar es la idea de poder hacer esto mismo pero haciendo uso de un solo pin del PIC, pero que tenga la especial función de Conversor Analógico a Digital. Para ello tenemos que conseguir que al pulsar cada una de las teclas obtengamos un voltaje distinto en una única línea. Leyendo este voltaje con el Conversor AD del PIC podemos llegar a saber qué tecla es la que se ha pulsado.
Una imagen vale mas que mil palabras:
Como veis en ella cada círculo en la rejilla central del teclado del dibujo representa una de las teclas, que al pulsar une una de las resistencias de R1 a R4 conectadas a VDD con otra de R5 a R8 conectadas al PIC. Así si pulsamos en la tecla situada en la esquina superior izquierda tendremos que VDD le llega al PIC tras atravesar R1+R5. Si por el contrario pulsamos la tecla inferior derecha la corriente nos llegará a través de la unión entre R4+R8. Siempre que pulsemos una tecla cualquiera obtendremos un voltaje de caída entre la suma de dos resistencias R
columna+R
filaOtro detalle a tener en cuenta es que si no pulsamos ninguna tecla nuestro pin del PIC estaría conectado a nada, la linea que une el pic con las resistencias R5 a R8 y tras ella el vacío. Esto podría, y sería con total seguridad, una verdadera antena que recogería todo lo que pasase cerca de allí, dándonos todo tipo de lecturas falsas mientras no pulsásemos ninguna tecla. Para evitar ese efecto colocamos R9 que mantendrá el pin del conversor conectado a GND mientras nos pulsemos nada sobre el teclado.
Pero esta configuración es lo que conocemos como un
Divisor de Tensión en la que tenemos una resistencia conectada a VDD y otra a GND y nosotros tomamos el valor del voltaje en la unión que hay entre ellas.
Este divisor de tensión en el que tenemos un V
in o voltaje de entrada y un V
out o voltaje de salida tras él, que es perfectamente calculable mediante la fórmula que aparece a la derecha.
Como vemos en esta configuración lo que llamamos aquí R
top es lo que en nuestro teclado hemos llamado R
columna+R
fila o sea la suma de las dos resistencias correspondientes al pulsar una tecla en él. Y R
bottom es nuestra R9 del teclado.
La gran falta del documento de Microchip es que no nos aporta ni valores de R1 a R9, ni comportamiento aproximado de cómo podríamos elegir dichos valores. Pero con lo que hemos visto hasta aquí estamos en condiciones de poder calcular con bastante precisión el comportamiento de nuestro circuito, sabiendo que Rtop es Rc+Rf y que VDD es 5V podemos concluir que Vout = R9 / R9+Rc+Rf * 5V y así tendremos un valor de Vout para cada pareja de resistencias Rc+Rf.
Con esta información me he construido una tabla Excel en la que he puesto primero la tabla de resistencias de columnas y filas y las distintas sumas de cada una de ellas. Despues otra con los distintos voltajes que se generan en el divisor de tensión con cada una de las parejas anteriores. Y por último otra tabla en la que hago corresponder cada uno de estos voltajes con el valor de la conversión AD del PIC con precisión de 10 bits (1024 -> 5V lo que Vout es a X)
Jugando con las combinaciones entre valores de unas y otras resistencias he llegado a obtener uno valores que veo correctos.
Los resultados:
Nota1Como podéis ver tenemos abajo los valores que vamos a obtener en la conversión AD para cada tecla pulsada. Son valores razonablemente separados unos de otros y que nos pueden permitir leer nuestro teclado con un único pin del PIC (con AD) que es lo que queríamos hacer.
Conclusión: R1=0, R2=470R, R3=1K, R4=2K2, R5=220R, R6=330R, R7=470R, R8=560R y R9=1K2 con VDD a 5V
Nota2. Y con esto completamos el documento de Microchip poniéndole valores a lo propuesto por los amables señores de nuestro proveedor favorito.
Ea, mañana más.
Nota1 Teclado_Resistivo_CAD.xlsNota2 Todas las resistencias son
Comerciales