CONTROL
DE UN TECLADO MATRICIAL CON UN PIC
Y ENVIO DE DATOS A TRAVES DEL PUERTO SERIE DE UNA
PC
|
|
En algunas aplicaciones con microcontroladores,
puede que sea necesario transmitir alguna información
desde un microcontrolador hacia una computadora PC,
y dependiendo de la aplicación puede que resulte
ser conveniente utilizar un pequeño teclado
para indicar cuál es esa información
que se tiene que enviar, por ejemplo una clave que
tenga que ser verificada o un comando que indique
el inicio de un proceso, o simplemente la captura
de algún dato importante. En este artículo
se explicará cuáles son los pasos que
hay que seguir para enviar datos a una computadora
PC, mediante un microcontrolador que controla un teclado
matricial. |
|
|
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.
|
|
|
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. |
|
|
-
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.
|
|
-
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.
|
|
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.
|
|
|
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. |
|
Por
Alberto Robles Arenas
Trabajo supervisado por Ing. Ismael Cervantes
de Anda |
|
|
|
|