Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Base
3.5
4.5
Informe
Funcionamiento
Aspectos de evaluacin
0.25 Fundamento terico
0.25 Diagrama de bloques
0.50 Tabla de asignacin de variables
0.75 Diagrama de flujo
0.50 Clculo de retardo
0.75 Programa
0.25 Conclusiones
Calificacin
2.0
10
Defensa
Total
Sangolqu Fecha:
UNIDAD N2
Informe de prctica No. 2.1
Tema:
DECODIFICADOR DE TECLADO
Objetivos:
Materiales
Procedimiento
Programar el PIC 16F877A para que funcione como un decodificador de teclado matricial 4x4, emulando las
funciones de un 74C922
Fundamento terico
I.
Los teclados matriciales son ensamblados en una matriz que pueden ser de 4x3 o 4x4, (con 16 teclas,
configuradas en 4 filas y 4 columnas). Cuando no se ha oprimido ninguna tecla, es decir todas las teclas
abiertas, no hay ninguna conexin entre filas y columnas. Cuando se oprime una tecla se hace conexin entre
la fila y la columna de la tecla presionada.
El puerto B del microcontrolador 16F877 viene preparado especialmente para el control de un teclado matricial
4x4. Para tener siempre un valor de 1 lgico en las columnas del teclado (parte alta del puerto B del pic) es
necesario conectar resistencias de pull-up, sin embargo, el puerto B cuenta con resistencias de pull-up
integradas, de ese modo es posible trabajar con un teclado matricial sin necesidad de ningn componente
externo.
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.
Para la deteccin y codificacin de una tecla presionada, se ha seguido el algoritmo de decodificacin del
circuito integrado 74C922:
1.
2.
3.
Al realizar la deteccin de la tecla presionada, se ponen en nivel bajo a todas las filas, para luego
proceder a realizar la lectura de las columnas.
Mientras se hace la lectura de las columnas, y se detecta que alguna se encuentra activa se limpia el
rebote, si es una tecla vlida se procede a realizar su respectiva codificacin.
Codificacin: para realizar la codificacin, el puerto activa a cada una de las filas, una a la vez,
colocando un nivel bajo (cero lgico) en la lnea correspondiente a la fila a activar.
Por cada fila activa se lee la informacin de columnas y dependiendo de la fila y la columna activada en nivel
bajo, se asigna el cdigo a la tecla de la interseccin.
II.
Retardos
Cuando necesitamos que transcurra un determinado tiempo de espera antes de que ocurra un evento como
por ejemplo el encendido de una luz, LED, activacin de una bobina de un rel o lectura de una determinada
entrada, se suele recurrir a los retardos. Prcticamente casi todos los programas de microcontroladores PIC
usan en algn momento una rutina de retardo. Los retardos en los PIC los podemos generar de dos formas
diferentes:
Por Software.
Los retardos por Hardware se realizan mediante el temporizador/contador TMR0 que es un registro
de 8 bits, es decir, un particular tipo de registro cuyo contenido es incrementado con una cadencia regular
y programable directamente por el hardware del PIC. Como es de 8 bits, el mximo de la cuenta est en
255.
Antes de generar una rutina de retardo es conveniente aprender una instruccin muy importante:
CALL
etiqueta
Esta instruccin sirve para hacer llamadas a distintas lneas de cdigo. Es muy parecida a la instruccin
GOTO, la diferencia es que CALL es una instruccin obligada a regresar al sitio desde donde se hizo la
llamada, esta propiedad la podemos usar para realizar funciones y de ese modo podemos separar el cdigo
de un programa en diferentes partes cada una realizando una funcin especfica.
III.
Clculo de Retardo
Para poder realizar el bucle de retardo por software, se debe tener en cuenta que el PIC 16F877A trabaja el
tiempo de ejecucin de cada una de las instrucciones del programa se ejecutaran en 1 ciclo, y las
instrucciones de salto se ejecutaran en 2 ciclo, teniendo en claro que por el osicilador de 4MHz cada ciclo se
lleva a cabo en 1 microsegundo.
Lo que se tiene que tomar en cuenta es el tiempo de ejecucin de cada una de las instrucciones, para de esta
forma poder obtener una ecuacin que defina el bucle, poder obtener los valores que se deben cargar a cada
uno de los contadores para realizar el decremento y obtener el retardo de 10 milisegundos.
Analizando la subrutina de retardo con la que trabajamos tenemos que:
4(255)=1020+1+2=1023
1023 ciclos equivalen al cumplimiento del lazo interno y ms pequeo.
1023+6=1029(255)=262395 ciclos
262395 +1+1+1+1+1023+1+2+2
Que equivale a 263427 ciclos en total que cumple esta subrutina de retardo, como cada ciclo se cumple en
1us, la subrutina se demora ,
Por lo tanto establecemos nuestras ecuaciones:
4 + 3
( + 6)
++9
= = 255
Tendremos un nmero total de 263427 ciclos equivalente al resultado del proceso anterior.
Por lo que para trabajar con un retardo de 10000 microsegundos equivalentes a 10 milisegundos, primero
definimos un valor mximo al primer contador de x=255, obteniendo las siguientes ecuaciones:
( + 6)255 =
+ + 9 = 10000
255
+
256
=
1530
=
9991
=
84.61
= 33.05
4 + 3 = 33.05
= 7.51 08
Diagrama de bloques
Reset
Controlador
PIC 16F877A
PUERTO C
PUERTO B
Teclado
Matricial
LEDS
(Salida en
cdigo binario)
LED
(Seal DA)
Oscilador
4MHz
Descripcin
Palabra de configuracin
Registro/Bit Direccin
Valor
CW
2007
3F71
TRISB
85h
b'11110000'
TRISC
86h
b'00000000'
h'FF'
h'08'
valorx
valory
0x20
0x21
x
y
Contador 1
Contador 2
aux
0x32
RBPU
81h
Diagrama de flujo
Inicio
X = 0x08
Y = 0x00
Puerto C
salida
Puerto B
entrada
Valorx 0x20
Valory 0x21
Aux 0x32
detecta
PuertoB =
ciclo1
W = 0xFF
Aux = W
b
1
PB.7 == '1'
No
No
No
No
Si
detecta
PB.6 == '1'
Si
PB.5 == '1'
Aux = Aux - W
Si
PB.4 == '1'
retard10ms
ZF == 1
Si
A
Si
PuertoC.7 = 0
W = b'00000000'
codificar
return
PuertoC=W
PuertoC.7=1
A
retard10ms
PB.7 == '1'
W = b'11111111'
PB.6 == '1'
return
PB.5 == '1'
PB.4 == '1'
Valorx =
b'11111111'
lazo2
Valory =
b'00001000'
lazo1
Valory =
Decrementar Valory
Valorx =='0'
No
W = b'00000000'
Si
Valorx =
Decrementar Valorx
No
Valory=='0'
return
Si
return
codificar
W = b'11110111'
PuertoB = W
W = b'11111011'
PuertoB = W
PB.7 == '1'
No
W = 0x0F
Si
PB.7 == '1'
PB.6 == '1'
No
W = 0x07
No
W = 0x00
No
W = 0x08
No
W = 0x05
No
W = 0x02
5
Si
Si
PB.6 == '1'
PB.5 == '1'
No
W = 0x04
5
Si
Si
PB.5 == '1'
PB.4 == '1'
No
W = 0x01
Si
Si
PB.4 == '1'
B
5
Si
return
return
W = b'11111101'
PuertoB = W
W = b'11111110'
PuertoB = W
PB.7 == '1'
No
W = 0x0E
Si
PB.6 == '1'
No
W = 0x09
No
W = 0x06
PB.6 == '1'
No
W = 0x0B
PB.5 == '1'
No
W = 0x0C
No
W = 0x0D
Si
No
W = 0x03
Si
D
W = 0x0A
Si
Si
PB.4 == '1'
No
Si
Si
PB.5 == '1'
PB.7 == '1'
PB.4 == '1'
Si
7
return
W = b'00000000'
return
Programa
Diagrama electrnico:
Salida en binario
co3
co2
co0
co1
Teclado Matricial
1
R1
D1
da
330
330
LED-RED
R2
2
b0
2
330
LED-RED
R3
330
LED-RED
R4
b2
D3
O2
LED-RED
D2
O1
B
b1
D5
R5
O0
Seal DA
D4
O3
330
LED-RED
b3
X1
2
U1
1
13
14
5
CRYSTAL
C2
C1
23uF
23uF
2
3
4
5
6
7
8
9
10
Vcc
OSC1/CLKIN
OSC2/CLKOUT
RA0/AN0
RA1/AN1
RA2/AN2/VREF-/CVREF
RA3/AN3/VREF+
RA4/T0CKI/C1OUT
RA5/AN4/SS/C2OUT
RE0/AN5/RD
RE1/AN6/WR
RE2/AN7/CS
MCLR/Vpp/THV
R9
R17
10k
RB0/INT
RB1
RB2
RB3/PGM
RB4
RB5
RB6/PGC
RB7/PGD
RC0/T1OSO/T1CKI
RC1/T1OSI/CCP2
RC2/CCP1
RC3/SCK/SCL
RC4/SDI/SDA
RC5/SDO
RC6/TX/CK
RC7/RX/DT
RD0/PSP0
RD1/PSP1
RD2/PSP2
RD3/PSP3
RD4/PSP4
RD5/PSP5
RD6/PSP6
RD7/PSP7
100
33
34
35
36
37
38
39
40
15
16
17
18
23
24
25
26
co0
co1
c02
co3
b0
b1
b2
b3
O0
O1
O2
O3
7
da
19
20
21
22
27
28
29
30
FILE NAME:
DESIGN TITLE:
PIC16F877A
Gavilema_Yanez.pdsprj
DATE:
13/6/2016
Gavilema_Yanez.pdsprj
PAGE:
PATH:
BY:
A
C:\Users\VICTORIA\Gavilema_Yanez.pdsprj
@AUTHOR
REV:
H
@REV
of
TIME:
9
1
1:43:40
K
Conclusiones
Un teclado matricial 4x4 solamente ocupa 4 lneas de un puerto para las filas y otras 4 lneas para las
columnas, de este modo se pueden leer 16 teclas utilizando solamente 8 lneas de un microcontrolador.
El puerto B del microcontrolador 16F877A viene preparado especialmente para el control de un teclado
matricial 4x4. Para tener siempre un valor de 1 lgico en las columnas del teclado (parte alta del puerto
B del pic) es necesario conectar resistencias de pull-up, sin embargo el puerto B cuenta con resistencias
de pull-up integradas, de ese modo es posible trabajar con un teclado matricial sin necesidad de ningn
componente externo.
El coder 74C922 puede utilizarse para varios teclados matriciales, ya que este nos devuelve nicamente
la posicin de la tecla aplastada, as que no es necesario que conozca el smbolo que lleva cada una de
ellas. Es por ello que se necesita de un microcontrolador adicional que asigne un cdigo especfico de
acuerdo al teclado matricial que se vaya a usar.
Para la utilizacin de un teclado matricial se debe realizar una comparacin inicial de una columna
conocida y a partir de la columna conocida se empieza a buscar una por una la tecla de la fila presionada,
de esta manera tener una coordenada a la que se aplicara un valor determinado segn la coordenada
en el teclado matricial.
Bibliografa