Un RTC de propósito general

Un RTC es un circuito que trae integrado un reloj con la capacidad de actualizar sus registros en tiempo real [Real Time Clock].

Entre sus registros podemos encontrar los segundos, minutos,horas, dia de la semana,

dia del mes y año, ademas de registros de control para leer y escribir los registros antes mencionados.

En circuito que ahora nos interesa es el RTC DS1302, que viene encapsulado en DIP de 8 terminales

y ademas tiene 30 registros adicionales de proposito general.

Es posible utilizar este RTC con una pila de respaldo o un capacitor, ya que tiene incluido un pequeño

circuito de carga.

Los registros de este chip pueden leerse en forma individual o en forma secuencial.

En forma individual, debemos enviar la dirección del registro y esperar a leer el dato correspondiente.

En forma secuencial enviamos comando de lectura y leemos hasta 8 registros en forma consecutiva.

Empezando por Segundos, luego Minutos, Horas, Dia del mes , Mes, Dia de la Semana, Registro de

proteccion.

Como mejora para proyectos posteriores, solo introduciremos el código correspondiente al manejo

del RTC.

La fecha y hora actual se definen en la tabla dstime y la primera vez que corremos este programa,

este pone en la memoria adicional una firma que termina con un punto.

Para que en ocaciones sucesivas al correr el programa o encender el sistema, si encuentra que hay

un punto en la ultima localidad de memoria, es que ya esta programada la fecha y hora y solo nos

interesa leer los registros del chip.

Para leer los registros de este chip necesitamos definir 3 señales;

#define CE PORTB,5 ;Chip Enable

#define DIO PORTB,6 ;Data I/O

#define SCLK PORTB,7 ;Serial Clock

Ademas de ello definimos una rutina de tiempos de 1/14400 para poder utilizarla como interrupción.

La rutina sencom [send coommand], es la rutina encargada de enviar al chip la direccion de lectura

o escritura o el comando de lectura o escritura en modo secuencial.

La rutina sendata es la encargada de enviar datos al chip, ya sea en forma individual o secuencial.

La rutina readb es la encargada de leer los datos desde el chip, ya sea en forma individual o

secuencial.

El programa define un espacio de memoria para almacenar los datos recibidos desde el chip.

En este caso de define el segmento de memoria desde 0xA0 hasta 0xA7 como el buffer para recibir

los datos del chip.

Quedando los segundos en la direccion 0xA0

los minutos en 0xA1

las horas en 0xA2

el dia del mes en 0xA3

el mes en 0xA4

el dia de la semana en 0xA5

y el año en la direccion 0xA6

y el registro de proteccion en 0xA7

Para mas informacion acerca de como esta definidos los registrso anteriores ver el datasheet del

integrado DS1302

Para simplificar el programa utilizaremos para leer la fecha y hora el modo secuencial y para

escribir registros, el modo individual.

La idea para realizar este proyecto es que tenia disponibles las lineas de programación del PIC,

por lo que me parecio interesante desarrollar un proyecto que utilizara estas lineas del PIC.

Con esto el circuito quedo extrno a la tarjeta principal y le da la mejora del RTC

Por lo tanto el proyecto minimo requiere de las rutinas de comunicación con el chip contenidas en

el archivo dsRam.inc, el cual tiene un tamaño menor a una pagina [menor a 256 lineas].

Y la rutina que realiza la llamada a las funciones que leen los datos desde el rtc es:

clrf void ;limpiamos contador

bsf burstm,7 ;mode Burst On

movlw rtcram ;Espacio Ram para

movwf FSR ;almacenar datos del DS1302

movlw 0xBF ;Lee dato en modo Burst

gone movwf temp ;Envia

call sencom ;comando Burst

call readb ;leemos datos

clrf burstm ;limpia variable burstm

y ya tenemos los datos del RTC en memoria Ram desde A0 hasta A7

En la imagen se puede observar que el contenido del RTC ha sido copiado al espacio RAM definido desde A0 hasta A7

Después de un poco de procesamiento, se puede ver que en el espacio RAM parea una pantalla LCD se puede ver la fecha y hora en un formato mas entendible.

El espacio RAM desde 0x03 hasta 0x40 esta definido como espacio para una pantalla de cristal líquido o LCD

En la siguiente foto se puede observar como se veria en una pantalla de LCD los datos guardados en RAM para la LCD

Imagen del RTC en una pantalla LCD serial AC152 con espacio para la fecha y hora.

En la seccion de archivos esta el archivo requerido para la lectura y escritura de un rtc DS1302.

Pronto subire el codigo completo del proyecto que se ve en la pantalla de LCD.

Saludos!!!