| Diseño del circuito
La figura 1 muestra el diagrama esquemático
del circuito que será empleado para desarrollar
nuestra aplicación. Como puede observar utilizaremos
un microcontrolador PIC16F876 debido a que reúne
las características necesarias para poder
trabajar, también utilizaremos 4 diodos LED
que nos servirán para poder visualizar el
dato que será enviado a la computadora y
que es el equivalente en binario a la tecla presionada
por el usuario, las resistencias conectadas entre
las patas RB4-RB7 y Vdd son utilizadas para asegurar
un estado lógico al momento de leer el puerto.
En este punto es importante mencionar que serán
utilizados el Módulo de Teclado y el Módulo
Adaptador de TTL a RS232.
Funcionamiento del teclado
Para realizar esta pequeña aplicación
utilizamos un teclado matricial de 4 x 4, es decir
de cuatro filas y cuatro columnas, que nos da un
total de 16 teclas, para manipular el teclado mediante
el microcontrolador es necesario tener líneas
de entrada y líneas de salida, en este caso
las líneas de entrada están conectadas
a las filas, y las líneas de salida están
conectadas a las columnas.
Para que el teclado funcione hay que activar las
columnas de manera alternada, después de
activar una de las columnas hay que verificar si
se ha activado alguna de las filas, el que una de
las filas esté activada implica que una de
las teclas ha sido presionada y si una de las teclas
ha sido presionada hay que determinar qué
tecla fue, la tecla presionada corresponde a la
intersección de la columna activada y la
fila activada, en el caso de que ninguna de las
filas esté activa se asume que ninguna tecla
de la columna activada fue presionada, por lo que
se procede a activar una columna diferente.
Diseño del programa
Para empezar será necesario utilizar algunos
registros de propósito general, el registro
'DATO_L' almacenará el valor leído
del puerto B, mientras que el registro 'COLUMNA'
contendrá el valor que corresponde a la columna
que ha sido activada en el teclado, los registros
'r1','r2' y 'r3' serán utilizados por la
subrutina de pérdida de tiempo para hacer
un pequeño retardo.
Posteriormente, en la subrutina de configuración
se configuran los puertos y la USART para establecer
comunicación con la PC. Antes de configurar
la USART es importante mencionar cuáles son
sus registros y qué bits se encuentran en
cada uno de ellos.
Para programar la USART básicamente hay que
manejar 3 registros, el primero de ellos se encarga
de configurar y dar formato a las transmisiones
de datos, el segundo de configurar y dar formato
a las recepciones de datos, además de activar
la USART, y el tercero se encarga de configurar
la velocidad de las comunicaciones de datos. A continuación
se muestra una pequeña descripción
de cada uno de estos registros, así como
de los bits de cada uno de ellos.
Registro TXSTA
Bit [0] TXD8.- Este es el noveno bit de
datos en el caso de una transmisión de 9
bits.
Bit [1] TRMT.-Cuando está en 1 indica
que el registro de transmisión TXREG está
vacío, esto implica que puede escribirse
un nuevo dato.
Bit [2] BRGH.- Este bit sólo se utiliza
en modo asíncrono, y sirve para seleccionar
uno de los dos modos de velocidades.
Bit [3] No se utiliza, se lee como 0.
Bit [4] SYNC.- Este bit se pone a 1 para
utilizar el modo síncrono o a 0 para el modo
asíncrono.
Bit [5] TXEN.- En modo asíncrono este
bit se pone a 1 para activar las transmisiones de
datos.
Bit [6] TX8/9.- Este bit selecciona una transmisión
de 8 bits si está a 1 o de 9 bits si está
a 1.
Bit [7] CSRC.- En modo asíncrono,
este bit no se utiliza.
Registro RCSTA
Bit [0] RCD8.- Este es el noveno bit de
datos en el caso de una transmisión de 9
bits.
Bit [1] OERR.- Este bit se pone a 1 en caso
de error de desbordamiento.
Bit [2] FERR.- Este bit se pone a 1 en caso
de error de formato.
Bit [3] No se utiliza y se lee como 0.
Bit [4] CREN.- En modo asíncrono debe
estar a 1 para autorizar la recepción. En
modo asíncrono autoriza que se continúe
la recepción.
Bit [5] SREN.- En modo asíncrono no
se utiliza, en modo asíncrono este bit debe
estar a 1 para activar la recepción.
Bit [6] RC8/9.- Este bit debe estar a 1 para
activar la transmisión de 9 bits.
Bit [7] SPEN.- Este bit debe estar a 1 para
activar la USART.
Registro SPBRG
Este registro permite calcular la velocidad de
transmisión que utilizará la USART,
para colocar el valor adecuado en este registro
se utiliza una fórmula, o bien puede ser
consultada la tabla que proporciona el fabricante;
es importante que considere el valor del bit BRGH
del registro TXSTA.
Los pasos a seguir en la subrutina de configuración
son los siguientes:
Configurar la patita 18(RC7/RX) como entrada,
y la patita 17(RC6/TX) como salida, para esto movemos
el valor 80h al registro TRISC.
Configurar las patitas RB0, RB1, RB2 y RB3
como salidas, y las patitas RB4,RB5,RB6 y RB7 como
entradas, esta configuración será
utilizada para manipular el funcionamiento del teclado,
para conseguir esto movemos el dato F0h a el registro
TRISB.
Configurar la USART, para esto hay que poner
a 1 los bits BRGH y TXEN que sirven
para utilizar una comunicación a alta velocidad
y para habilitar las transmisiones de datos respectivamente,
esto lo logramos moviendo el dato 24h al registro
TXSTA.
Continuando con la configuración de
la USART, hay que configurar la velocidad de las
comunicaciones, en este caso utilizamos una velocidad
de 9600 bps, para configurar la USART con dicha
velocidad hay que mover el valor 25d al registro
SPBRG, para configurar la USART a otras velocidades
usted puede consultar la tabla de velocidad que
se encuentra en las especificaciones técnicas
del PIC 16F876 o bien utilizar la fórmula
que indica el fabricante.
Por último, hay que regresar al banco
de memoria 0 y activar el bit SPEN del registro
RCSTA, con esto logramos activar la USART para que
funcione.
Después de configurar los puertos y la USART
el programa entra en un bucle en el cual las columnas
del teclado son activadas de manera alternada, después
se verifica si alguna fila está activada,
si es así se determina qué tecla fue,
y si no se activa otra columna.
El programa comienza poniendo a '0' la columna uno
mientras las demás columnas permanecen en
'1', para esto utilizamos la subrutina de activación
de columna, esta subrutina lleva a cabo las siguientes
acciones:
Coloca en el puerto B el valor correcto dependiendo
de la columna que se desea activar (ver tabla 1),
adicionalmente ese mismo valor se almacena en un
registro de propósito general que hemos llamado
'COLUMNA'.
Posteriormente se lee el puerto B y se elimina
la parte baja del byte leído, este dato se
almacena en otro registro de propósito general
que hemos llamado 'DATO_L'.
A continuación se determina si alguna
de las filas está activada, para esto se
pregunta si alguno de los bits de mayor peso del
registro 'DATO_L' esta en '1', en caso de que uno
de estos bits esté en '1' se llama a la subrutina
correspondiente a la fila activada, si no se encuentra
activada ninguna de las filas el programa procede
a activar una nueva columna y determinar si alguna
de las filas ha sido activada.
Cuando uno de los botones ha sido presionado se
activa la fila que corresponde a ese botón
y se llama a la subrutina correspondiente con esa
fila, la función de esta subrutina es determinar
en base al valor, en el registro de propósito
general 'COLUMNA', cuál ha sido la tecla
pulsada, la subrutina de fila hace lo siguiente:
Se pregunta si alguno de los 4 bits de menos
peso del registro 'COLUMNA' esta a '0', si el bit
está a '0' se coloca en el registro 'W' el
valor correspondiente a la tecla pulsada.
Posteriormente se llama a la subrutina de
transmisión de dato para que el dato sea
transmitido hacia la PC.
Se muestra dicho dato en el puerto C y se
llama a la subrutina de pérdida de tiempo
para evitar los rebotes de los botones
del teclado.
Como se mencionó anteriormente, una vez que
se determinó la tecla que ha sido pulsada
por el usuario, lo que hay que hacer es enviar ese
dato por la USART del microcontrolador, esto lo
haremos mediante una subrutina de envío de
datos, los pasos a seguir por esta subrutina son:
Primero hay que asegurarnos de que nos encontramos
en el banco 1 de memoria, posteriormente hay que
mover el dato que quedó en W (tecla pulsada)
al registro TXREG, en este registro se deposita
el dato que será transmitido por la USART.
Debido a que el programa no maneja interrupciones
es necesario entrar en un bucle hasta que el dato
se termine de enviar, para esto cambiamos al banco
de memoria 1 y esperamos hasta que el bit TRMT del
registro TXSTA se ponga en '1', esto indica que
la transmisión del dato ha terminado y es
posible transmitir un nuevo dato.
La subrutina de pérdida de tiempo se trata
de un pequeño retardo generado por un bucle
que tarda en ejecutarse un pequeño tiempo,
esta subrutina es utilizada después de que
se ha detectado la pulsación de una tecla,
con la finalidad de evitar los 'rebotes' de los
botones del teclado.
Modo de uso
Para comodidad del lector hemos desarrollado un
pequeño programa de computadora que le permitirá
visualizar lo datos que están siendo enviados
desde el microcontrolador hacia la computadora a
través del puerto serie, mismo que podrán
bajar de la página:
www.webelectronica.com.ar,
Debe usar la clave tecla223
Una vez que tenga su circuito armado, sólo
será necesario conectarlo al puerto serie
de la computadora utilizando el cable con los conectores
apropiados, así como también es necesario
instalar un software que le permita visualizar la
información que está recibiendo del
microcontrolador, como ya hemos comentado, hemos
diseñado un sencillo programa para este fin.
Una vez que tenga conectado su circuito a la computadora
debe encender la alimentación de su circuito
y ejecutar el programa Puerto Serie
que se encuentra en Inicio/PuertoSerie, posteriormente
haga click en el botón Conectar
para configurar las características de la
comunicación, si lo desea puede hacer click
en el menú Configuración
para cambiarlas, pero es importante que recuerde
que tanto el microcontrolador como la computadora
deben estar configuradas con las mismas características,
ya que si no es así no se podrá llevar
a cabo la comunicación.
Esperamos que este circuito sea práctico
para muchas de sus aplicaciones, y le pedimos que
siga pendiente a más desarrollos que tenemos
pendientes por mostrarles.
¡¡Hasta la Próxima!!
|