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.

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.

 
Por Alberto Robles Arenas
Trabajo supervisado por Ing. Ismael Cervantes de Anda
FIGURA 1
 
FIGURA 2
 
FIGURA 3
 
FIGURA 4
 
TABLA 1
 
MATERIALES
 
 
 
 
 
PROMOCIONES