Menu
in

PIC Modules 1.0 – Nota 2

En la segunda entrega de esta serie de artículos, veremos como construir nuestro primer modulo: un teclado de 15 teclas, con su propio microcontrolador, que se unirá mediante un cable plano de 10 vías a cualquiera de nuestras placas centrales.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 nxm.
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 4×4 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.
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 articulo veremos como construir un teclado de 15 teclas, con un PIC 16F627A 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.

Como se puede ver en el esquema, simplemente 15 pulsadores, unas pocas resistencias, un transistor para manejar el buzzer y un microcontrolador basta para conformar este modulo.
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.
Como siempre, comenzaremos realizando el circuito impreso con la técnica explicada en NeoTeo, 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.
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.
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.

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”.
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 util como “realimentación auditiva” de que efectivamente se produjo el contacto de la tecla.

Este es el listado 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

‘Dim x As Bit

‘—-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
‘PORTA = 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

outdata0000: ‘Pone en 0000 la salida OUTDATA
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

La rutina TONOKEY del programa de la pagina anterior 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.

ABCD Tecla
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

La figura muestra el nombre de cada pin del conector.
Hemos construido nuestro primer accesorio para nuestro sistema de módulos. En notas siguientes veremos como armar un enlace por radiofrecuencia, placa de reles, modulo expansor de entradas y salidas, y muchos mas, todos compatibles entre si.
Este es el modulo mas “inteligente” de todos los que tenemos pensado publicar, ya que los demás no poseen un microcontrolador propio. Este caso excepcional se justifica solamente por el ahorro de pines de E/S que proporciona la “inteligencia” de la placa periférica. El compañero ideal para este modulo es del display LCD, ya que con una placa central y los módulos LCD y 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 por parte del usuario.

Escrito por Ariel Palazzesi

Leave a Reply