Inicio Componentes Control del tiempo

Control del tiempo

Alexandru Valeanu, de Microchip Technology, explica cómo utilizar un reloj y calendario en tiempo real para implementar un reloj electrónico el que se puedan ajustar la hora y la fecha con dos botones
Se puede construir un reloj electrónico en el que se puedan ajustar el visualizador, la hora y la fecha utilizando dos pulsadores junto con un reloj y calendario en tiempo real (real-time clock and calendar, RTCC) e incorporando EEPROM, SRAM, registro temporal con identificación única, un temporizador supervisor y un módulo detector de eventos. Un dispositivo de este tipo es el MCP795WXX SPI RTCC de Microchip y el proyecto se puede realizar en una tarjeta de demostración PIC18 Explorer utilizando sus recursos integrados, como el LCD accesible a través de un bus SPI y los pulsadores. La Fig. 1 muestra el esquema, incluyendo una PIC18 Explorer y la tarjeta hija AC164147 SPI RTCC PICtail. Para acceder al LCD con un número mínimo de patillas, el SPI del módulo MSSP1 se utiliza con un ampliador de E/S de 16 bit con interface SPI (MCP23S17). Los dos pulsadores incorporados son S1 y S2, conectados a las GPIO RB0 y RA5. El SPI RTCC forma parte de la tarjeta de evaluación PICtail y se conecta directamente al módulo MSSP1 del microcontrolador.
Otra conexión necesaria es entre la señal CLKOUT del RTCC y RA4 (T0CKI), la entrada de reloj de TMR0. El RTCC se programa para ofrecer una onda cuadrada de 1 Hz en CLKOUT. El TMR0 se programa como contador y se inicializa en 0xFFFF para proporcionar una interrupción de software cada segundo. Las conexiones SPI entre el SPI RTCC y el microcontrolador no son de drenador abierto y, por tanto, no se utilizan resistencias elevadoras (pull-up). Las conexiones secundarias son salidas o entradas de drenador abierto y necesitan resistencias elevadoras. La señal CLKOUT va a RA4/T0CKI sin elevación y puede programarse para ofrecer frecuencias de 1 Hz, 4 kHz, 16 kHz y 32 kHz. El microcontrolador 8F87J11 se monta en el PIC18 Explorer.
El código para los controladores y la función principal se pueden escribir en C utilizando MPLAB X v2.10 y el compilador XC8 v1.34. De esta forma se puede implementar un reloj electrónico que visualice las seis variables básicas de hora y fecha en el LCD incorporado. Éstas son: año, mes, día, hora, minutos y segundos. Incluye una secuencia de configuración que ajusta las mismas seis variables de hora y fecha utilizando los dos pulsadores de la tarjeta de evaluación; S1 es la tecla del menú y S2 la tecla de incremento. Al mismo tiempo, el código indica al usuario cómo configurar y utilizar los registros de mantenimiento de tiempo.
Cómo funciona
El MCP795WXX es un dispositivo esclavo SPI conectado al bus SPI del microcontrolador. La selección de chip del RTCC se controla con la patilla GPO. El dispositivo se selecciona llevando CS a nivel bajo y a continuación se transmite la instrucción de lectura de 8 bit al MCP795WXX seguida de una dirección de 8 bit. Tras enviar la instrucción de lectura y dirección correcta, los datos almacenados en la memoria de la dirección seleccionada se desplazan en la patilla SO. Los datos almacenados en la siguiente dirección de memoria se pueden leer secuencialmente proporcionando los pulsos de reloj de manera continua. El puntero de dirección interna se incrementa automáticamente a la siguiente dirección más alta tras desplazar cada byte de datos. Como los registros de RTCC están separados de la matriz SRAM, al leer el conjunto de registros de RTCC la dirección se volverá a colocar al inicio de los registros de RTCC. También cuando se carga una dirección de la matriz SRAM, el puntero de dirección interna volverá al principio de la matriz SRAM.
La instrucción de lectura se puede utilizar para leer las matrices SRAM indefinidamente al seguir suministrando señal de reloj al dispositivo. La operación de lectura finaliza poniendo la patilla CS en nivel alto. La secuencia de propagación se muestra en la Fig. 2. Para escribir, como los registros RTCC y SRAM no necesitan la secuencia WREN como la EEPROM, el usuario puede ajustar CS en estado bajo, enviar la instrucción de escritura seguida de la dirección y a continuación los datos a escribir. Como no se requiere ningún ciclo de escritura para los registros del RTCC y la SRAM, se puede escribir toda la matriz en una sola instrucción. Para escribir los datos en la matriz se debe llevar CS a nivel alto tras haber registrado un byte completo.
Si CS pasa a nivel alto en cualquier otro momento, el último byte no se escribirá. La Fig. 3 ilustra con mayor detalle la secuencia de escritura. Las dos funciones principales del reloj electrónico consisten en visualizar las seis variables de hora y fecha utilizando las interrupciones del microcontrolador y ajustando las variables con los dos pulsadores de la tarjeta. La operación de visualización se realiza en el LCD de la tarjeta; el formato es de 24 horas. La visualización de las variables en tiempo real se obtiene siempre que la tecla de menú no esté presionada. La acción de la tecla de incremento no tiene efecto en el reloj que muestra continuamente la hora y la fecha. Pulsando la tecla de menú se inicia el menú de configuración y se deshabilitan las interrupciones. El menú cubre por este orden el año, mes, día, hora, minutos y segundos. Para ir de una variable a otra se emplea la tecla de menú y la variable se incrementa mediante la tecla de incremento. La última acción de la tecla de menú es salir del menú de configuración. Al entrar en el menú de configuración no se detiene el oscilador del RTCC. Al finalizar la configuración se actualizan las variables de hora y fecha. Si el usuario entra en el modo de configuración de hora, todas las variables se escriben en el RTCC al final de la secuencia, aunque no se hayan cambiado. En este caso, cuando se sale del menú el reloj seguirá contando a partir del punto de entrada en la configuración.
Retardos y controladores
Dado que el controlador del LCD necesita algunos retardos para procesar las instrucciones, se crearon algunos retardos auxiliares. Se utilizan retardos largos para eliminar el rebote del teclado o como retardos de aplicación general. Los controladores de LCD manejan datos, instrucciones y cadenas cuando se introducen en el LCD. Las funciones de alto nivel del LCD inicializan o muestran la fecha y hora en el LCD. La biblioteca también incluye las variables globales de hora y fecha.
Los controladores del RTCC representan las comunicaciones de nivel medio entre el módulo MSSP1 del PIC18 y el SPI RTCC. Las funciones relacionadas recurren a los controladores de SPI. Además, la biblioteca define todas las constantes necesarias como registros, direcciones y máscaras. Los controladores de SPI proporcionan las comunicaciones SPI de bajo nivel con el RTCC y sus funciones son utilizadas por los controladores de SPI RTCC. El conjunto de controladores del teclado tienen una sola función. Espera la selección de uno de los dos interruptores incorporados: tecla de menú o incremento.
Tras realizar la selección, el firmware actualiza el código de la tecla pulsada. Al salir de la función se obtiene un valor y la función elimina el rebote de la tecla dos veces durante 100 ms. La función se desactiva únicamente tras soltar la tecla pulsada. Las interrupciones se generan por el desbordamiento de TMR0, que se inicializa en 0xFFFF como un contador. El temporizador Timer 0 se incrementa una vez por segundo con la señal CLKOUT procedente del RTCC.
La función de interrupción recurre a la función de hora visualizada, que lee los seis registros relacionados del RTCC y los coloca en las seis variables globales (año, mes, día, hora, minuto y segundo). Se emplea el modo aleatorio de acceso de byte ya que algunas versiones de la aplicación pueden utilizar solo algunas de estas seis variables. Al final, la función de interrupción visualiza estas seis variables en el LCD de la tarjeta.
Configuración
La configuración del RTCC está constituida por dos etapas: inicialización del RTCC y ajuste de registros de mantenimiento de tiempo. Para inicializar el SPI RTCC, la cabecera de los controladores de SPR RTCC incluye dos funciones de inicialización. La primera función habilita la batería a través del bit VBATEN en el registro de día, para ajustar el registro de control que deshabilita las alarmas y para ajustar la patilla MFP como onda cuadrada con una frecuencia de 1 Hz. La segunda función comprueba el bit OSCON (registro de día). Si el oscilador ya está en funcionamiento no se realiza ninguna acción. Si el oscilador no está funcionando, la hora y la fecha se establecen de forma arbitraria y se pondrá en marcha el oscilador. Para ajustar los registros de mantenimiento de tiempo se puede encontrar la secuencia al final de la función principal y se actualizan los seis registros de hora y fecha a través de las seis variables de hora y fecha. El uso de los registros de mantenimiento de tiempo consiste en leerlos y visualizarlos en el LCD. Estas dos operaciones se realizan mediante la función de tiempo de visualización una vez por segundo en las interrupciones. Hay dos funciones básicas para acceder a los registros RTCC: una para escrituras y otra para lecturas. Ambas utilizan direcciones de registro dentro de la zona SRAM del SPI RTCC. En función de estas direcciones, en las funciones básicas de lectura y escritura solo se diferenciarán las direcciones de registro. Las lecturas se utilizan en la función de interrupción. Las escrituras se utilizan en la función de inicialización y en la secuencia de configuración.

Conclusión

Este artículo ha explicado cómo controlar, visualizar y configurar un reloj electrónico basado en el MCP795WXX SPI RTCC de Microchip. El proyecto se ha realizado utilizando los recursos de la tarjeta de demostración PIC18 Explorer. El código se escribió en C y el microcontrolador utilizado fue el PIC18F87J11.
 

Etiquetas
control de tiempo