Está en la página 1de 28

Introducción

Teclado de 16 teclas

Veremos como construir un teclado de 16 teclas para utilizar como un módulo más de nuestro PIC TRAINER (para micros de 18 pines o 40 pines), a los que
se unirá mediante dos cables planos de 10 vías.

Este proyecto puede resultar interesante para estudiantes y hobbystas, o cualquiera que este iniciándose en el mundo de los microcontroladores PIC.

Tabla de contenidos
[esconder]

1 Introducción

2 El proyecto

3 PCB

4 Montaje

5 Modo de
uso

6 Autor

[editar] El proyecto
Generalmente, cuando necesitamos un teclado para nuestros proyectos recurrimos a una de dos alternativas: o utilizamos un pin del microcontrolador por
tecla, o bien creamos una matriz de teclas de "n" x "m", utilizando para ello "n" x "m" pines. En el caso de un teclado de 16 teclas se necesitan cuatro pines
para las filas y cuatro para las columnas. Es decir, un teclado de 4x4 teclas se puede leer con solo 8 pines.

El circuito de nuestro teclado es casi trivial:


Utilizamos 16 pulsadores, y un resistor por cada una de las columnas, de forma que los pulsadores esten conectados a GND cuando no estan pulsadas.

[editar] PCB
Como siempre, comenzaremos realizando el circuito impreso (aprende Como construir tus propios PCB), para luego realizar las perforaciones necesarias.
Puede darse el caso de que los pines de los pulsadores sean algo mas gruesos que los de los demás componentes, así que deberemos utilizar una broca
adecuada, generalmente de 1.2 mm de diámetro.

PCB, lado de las soldaduras.


PCB, lado de los componentes.
[editar] Montaje
Montaremos primero los resistores, los conectores y por ultimo las teclas. No esta de más repasar las soldaduras por si se ha producido algún cortocircuito
en el montaje. El siguiente dibujo puede servir como guia para no tener problemas a la hora de colocar cada componente.
Modelo terminado
[editar] Modo de uso
Este teclado, como dijimos, puede conectarse a cualquiera de los módulos centrales del proyecto PIC TRAINER. Como puede verse en el circuito de mas
arriba, hay dos conectores, uno para las filas (CN1) y otro para las columnas (CN2).

Nuestro programa debe poner en alto una de las filas por vez, y leer los cuatro bits correspondientes a las columnas. Si alguno de ellos esta en "1", la tecla
correspondiente a la fila y columna seleccionadas se encuentra presionada. Si no hay teclas presionadas, la lectura devuelve "0", ya que las lineas estan
puestas a GND mediante los resistores de 10K.

Teclado inteligente de 15 teclas, con PIC16F628A.


[editar] Introducción
Teclado inteligente de 15 teclas.

Veremos como construir un teclado de 15 teclas, con su propio microcontrolador. Además de las posibilidades que presenta como,
por ejemplo, periférico de entrada de datos en un ordenador, puede ser utilizado en conjunto con alguno de los "trainers" (para micros
de 18 pines o 40 pines), a los que se unirá mediante un cable plano de 10 vías.

Este proyecto puede resultar interesante para estudiantes y hobbystas, o cualquiera que este iniciándose en el mundo de los
microcontroladores PIC. Se ha incluido el código fuente completo en PIC BASIC (de PIC SIMULATOR IDE) de manera que pueda
comenzar a utilizarse sin necesidad de programar nada.

Tabla de contenidos
[esconder]
1 Introducción

2 El proyecto

3 Hardware

4 PCB

5 Montaje

6 Cable y
conector

7 Software

8 Autor

El compañero ideal para este modulo es del display LCD, ya que con una placa central, un módulo LCD y este teclado se pueden
realizar proyectos que requieran interacción con el usuario, tales como alarmas, temporizadores, cronómetros, y cualquier otro que
necesita de algún menú en pantalla o de ingreso de datos.

[editar] El proyecto
Generalmente, cuando necesitamos un teclado para nuestros proyectos recurrimos a una de dos alternativas: o utilizamos un pin del
microcontrolador por tecla, o bien creamos una matriz de teclas de "n" x "m", utilizando para ello "n" x "m" pines. Si necesitáramos un
teclado de 15 teclas, en el mejor de los casos se necesitan 8 pines (n = 4 y m = 4). No siempre tenemos tantos pines disponibles.

La primera alternativa tiene la clara desventaja de requerir un muy elevado número de pines I/O, que generalmente es un recurso
escaso. El segundo caso, el de la matriz, es más eficiente en el uso de pines, sirva como ejemplo el caso de un teclado de 4x4 teclas
que se puede leer con solo 8 pines.

Pero existe una alternativa más, y consiste en crear un teclado “inteligente”, con su propia lógica de control, y que nos entregue
directamente un código correspondiente a la tecla pulsada. Esto, además de resultar económico en el uso de los recursos I/O del
microcontrolador principal, simplifica su programación, ya que el teclado entrega un código correspondiente a la tecla pulsada, sin
tener que preocuparnos de estar censando continuamente la matriz para determinar que tecla se pulso

