El Teclado Matricial 4x4
Utilizamos un teclado matricial 4x4 que nos proporciona
16 botones. Lo conectamos de manera que detectemos
estados altos. Para poder controlarlo desde un puerto
del pic de 8 pines, debemos realizar barridos, es
decir, habilitamos una columna poniendo en bajo
sólo una de las cuatro columnas (puerto B
<0:3>) y preguntamos si se ha pulsado algún
botón asociado a la columna habilitada (filas
puerto b 4:7) esto es preguntando cual de los cuatro
pines se ha puesto en estado alto, por ejemplo ponemos
el 1 en los que no queremos y 0 en el que queremos
(PORTB pin 0), tenemos habilitados los botones 3,
7, B y F, sabremos cual se pulsó, si preguntamos
qué pin está en estado alto PORTB
4, PORTB 5, PORTB 6 y PORTB 7 respectivamente.
Antirrebotes
Cualquier botón que utilicemos tiene una
tendencia natural a rebotar (a simple vista no parece)
aunque es mínima puede ser detectada por
el micro, para poder eliminarlo se debe recurrir
a antirrebotes por hardware (algo costoso), como
tenemos a nuestro pic podemos programar un retardo
de tiempo, es decir, ignorar lo que esté
sucediendo durante un pequeño lapso, que
es un valor mínimo de 100ms, práctimente
imperceptible para nosotros, utilizando el temporizador
TMR0.
TMR0 en Modo temporizador
Temporizador/Contador (TMR0) Este dispositivo,
llamado Real Time Clock / Counter, es un contador
de 8 bits, constituido por el registro TMR0 que
se encuentra en la posición 01 de la memoria
de datos. Este registro puede usarse para contar
eventos externos por medio de un pin de entrada
especial (modo contador RA4) o para contar pulsos
internos de reloj de frecuencia constante (modo
timer). Además, en cualquiera de los dos
modos, se puede insertar un prescaler, es decir
un divisor de frecuencia programable que puede dividir
por 2, 4, 8, 16, 32, 64, 128 o 256. Este divisor
puede ser utilizado alternativamente como prescaler
del OPTION_REG. La ventaja de temporizar por módulo,
es que tenemos valores de tiempo fácilmente
calculables por una ecuación, utilizando
el retardo máximo que nos puede ofrecer el
TMR0; el cual usado en la práctica funciona
muy bien (excepto cuando se utilizan dispositivos
más lentos como el LCD). Vea la fórmula
1.
Como ven en dicha fórmula, el valor máximo
de temporización es 65.5ms.
Al ser un módulo incremental podemos ver
que no podemos cargar el valor de 255 (2^8 contando
el cero)
Para hacer que llegue a los 255 debemos poner en
cero el TMR0 para que se incremente hasta el valor
del timer (el valor máximo que debe temporizar),
es decir
El Display 7 Segmentos
Sin duda alguna es uno de los dispositivos de salida
más utilizados por su simplicidad de uso.
En Saber Electrónica ya han salido artículos
sobre éstos, donde se ha utilizado una interfase
con el 74LS249 y 74LS247 (convertidor bcd a display
de 7 segmentos) como solución a un control;
ahora podemos no utilizar el convertidor bcd display
de 7 segmentos y realizar una solución por
software, determinando qué segmentos debemos
prender con 0 lógico si es cátodo
común o 1 lógico si es cátodo
común.
Para el display ánodo común, se dispone
la tabla 1.
Teniendo la tabla cada vez que se pulse una tecla
colocamos el valor para cada carácter a visualizar
en el puerto C
Desarrollo de Programa
Configurar el Puerto C como salidas, el puerto
B <7:4> como entradas para detectar las teclas
pulsadas, puerto B <3:0> como salidas para
poder realizar el barrido de las columnas. Este
programa y conexiones son una buena base para una
cerradura electrónica.
|