Teclado
Detección de una tecla pulsada.
Estructura de un teclado I
• 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
X
X
X
X
Y Y Y Y
5V
Estructura de un teclado II
• En las intersecciones están los pulsadores.
• El pulsador pone en contacto la fila con la columna correspondiente
X
X
X
X
Y Y Y Y
5V
Funcionamiento I
• En estado de reposo las columnas reciben toda la tensión de referencia
• El estado de las entradas Y es de 1 lógico
X
X
X
X
1 1 1 1
5V
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
X
X
0
X
1 1 0 1
5V
Procedimiento.
• 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
0
0
0
0
1 1 1 1
5V
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
0
0
0
0
1 1 0 1
5V
Procedimiento
0
1
1
1
1 1 1 1
5V
1
0
1
1
1 1 1 1
5V
1
1
1
0
1 1 1 1
5V
1
1
0
1
1 1 0 1
5V
Procedimiento
• Al detectar la columna ya tenemos identificada la tecla pulsada con un “código de tecla”
XXXXYYYY1 1 0 1 1 1 0 1
1
1
0
1
1 1 0 1
Procedimiento
• Este código de tecla debe luego traducirse al código del carácter asignado a la tecla
11011101 -----> 9Código ascii del 9:00111001 (39h)
1 2 3
4 5 6
7 8
C0 A B
F
E
D9
Conexión al PIC
• 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
RB4
RB5
RB6
RB7
RB0 RB1 RB2 RB3
5V
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
• 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
5v
0v
0v
5v
ReboteSi 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
0v
5v
1ms
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
0v
5v
Detección errónea de pulsación de tecla
Comprobación de la pulsación
5ms
Fin de pulsación
• Otro problema es el de las lecturas múltiples de la misma pulsación.
• Para evitarlo hay que esperar a que la tecla deje de estar pulsada antes de devolver el código
0v
5v
Tecla pulsada fin de pulsación
5v
0v
Programación. Tablas
• 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
inicio movlw 34hmovwf numeromovlw 0ffhmovwf cont
otro incf cont,1Call codigonumerosubwf numero,0btfss STATUS,Zgoto otro
;En W queda el numero que designa el código ascii 34hfin goto fincodigonumero movf cont,w addwf PCL retlw 30h; código ascii del cero
retlw 31h; código ascii del unoretlw 32hretlw 33hretlw 34hretlw 35hretlw 36hretlw 37hretlw 38hretlw 39h; código ascii del nueve
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 34hmovwf numeromovlw 0ffhmovwf cont
otro incf cont,1Call codigonumerosubwf numero,0btfss STATUS,Zgoto otro
;En W queda el numero que designa el código ascii 34hfin goto fincodigonumero movf cont,w addwf PCL retlw 30h; código ascii del cero
retlw 31h; código ascii del unoretlw 32hretlw 33hretlw 34hretlw 35hretlw 36hretlw 37hretlw 38hretlw 39h; código ascii del nueve
Programación.Tablas
• Hay que tener cuidado con el manejo de PCL como mecanismo de salto.
• PCL solo actúa en ámbito de página PCLATH
00000001 PCLATH=000020003......00ff01000101 PCLATH=101020103......01ff02000201 PCLATH=202020203......02ff03000301 PCLATH=303020303......03ff
!cuidado¡
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 34hmovwf numeromovlw 0ffhmovwf cont
MOVLW HIGH codigonumeroMOVWF PCLATH
otro incf cont,1Call codigonumerosubwf numero,0btfss STATUS,Zgoto otro
;En W queda el numero que designa el código ascii 34hfin goto fincodigonumero movf cont,w addwf PCL retlw 30h; código ascii del cero
retlw 31h; código ascii del unoretlw 32hretlw 33hretlw 34hretlw 35hretlw 36hretlw 37hretlw 38hretlw 39h; código ascii del nueve
Programación. Tablas
• Las tablas no pueden saltar los límites de una página PCLATH.
• Ubicar las tablas de forma segura usando la directiva org
00000001
PCLATH=0 00020003
......00ff
0100PCLATH=1 0101
01020103
......01ff
0200PCLATH=2 0201
02020203
......02ff
0300PCLATH=3 0301
03020303
......03ff
codigonumero movf cont,w addwf PCL retlw 30h;
retlw 31h; retlw 32hretlw 33hretlw 34hretlw 35hretlw 36hretlw 37hretlw 38hretlw 39h;
FIN