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!!!