2016/05/12

Usar un teclado matricial mediante un puerto analógico.

Me recuerdo cuando estaba en la universidad un compañero me enseñaba su proyecto y los trucos que había realizado para que todas sus ideas las pudieras realizar su micro PIC16F877A, entre una de ellas era la implementación de una pantalla LCD y un teclado matricial por el puerto B para tener mas pin disponibles, que venia luego de descartar de usar el teclado por un puerto analógico, el cual me llamo mucho la atención.

Teclado 3x4 con divisores de voltajes.
Figura-01


Continua explicándome que la teoría es muy simple, el teclado matricial son botones que cierra un circuito y si usamos resistencias y el concepto de divisor de tensión, tendríamos diferente niveles de voltaje al conmutar las diferentes teclas (figura-02).

Teclado 4x4.
Figura-02


Mediante el convertidor analógico digital (ADC) obtenemos un valor para cada nivel de tensión y mediante programación se le asigna una tecla.

El primer desafió me cuenta, es seleccionar la combinación de las resistencias para tener valores de tensión bien distribuidos, no muy cercanos y que cumplan junto a la resistencia Pull-Down, que no halla caídas de tensión al presionar una tecla y al no estar presionando ninguna, mida una tensión de 0 V (VSS).

Las caídas de tensión ocasionan valores distintos del ADC a los asignados a cada carácter de cada tecla, así que:
  • 1. La selección de los valores de las resistencias es clave.
  • 2. Una fuente adecuada que cumpla con la exigencia del proyecto.
  • 3. Y claro conocer el uso del ADC del PIC.

Me sigue explicando que si se cumple con lo anterior, no es necesario programar un rango de valores del ADC para asignarle a cada tecla. Pero que tenia otro problema con valores repetidos al pulsar una tecla, aunque se pueden arreglar con un retardo, ese retardo le daba problema con otra parte del código de su proyecto y por eso lo descarto.


Ejercicio N° 1.

Aprovechando que estaba repasando el uso del ADC y el teclado matricial quise poner en práctica esta idea, mediante la simulación con ISIS Proteus y compilando con PIC-C CCS, y como siempre me decanto por un PIC18F452 trabajando a 4 Mhz.

Diagrama ISIS Proteus.
Figura-03.


En este ejercicio vemos el valor del ADC configurado en 10 Bits y su correspondiente valor de voltaje al presionar una tecla en una Terminal Virtual y así tener los valores correspondientes a nuestro arreglo de resistencias.

Simulación en ISIS Proteus.
Figura-04.


Dentro del archivo del ejemplo como siempre esta el código fuente, el archivo de la simulación y agrego una hoja de calculo el cual podemos variar las resistencias y obtener su correspondiente valor ADC y de voltaje aproximado, para poder seleccionar valores de resistencia comerciales si se quiere implementar.

Hoja de cálculo.
Figura-05.


Descargar [MG] [MF].


Ejercicio N°2.

Aquí trate de imitar el funcionamiento del Driver kbd.c y obtener un valor del teclado al invocar la función kbd_getc(), a partir de aquí ya podemos practicar y usar los ejercicios de Programando PIC con CCS ejercicio 4 (Teclado).

Ejercicio 2.
Figura-06.


Descargar [MG] [MF].


Para finalizar.

Son ejemplos para aprender los conceptos básicos y en la simulación se obvian algunas conexiones que un ejercicio real se debe tomar en cuenta, así que agrego el datasheet.
  • PIC18F452 [MF] [MG].

Como también no se toca la configuración de los importante FUSES, para esos los invito a revisar el archivo main.h y cualquier corrección o duda usar los comentarios o los enlaces de contacto del blog.


También te puede interesar:


5 22XD: Usar un teclado matricial mediante un puerto analógico. Me recuerdo cuando estaba en la universidad un compañero me enseñaba su proyecto y los trucos que había realizado para que todas sus ideas l...
< >