• No se han encontrado resultados

Capítulo 3 Programación de la red CAN

3.3 Bibliotecas de lenguaje C

3.3.2 Bibliotecas de usuario

Para complementar las funciones del compilador MikroC PRO, se crearon tres bibliotecas adicionales, las cuales controlan los siguientes módulos:

 Control de pantalla LCD

 Control para el reloj de tiempo real (RTC DS1307)  Ingreso de datos con teclado PS/2

Nota: El compilador MikroC cuenta con una biblioteca para el control de pantalla LCD y otra para el teclado de computadora PS/2; dichas bibliotecas se encuentran limitadas en cuanto a sus funciones, por esta razón fue necesario diseñarlas con las características requeridas tanto por la tarjeta maestra como por la tarjeta esclava.

3.3.2.1 Biblioteca para el control de pantalla LCD

Esta biblioteca permite seleccionar las terminales digitales con las que opera la pantalla LCD, tanto las señales de control como el bus de datos de cuatro líneas (ver sección 2.2.3 Módulo exhibidor de la TEC y esquemático completo en el apéndice A3). Además es posible escribir caracteres individuales y/o cadenas de datos (mensajes declarados por el usuario) en cualquier posición de pantalla.

La biblioteca para el control de pantalla LCD (ver código de programa en el apéndice A4) cuenta con cuatro funciones principales, estas son:

inicia_lcd: enciende y configura el modo de operación de la pantalla [17].  commando: envía comandos o una dirección especifica de pantalla  datos: escribe un carácter en una dirección especifica de pantalla  strings_displays: escribe una cadena de datos en pantalla

3.3.2.2 Control para el reloj de tiempo real

Esta biblioteca permite la configuración de los registros del dispositivo DS1307 así como su lectura. Cuenta con cuatro funciones principales, las cuales se describen a continuación:

Configura_rtc: permite configurar las terminales de entrada para el bus de comunicación I2C. Inicia los registros del dispositivo DS1307 (año, mes, día, hora, etc.) a una frecuencia de 100 [KHz].

Read_Time: esta función realiza la lectura de los siguientes registros: segundos, minutos, hora, día de la semana, día del mes, mes y año, y los almacena en memoria RAM.

Transform_Time: recibe las variables de la función Read_Time y las convierte a caracteres para facilitar su desplegado en la pantalla LCD.

Display_Time: recibe las variables de la función Transform_Time y las despliega en pantalla

3.3.2.3 Biblioteca para teclado PS/2

Esta biblioteca se basa en la comunicación teclado-microcontrolador y cuenta con tres funciones principales [22]:

inicia_teclado: configura las terminales del microcontrolador que se requieren para el funcionamiento del teclado (interrupción externa o señal de reloj, señal de datos y LED identificador de letras mayúsculas).

configura_int: inicia una interrupción externa del microcontrolador con la cual se detecta a la señal de reloj del protocolo PS/2 (ver sección 2.2.5 Teclado PS/2 y el código de programa en el apéndice A4).

get_letra: captura la trama de datos enviada por el teclado PS/2 cuando se presiona o se libera una tecla (ver sección 2.2.5.1 Descripción general del protocolo PS/2). El código de exploración para cada tecla (scan code), ya sea que ésta se presione o se libere, consiste en una trama de 11 bits. A continuación se describe cada uno de ellos:

 1 bit de inicio (siempre es 0)

 8 bits de datos. Los bits menos significativos se envían primero  1 bit de paridad

El teclado escribe un bit en la línea de datos cuando la señal de reloj se encuentra en un nivel lógico alto, dicho bit se puede leer cuando la señal de reloj se encuentra en un estado lógico bajo. Partiendo de esta afirmación, se podrá explicar la forma en la que se reconoce un código de exploraciónenviado por el teclado PS/2.

En la figura 3.2 se muestran las dos señales correspondientes al protocolo PS/2. Éstas se tomaron con ayuda del analizador de estados lógicos del programador/depurador PICkit 2 [28]. El canal 1 representa a la señal de reloj y el canal 2 muestra la señal correspondiente a la trama de 11 bits, ambas generadas por el teclado PS/2.

Figura 3.2: Señales del protocolo serial PS/2.

Tomando en cuenta que cada bit se lee cuando la señal de reloj se encuentra en estado bajo, se obtuvo la siguiente trama de datos:

Tabla 3.1: Trama de 11 bits correspondiente al make code de la tecla ENTER del teclado PS/2 de computadora.

El primer bit, comenzando desde la izquierda, representa el inicio de la trama, los siguientes cuatro bits corresponden al nibble bajo del byte de datos y los cuatro bits de color azul representan el nibble alto. Ya que los datos se envían del menos al más significativo, se obtuvo el valor 0x5A, que corresponde al make code de la tecla ENTER

[21]. El bit de color café representa la paridad y el último corresponde al bit de término de la trama, el cual siempre entrega el valor de 1.

La lógica de programación que debe seguirse para detectar un código de exploración es la siguiente:

1. La interrupción externa se configura para detectar un bit en su flanco de bajada (señal de reloj).

2. Una vez detectada la interrupción se realiza la lectura del bit de la señal de datos del teclado PS/2, la cual se encuentra conectada a la entrada digital elegida por el usuario (éste bit así como los bits subsecuentes se guardan en la memoria RAM del microcontrolador)

3. Cuando ocurra la siguiente interrupción, se tomará el bit menos significativo del

make code. La terminal seleccionada para la captura de los datos continúa aceptando los bits de la misma forma en que lo hizo con el bit de inicio.

4. En total deben generarse 11 interrupciones para poder capturar la trama completa. 5. Para saber si la tecla se ha liberado, el dispositivo generará un break code, el cual se

podrá detectar de la misma forma que el make code (pasos 1 a 4).

6. Una vez que el dato se ha leído y almacenado en memoria, éste se compara con una base de datos donde se encuentran los códigos de exploración, tanto de los comandos (ENTER, SHFT, CTRL, etc.) como de las letras y números.