Teclado
Detección de una tecla pulsada.
Estructura de un teclado I
5V
X
X
X
X
Y
Y
Y
Y
• Se trata de una matriz
de pulsadores.
• Las columnas están
pulled up a una
tensión de referencia.
• X están configuradas
como salida
• Y estánconfiguradas
como entrada
Estructura de un teclado II
• En las intersecciones
están los pulsadores.
• El pulsador pone en
contacto la fila con la
columna
correspondiente
5V
X
X
X
X
Y
Y
Y
Y
Funcionamiento I
5V
X
X
X
X
1
1
1
1
• En estado de reposo
las columnas reciben
toda la tensión de
referencia
• El estado de las
entradas Y es de 1
lógico
Funcionamiento II
• Al pulsar una tecla se
establece un puente
entre la fila y la columna.
• Si la X correspondiente
está a tierra toda la
corriente derivará hacia
ella quedando la entrada
Y respectiva en contacto
con tierra
5V
X
X
0
X
1
1
0
1
Procedimiento.
5V
0
0
0
0
1
1
1
1
• El procedimiento para
trabajar con el
teclado es activar
todas las salidas (0
lógico) y esperar a
que una de las
entrada se active
Procedimiento
• Cuando se ha
detectado una
entrada activa, se
vuelven a desactivar
todas las salidas y se
procede a explorar el
teclado fila a fila
5V
0
0
0
0
1
1
0
1
Procedimiento
5V
5V
0
1
1
0
1
1
1
1
1
1
1
1
1
1
1
1
5V
5V
1
1
1
1
1
0
0
1
1
1
0
1
1
1
1
1
Procedimiento
1
1
0
1
1
1
0
1
• Al detectar la columna
ya tenemos
identificada la tecla
pulsada con un
“código de tecla”
XXXXYYYY
11011101
Procedimiento
• Este código de tecla
debe luego traducirse
al código del carácter
asignado a la tecla
11011101 -----> 9
Código ascii del 9:
00111001 (39h)
1
2
3
F
4
5
6
E
7
8
9
D
0
A
B
C
Conexión al PIC
5V
RB4
RB5
RB6
RB7
RB0 RB1 RB2 RB3
• Las ocho líneas del
teclado están
conectadas al Puerto
B
• RB0..RB3 se deben
configurar como
entrada
• RB4..RB7 se deben
configurar como
salida
Conexión al PIC
• Para
proporcionarle
tensión al
sistema las
líneas de salida
del puerto B
deben estar
activadas a pull
up
Rebotes
5v
0v
5v
0v
• La pulsación es un
hecho eléctrico que
puede causar cierta
inestabilidad.
• Cuando se detecta
una pulsación hay que
distinguirla de un
rebote producido por
una pulsación previa
Rebote
5v
0v
1ms
Si cada ciclo de instrucción
dura un micro segundo, es
posible muestrear (leer por el
puerto) 1000 veces la señal.
Antes de que la señal se
estabilice podemos hacer
muchas lecturas
Rebote
• La manera de evitar
los rebotes es esperar
un cierto retardo tras
haber detectado la
pulsación de una
tecla y comprobar
nuevamente su
estado
5v
0v
5ms
Detección errónea de pulsación
de tecla
Comprobación de la
pulsación
Fin de pulsación
• Otro problema es el
de las lecturas
múltiples de la
misma pulsación. 5v
• Para evitarlo hay que
esperar a que la
tecla deje de estar
pulsada antes de
devolver el código
5v
Tecla pulsada
0v
0v
fin de pulsación
Programación. Tablas
inicio movlw 34h
movwf numero
movlw 0ffh
movwf cont
otro
incf cont,1
Call codigonumero
subwf numero,0
btfss STATUS,Z
goto otro
;En W queda el numero que designa el código ascii 34h
fin
goto fin
codigonumero
movf cont,w
addwf PCL
retlw 30h; código ascii del cero
retlw 31h; código ascii del uno
retlw 32h
retlw 33h
retlw 34h
retlw 35h
retlw 36h
retlw 37h
retlw 38h
retlw 39h; código ascii del nueve
• En la programación el
aspecto más
relevante es el de la
traducción de código
de tecla a código ascii
• Para ello lo más
cómodo es emplear
tablas
Programación. Tablas
• Mediante las
instrucciones de sumar a
PCL y retlw se van
recuperando valores y
comparándolos con el de
referencia.
• Cont va llevando la cuenta
y al final indicará la
posición del valor
encontrado
inicio movlw 34h
movwf numero
movlw 0ffh
movwf cont
otro
incf cont,1
Call codigonumero
subwf numero,0
btfss STATUS,Z
goto otro
;En W queda el numero que designa el código
ascii 34h
fin
goto fin
codigonumero
movf cont,w
addwf PCL
retlw 30h; código ascii del cero
retlw 31h; código ascii del uno
retlw 32h
retlw 33h
retlw 34h
retlw 35h
retlw 36h
retlw 37h
retlw 38h
retlw 39h; código ascii del nueve
Programación.Tablas
0000
0001
0002
0003
......
00ff
0100
0101
0102
0103
......
01ff
0200
0201
0202
0203
......
02ff
0300
0301
0302
0303
......
03ff
PCLATH=0
!cuidado¡
PCLATH=1
PCLATH=2
PCLATH=3
• Hay que tener cuidado
con el manejo de PCL
como mecanismo de
salto.
• PCL solo actúa en
ámbito de página
PCLATH
Programación. Tablas
• Si la tabla se
encuentra en una
página diferente a la 0
es necesario
actualizar
previamente el
PCLATH antes de saltar
a la tabla
inicio movlw 34h
movwf numero
movlw 0ffh
movwf cont
MOVLW HIGH codigonumero
MOVWF PCLATH
otro
incf cont,1
Call codigonumero
subwf numero,0
btfss STATUS,Z
goto otro
;En W queda el numero que designa el código ascii 34h
fin
goto fin
codigonumero
movf cont,w
addwf PCL
retlw 30h; código ascii del cero
retlw 31h; código ascii del uno
retlw 32h
retlw 33h
retlw 34h
retlw 35h
retlw 36h
retlw 37h
retlw 38h
retlw 39h; código ascii del nueve
Programación. Tablas
0000
0001
PCLATH=0 0002
0003
......
00ff
0100
PCLATH=1 0101
0102
0103
......
01ff
0200
PCLATH=2 0201
0202
0203
......
02ff
0300
PCLATH=3 0301
0302
0303
......
03ff
codigonumero
movf cont,w
addwf PCL
retlw 30h;
retlw 31h;
retlw 32h
retlw 33h
retlw 34h
retlw 35h
retlw 36h
retlw 37h
retlw 38h
retlw 39h;
• Las tablas no pueden
saltar los límites de
una página PCLATH.
• Ubicar las tablas de
forma segura usando
la directiva org
FIN
Descargar

Teclado