Vous êtes sur la page 1sur 15

DEPARTAMENTO DE ELECTRICA Y ELECTRONICA

Abril 2016 Agosto 2016

REA DE SISTEMAS DIGITALES


ASIGNATURA: MICROCONTROLADORES NRC: 2579
Informe de prctica No. 2.1
Tema: Decodificador de teclado
Docente: Ing. Danny Sotomayor
Equipo # 07
Integrantes:
1. Stefanny Gabriela Gavilema Casa
2. Victoria Nicole Ynez Garzn

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

0.25 Diagrama electrnico


Presentacin del circuito
0.50
- Conexiones
1.00 Visualizacin del cdigo de la tecla (Binario)
2.00 Seal DA
1.00 Tiempo de respuesta

2.0
10

Defensa
Total

Sangolqu Fecha:

DEPARTAMENTO DE ELCTRICA Y ELECTRNICA

UNIDAD N2
Informe de prctica No. 2.1

Tema:

DECODIFICADOR DE TECLADO

Objetivos:

Programar el Uc para que funcione como un decodificador de teclado 4x4


Utilizar subrutinas para generar retardos por software.
Aplicar las instrucciones del microcontrolador para generar la seal DA (Dato disponible)

Materiales

Microcontrolador PIC 16F877A.


Teclado matricial 4x4.
Fuente de alimentacin.
Protoboard
Multmetro
Cristal 4Mhz
Capacitores, resistencias, dipswitch, leds. Cables.
Computador
Grabador de PICs

Procedimiento
Programar el PIC 16F877A para que funcione como un decodificador de teclado matricial 4x4, emulando las
funciones de un 74C922

Fundamento terico
I.

Teclado Matricial 4x4

Figura 1 Conexiones del teclado matricial

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.

Figura 2 Ejemplo, deteccin de la tecla presionada


El mtodo que proponemos permite conectar a nuestro microcontrolador 16 teclas usando solamente 8 pines.

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.

Por Hardware mediante el Timer TMR0.

Los retardos por Software

consisten en que el PIC se quede ejecutando unos bucles que van


decrementando unos contadores cargados previamente con el tiempo de retardo, cuando los contadores
llegan a 0 la rutina de retardo queda terminada y el microcontrolador sigue ejecutando otros procesos.

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.

Luego analizando tenemos que el lazo externo y ms grande cumple con:

1023+6=1029(255)=262395 ciclos

Y para finalizar el programa se opera con:

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

Si asignamos para x e y sus mximos valores es decir:

= = 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

Despejando A para encontrar el valor del segundo contador tenemos que:

= 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

Tabla de asignacin de variables


N

Descripcin

Palabra de configuracin

Registro/Bit Direccin

Valor

CW

2007

3F71

Configuracin del Puerto B


como entrada/Salida

TRISB

85h

b'11110000'

Configuracin del Puerto C


como salida

TRISC

86h

b'00000000'

Contante del contador 1 para


10ms

h'FF'

Contante del contador 2 para


10ms

h'08'

valorx
valory

0x20
0x21

x
y

Contador 1
Contador 2

auxiliar para identificar tecla


pulsada

aux

0x32

Conecta todas las resistencias


en pull-up

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