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