Este código puede ser del tipo serial (vía RS-232, por ejemplo) o bien paralelo, donde se utilizan mas cantidad de conductores.

En este proyecto veremos como construir un teclado de 15 teclas, con un PIC16F628A (o su hermano menor PIC16F627A) como
elemento central, un zumbador para oír un pitido cada vez que pulsamos una tecla, y un LED que indicara que el teclado se encuentra
alimentado. La salida de este teclado será un código de 4 bits que representa la tecla presionada, o bien “0000” si no se ha presionado
ninguna.
[editar] Hardware
Como se puede ver en el esquema, el hardware es extremadamente simple:
Solo utilizamos 15 pulsadores, unos pocos resistores, un transistor para manejar el buzzer y un microcontrolador como "cerebro" del
módulo.

Debido a que el control de los tiempos con una muy alta precisión no es necesario en este proyecto, hemos ahorrado el cristal y sus
condensadores accesorios, y empleado el oscilador interno del microcontrolador, funcionando a 4 MHz.
[editar] PCB
Como siempre, comenzaremos realizando el circuito impreso (aprende Como construir tus propios PCB), para luego realizar las
perforaciones necesarias. Puede darse el caso de que los pines de los pulsadores sean algo mas gruesos que los de los demás
componentes, así que deberemos utilizar una broca adecuada, generalmente de 1.2 mm de diámetro.
Vista del lado soldaduras.

[editar] Montaje
Montaremos primero los puentes, seguiremos por los resistores y zócalo para el microcontrolador, y por ultimo las teclas, buzzer y
LED. No esta de más repasar las soldaduras por si se ha producido algún cortocircuito en el montaje.

[editar] Cable y conector


Una vez comprobado esto, procedemos a construir el cable plano, que servirá para unir entre si cualquier par de módulos de los que
veremos en estos artículos. De hecho, conviene tener varios de ellos a mano, y este es un buen momento de armarlos a todos. En la
foto se ve claramente como montar las fichas sobre el cable, de manera que sea simétrico y se puede conectar el modulo central o el
periférico en cualquiera de sus extremos.
"PinOut" del conector del teclado.

Cables de conexión entre placas.

Este conector, como dijimos compatible con el modulo central del articulo anterior, dispones de cuatro pines de datos, que llamaremos
“A”, “B”, “C”, y “D”.

[editar] Software
Realizado en en PIC BASIC (del PIC SIMULATOR IDE), el programa que debemos cargar en el microcontrolador se encarga de leer la
matriz de teclas, generar el pitido y colocar el código de 4 bits en el conector de salida.

Al presionar una tecla, el software genera un código de acuerdo a la tabla de la pagina siguiente, y pone en “0” o en “1” estos pines,
indicando que tecla se presiono. La combinación “0000” se utiliza para indicar que no se ha presionado ninguna tecla, por lo que dicho
pulsador puede no incluirse en el proyecto, o bien utilizarla como on-off del buzzer o alguna función similar. Por defecto, el buzzer toca
una nota diferente por tecla, lo que puede resultar útil como “realimentación auditiva” de que efectivamente se produjo el contacto de
la tecla.

La rutina TONOKEY del programa que veremos a continuación es la encargada de hacer sonar el buzzer con la frecuencia
correspondiente a cada tecla, que se carga en la variable FREQ en cada una de las rutinas cuyo nombre es de la forma
OUTDATAxxx, en las que además de elegir la frecuencia en cuestión, se carga cada una de las variables A, B, C y D con los valores
adecuados para que el microcontrolador los publique en los pines del puerto de expansión. Esto se realiza con los códigos de la
siguiente tabla:
ABC
Tecla
D

0000 No se presiono ninguna tecla

0001 0

0010 1
0011 2

0100 3

0101 4

0110 5

0111 6

1000 7

1001 8

1010 9

1011 *

1100 #

1101 A
1110 B

1111 C

Este es el listado completo del programa:

'Versión 1.0 teclado 16 teclas + Buzz


'MICRO: 16F627A o 16F628A, Oscilador intRC
'-------------------------------------
'
'----- CONFIGURO PUERTOS-----
PORTA = 0
CMCON = 7 'Configuro A como Digital I/O
'
'Configuro el portA:
TRISA.0 = 1 'Entrada (Teclado)
TRISA.1 = 1 'Entrada (Teclado)
TRISA.2 = 1 'Entrada (Teclado)
TRISA.3 = 1 'Entrada (Teclado)
TRISA.4 = 0 'Salida
TRISA.5 = 0 'Salida
TRISA.6 = 0 'Salida
TRISA.7 = 0 'Salida (buzz)
'
'Configuro el portB:
TRISB.0 = 0 'Salida (Teclado)
TRISB.1 = 0 'Salida (Teclado)
TRISB.2 = 0 'Salida (Teclado)
TRISB.3 = 0 'Salida (Teclado)
TRISB.4 = 0 'Salida (BIT A DATA OUT)
TRISB.5 = 0 'Salida (BIT B DATA OUT)
TRISB.6 = 0 'Salida (BIT C DATA OUT)
TRISB.7 = 0 'Salida (BIT D DATA OUT)
'
'------VARIABLES------------------
'Defino constantes:
Symbol fila1 = PORTB.0
Symbol fila2 = PORTB.1
Symbol fila3 = PORTB.2
Symbol fila4 = PORTB.3
Symbol out_a = PORTB.4
Symbol out_b = PORTB.5
Symbol out_c = PORTB.6
Symbol out_d = PORTB.7
Symbol colu1 = PORTA.0
Symbol colu2 = PORTA.1
Symbol colu3 = PORTA.2
Symbol colu4 = PORTA.3
Symbol buzz = PORTA.7 'Buzzer
'
'Variables
Dim i As Byte
Dim t1 As Byte 'Numero de milisegundos que se mantiene el dato en DATAOUT
Dim freq As Word 'Frecuencia/2
'
'----COMIENZA EL PROGRAMA EN SI-----
'Inicializo las variables:
fila1 = 0
fila2 = 0
fila3 = 0
fila4 = 0
buzz = 0 'Apagado
t1 = 50 'duracion tono teclas
freq = 3000 'Frecuencia/2
PORTB = 0
'
Gosub outdata0000
'
'Suena un tono
Gosub tonokey
'
loop: 'Bucle principal del programa
'Recorro la matriz del teclado, poniendo de a una las
'filas en 1, y viendo si las columnas están en 1. Si
'es así, es que hay una tecla presionada.
'
'FILA 1
fila1 = 1
If colu1 = 1 Then Gosub outdata7
If colu2 = 1 Then Gosub outdata8
If colu3 = 1 Then Gosub outdata9
fila1 = 0
'fila 2
fila2 = 1
If colu1 = 1 Then Gosub outdata4
If colu2 = 1 Then Gosub outdata5
If colu3 = 1 Then Gosub outdata6
If colu4 = 1 Then Gosub outdatap3
fila2 = 0
'fila 3
fila3 = 1
If colu1 = 1 Then Gosub outdata1
If colu2 = 1 Then Gosub outdata2
If colu3 = 1 Then Gosub outdata3
If colu4 = 1 Then Gosub outdatap2
fila3 = 0
'fila 4
fila4 = 1
If colu1 = 1 Then Gosub outdataaste
If colu2 = 1 Then Gosub outdata0
If colu3 = 1 Then Gosub outdatanume
If colu4 = 1 Then Gosub outdatap1
fila4 = 0
'
Goto loop 'Repite eternamente
End
'
tonokey: 'Tono al presionar las teclas.
For i = 1 To t1
buzz = 1
WaitUs freq
buzz = 0
WaitUs freq
Next i
WaitMs 100
Gosub outdata0000
Return
'
'Pone en 0000 la salida OUTDATA
outdata0000:
out_a = 0
out_b = 0
out_c = 0
out_d = 0
Return
'
outdatap1:
out_a = 1
out_b = 1
out_c = 0
out_d = 1
freq = 500
Gosub tonokey
Return
'
outdatap2:
out_a = 1
out_b = 1
out_c = 1
out_d = 0
Gosub tonokey
Return
'
outdatap3:
out_a = 1
out_b = 1
out_c = 1
out_d = 1
freq = 800
Gosub tonokey
Return
'
outdata0:
out_a = 0
out_b = 0
out_c = 0
out_d = 1
freq = 1138
Gosub tonokey
Return
'
outdata3:
out_a = 0
out_b = 1
out_c = 0
out_d = 0
freq = 953
Gosub tonokey
Return
'
outdata2:
out_a = 0
out_b = 0
out_c = 1
out_d = 1
freq = 1016
Gosub tonokey
Return
'
outdata1:
out_a = 0
out_b = 0
out_c = 1
out_d = 0
freq = 1087
Gosub tonokey
Return
'
outdata6:
out_a = 0
out_b = 1
out_c = 1
out_d = 1
freq = 989
Gosub tonokey
Return
'
outdata5:
out_a = 0
out_b = 1
out_c = 1
out_d = 0
freq = 1003
Gosub tonokey
Return
'
outdata4:
out_a = 0
out_b = 1
out_c = 0
out_d = 1
freq = 1123
Gosub tonokey
Return
'
outdata9:
out_a = 1
out_b = 0
out_c = 1
out_d = 0
freq = 1030
Gosub tonokey
Return
'
outdata8:
out_a = 1
out_b = 0
out_c = 0
out_d = 1
freq = 1094
Gosub tonokey
Return
'
outdata7:
out_a = 1
out_b = 0
out_c = 0
out_d = 0
freq = 1164
Gosub tonokey
Return
'
outdatanume:
out_a = 1
out_b = 1
out_c = 0
out_d = 0
freq = 1075
Gosub tonokey
Return
'
outdataaste:
out_a = 1
out_b = 0
out_c = 1
out_d = 1
freq = 1209
Gosub tonokey
Return

También podría gustarte