Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Vamos a explicar como conectar un teclado matricial tipo membrana a un microcontrolador PIC mediante
un sencillo ejemplo. El mtodo que proponemos permite conectar a nuestro microcontrolador 16 teclas usando
solamente 8 pines. El cdigo debera ser vlido para cualquier microcontrolador, incluso de otras marcas, aunque
siempre habr que revisarlo y posiblemente realizar algunas adaptaciones si se migra a otra plataforma, sin
embargo, el algoritmo permanece igual con cualquier microcontrolador.
El ejemplo se realiz para un PIC16F88, aunque como ya hemos mencionado, es compatible bsicamente con
cualquier microcontrolador PIC. Debido a que el programa utiliza todos los bits del puerto B en nuestro
microcontrolador, pensamos que tal vez sea buena idea utilizar un PIC con buena cantidad de pines como un
PIC16F877 o un PIC18F4550, por mencionar un par de ejemplos de micros populares. Para este ejemplo,
utilizamos XC8 y MPLAB X como entorno de desarrollo.
En nuestra portada mostramos el equipo que hemos utilizado para probar el teclado matricial, incluido el
PIC16F88 en una tarjeta entrenadora y el PICKit 3 como programador/depurador.
El principio de funcionamiento es sencillo y es similar a lo que haramos para multiplexar leds o dipslays de 7
segmentos. El programa configura el puerto B del PIC de la siguiente forma: RB4 a RB7 funcionan como salidas
y la otra mitad (RB0-RB3) como entradas. Las filas (horizontal) del teclado matricial se conectan a los bits ms
significativos que funcionan como salidas, mientras que las columnas (vertical) se conectan a los bits menos
significativos del puerto que funcionan como entradas con resistencias pull-down. Cualquier tecla que se
oprima en una columna causar que uno de los bits menos significativos del puerto (RB0 RB3) cambie de
un estado lgico bajo a un estado alto.
La siguiente imgen muestra las conexiones del teclado al puerto B del microcontrolador. La imagen muestra el
teclado en reposo (sin teclas oprimidas).
Que pasa cuando se oprime una tecla en un teclado matricial? la corriente puede fluir a travs del switch y
el voltaje de los pines conectados a las filas del teclado (5 V o nivel alto) aparece ahora tambin en alguno de los
pines RB0 a RB3 segn la columna en la que se encuentra la tecla oprimida. La siguiente imagen ilustra lo que
sucede al oprimir una tecla: al oprimir el botn 6 provocamos un cambio en el PIN RB2 que ahora recibe un 1 o
estado alto. Sabemos entonces que se ha pulsado un botn en la segunda columna y se muestra como un nivel
lgico alto aparece en los bits menos significativos del puerto B, especificamente en RB2.
De esta manera el microcontrolador sabe que se ha oprimido una tecla al detectar un cambio de nivel en
los bits menos significativos. Hasta el momento, se sabe que se ha oprimido una tecla en alguna columna
(dependiendo del bit activo RB3 a RB0), sin embargo, no sabemos en cual fila. Para resolver en que fila se oprimi
una tecla, hay que realizar un proceso de escaneo del teclado . En este proceso, colocaremos en secuencia un 1
lgico (estado alto) en los 4 bits ms significativos del puerto y leeremos el estado de los 4 bits menos
significativos. Sigamos con el ejemplo en el que se ha oprimido la tecla 6 pero ahora vindolo grficamente en una
animacin:
El microcontrolador escanea en forma sucesiva los pines de salida, mientras lee las entradas en la parte baja del
puerto, de manera que puede detectar que teclas estn oprimidas en cada fila. Ahora solo falta escribir nuestro
codigo en C que implemente los procedimientos mencionados anteriormente y nos devuelva un valor de la tecla
oprimida, por ejemplo, mediante un nmero binario.
El programa es bastante sencillo e implementa todos los procesos que describimos en la teora vista
anteriormente. El cdigo se ha mantenido simple intencionalmente para que se pueda apreciar el funcionamiento
de la manera ms obvia posible. La funcin keypad_read() es la encargada de realizar la mayor parte de las tareas
para determinar que tecla ha sido pulsada. El valor que retorna es una palabra de 16 bits en la cual, cada uno de
los bits representa una tecla, en donde un bit en estado alto representa una tecla oprimida. Como la funcin no
retorna como tal la tecla pulsada, sino una cadena de bits que representan las teclas, es posible detectar cuando
se presiona ms de una tecla de forma simultanea. El cdigo de esta funcin es el siguiente:
/**
* Procesa las entradas del teclado matricial y determina la tecla que esta
* siendo oprimida. Retorna una palabra binaria de 16 bits en la cual los bits
* que se encuentran en estado alto representan teclas oprimidas.
*
* Esta funcin esta diseada para poder detectar cuando se oprimen varias
* teclas sin embargo, debido a limitantes de la forma de conexin del teclado
* matricial, no se deben esperar resultados correctos al oprimir varias teclas
*
* @return Retorna una palabra de 16 bits, cada bit representa una tecla.
*/
uint16_t keypad_read()
{
unsigned char count = 0;
unsigned char bitmask = 0x10;
// Valor de retorno de la funcion keypad_read() entero de 16 bits
uint16_t keys =0;
Detalles de la implementacin
En nuestra implementacin del hardware, todos los pines tienen conectada una resistencia pull-down , por
lo que se mantienen en estado bajo (0) cuandoel teclado esta en reposo. Cuando se presiona un botn, el estado
del pin cambia a estado alto (1). Esto puede hacerse de manera inversa, utilizando las resistencias pull-up
incluidas internamente en el puerto B de muchos PIC que estn diseadas para este tipo de aplicaciones. En
nuestro caso, la tarjeta que utilizamos tiene resistencias pull-down previamente conectadas en los pines,
por lo que decidimos aprovecharlas.
Es un buen ejercicio invertir la lgica del cdigo para permitir que este funcione con resistencias pull-up, por lo
que te recomendamos que realices al menos este ejercicio.
Conclusin
Con la informacin que tenemos hasta este momento, ya podemos darnos una idea de como funciona un
teclado matricial y podemos comenzar a incluirlo en nuestros proyectos. Nos queda de tarea estudiar ms a
fondo el funcionamiento del puerto B de los PIC, que incluye varias funciones opcionales como resistencias pull-up
internas e interrupcin por cambio de estado en los pines, ideales para facilitar la conexin de teclados
matriciales.
9
Comments
Recomendar 4
Share
Login
nete a la discusin...
hace un
Erik Jcm ao
Hola, muy buen post, solo una duda, cual es el estado de trisb y portb antes de iniciar el bucle do-while
cuando se ejecuta por primera vez?
Reply Share
Alfredo > Alfredo hace 2 aos
Saludos!
Reply Share
renzo hace 3 aos
Me encanto tu post lo utilizo de referencia para mis alumnos es una lindura tu gif. por cierto yo
utilizo la libreria para el teclado pero me encantaria ver paso a paso la tuya ;) suerte y muchas
gracias.
Reply Share
Jesus Ruben > BETTY hace 3 aos
Hola Betty.
Un placer saber que hacemos algo que les resulte de utilidad. Tenemos otra entrada
donde est el cdigo de ejemplo en lenguaje C.
Aqu esta el enlace: http://www.geekfactory.mx/tuto...
Reply Share
Subscribe
Privacidad
Lo ms vendido.
Arduino UNO R3
$370.00
HC-SR04 Sensor de distancia ultrasnico
$40.00
Cable Dupont Macho Macho
$45.00
Jumpers para protoboard 65 piezas
$65.00
Servo SG90 Tower Pro Servomotor Micro
$60.00
Sobre nosotros
Cmo comprar?
Quines Somos?
Formas de Pago
Contacto
Distribuidores
Cursos de Arduino en Mxico
Poltica de Privacidad
Afiliados y estadsticas
Afiliados:
Visitantes: