Reloj en Tiempo Real - RTC

Reloj en Tiempo Real - RTC
Autor: EA3CNO - ANTONIO NAVARRO - BARCELONA
Basado en aplicacion DS-Maxim
_______________________________________________________________________

rtc_sup.jpg


General
En algunas aplicaciones de APRS como, por ejemplo, en la transmisión de datos meteorológicos, para poder disponer de la hora y fecha en la que se han tomado dichos datos, es necesario transmitir la información horaria dentro de la trama. El formato adoptado es @ dia / hora / minuto / z, en UTC.
Esta necesidad ha propiciado el diseño de este circuíto, a fin de utilizarlo con la estación meteorológica automática. La placa del circuito impreso tiene las medidas justas para poder alojarla dentro de la caja de la estación, junto a la pantalla LCD. Tal como aparece en la fotografía adjunta.
Los datos proporcionados por el RTC, son volcados al microcontrolador 16F876 y este se encarga de su tratamiento y su posterior salida a través del puerto serie. También son visualizados en la pantalla LCD de la estación.
El RTC (Reloj en tiempo real), se basa en el chip DS-1302 de Dallas Semiconductor. Este circuito que genera los impulsos a partir de un cristal de cuarzo de 32.768 KHz, tiene conectada una pila de litio de 3V, que en caso de fallo de alimentación mantendrá el reloj en hora. El circuito RTC esta controlado por un PIC 16F84, que se encarga de programar y leer los datos proporcionados por el DS-1302.

Montaje
El RTC está montado en una placa de circuito impreso, de 65 x 32 mm. Con dos esquinas cortadas a la medida de los soportes de la tapa. Todos los componentes están montados en una cara, excepto los pulsadores que se montan por el lado de las pistas. El detalle del montaje de los pulsadores aparece en la fotografia de la derecha.
El microcontrolador 16F84 se monta en zócalo y el DS-1302 directamente en la placa. Para realizar el montaje disponemos, en ficheros de formato .PDF, de la lista de componentes, el esquema eléctrico del circuito y la disposición de los conponentes en la placa.
Para realizar las conexiones se conectaran tres cables directamente a la placa de circuito impreso, rojo/negro para la alimentación, que se toma desde el "flat cable" de la pantalla LCD, rojo (+5V) del Pin-2 y negro (0V) del Pin-1. La salida de datos se hará a través de un cable amarillo que se conecta al Pin-4 del PIC 16F876 (Pin-1 de JP-2).
Antes de montar los componentes, la placa de circuito impreso se utilizará para marcar los taladros a efectuar en la tapa de la estación meteorológica. Se situará la placa en su posición y se atornillará a la tapa. En la placa y en el centro de la posición que corresponde a los pulsadores se encuentran unos pequeños agujeros. Con una broca de 1mm de diámetro y a través de los susodichos agujeros, debemos taladrar la tapa para marcar la posición exacta donde, a continuación y despues de retirar la placa, realizaremos los taladros correspondientes al diámetro de los pulsadores. De esta guisa los accesos a dichos pulsadores quedarán completamente centrados.

rtc_inf.jpg


Programas
Para el funcionamiento del RTC, se han escrito dos programas:

RTC_HORA.HEX - Programa para la puesta en hora del DS-1302. Cada vez que se desconecte la alimentación y vuelva a conectarse, se gravará en el DS-1302, la fecha y la hora que figura en la ultima revisión. Para que el chip mantenga la grabación, la pila de litio debe permanecer siempre conectada a la placa. Actualización:24/09/2006.
RTC.HEX - Mediante este programa se leerán los datos horarios actualizados proporcionados por el DS-1302.
Para la puesta en marcha del RTC, primero hay que cargar en el PIC 16F84 el programa RTC_HORA.HEX, una vez grabado, se verificará la fecha y la hora en la pantalla LCD, seguidamente y sin desconectar la pila de litio cargar en el PIC el programa RTC.HEX, con lo cual el módulo quedará operativo.

Operación
Para poder adelantar o retrasar el reloj, la placa dispone de tres pulsadores accesibles desde el panel frontal de la caja (P-1, P-2 y P-3). Mediante P-1 pueden adelantarse los minutos y mediante P-2 las horas, si se mantiene pulsado P-3, con P-1 y P-2 podrán retrasarse los minutos y las horas. Mientras se matiene pulsado P-3, el reloj está parado, lo que nos servirá para ponerlo en hora exacta.
Si ha ocurrido un fallo de alimentación, antes de poner en hora, pulsar P-3 para realizar un "reset" y después ajustar horas y minutos.
Para avanzar un dia, hay que situar el reloj a las 23:59 y esperar que automaticamente cambie el dia, si hay que avanzar muchos dias es mejor utilizar el programa RTC_HORA.HEX actualizado.

Agradecimientos:

ANTONIO NAVARRO (Autor)
Club Radio Aficionados Barcelona

Saludos.
 
mamu esta genial tu aporte

solo una cosa al principio hables del pic 16f876 y despues del pic16f84
por la fotografia creo que es el pic16f84
te agradeceria si lo puedes aclarar

chauuuu
 
El RTC es controlado por el 16F84, cuando se hace mención al 16F876 se esta hablando del circuito principal al cual se aplico el circuito RTC, compuesto por el DS y el 16F84. La salida de la fecha en formato serial, puede ser aplicada al circuito que se este diseñando y que este lo requiera.

Saludos.
 
HOla, diculpa mi atrevimiento, pero necesito hacer un sistema con un DS1302 y la parte del manejo de este con el Pic 16f84 me vendia de 10, me pasarias el asm ? GRACIAS !!
 
seria bueno una explicacion en pic 16f877 para el manejo de este reloj en tiempo real
y en asm.

mamu disculpas por el pedido tal vez es muy excesivo.
saludos y gracias
 
Hola! Muy bueno tu aporte!
Pero si no es mucho pedir... sería como la guinda de la torta si publicaras el ASM también...
Hace tiempo que estoy manoseando el DS pero no e ha resultado sacarle los datos con el PIC...

Gracias!
 
Hoola denuevo!
Oye, ya, parto preguntando, alguien tiene un ASM que saca los datos de la memoria del DS1302? Es que ya estoy casi meses quiebrándome la cabeza con esto y no, no y no sale nada. A veces mi programa para esto alcanza a hacer tonteras, pero nada más.

En todo caso, esto puede ser culpa del simulador que uso, que es el PROTEUS. No lo he probado en la realidad, pero la verdad es que al mismo tiempo también me da lata grabar un PIC una y otra vez hasta que funcione. (o hasta que el PIC muera).
Te agradecería harto si pudieras publicar tu ASM, o a lo menos la parte que extrae la información del DS.

Saludos!
 
Hoooola! Les tengo nuevas!! Lo he logrado. Les publicaré el ASM que hice aquí. Después de una buena cantidad de pruebas de ensayo-error logré leer cualquier cosa del DS1302. Además les subiré el circuito simulado en PROTEUS. Por cierto, lo que les subiré, es lo más simple al respecto. O sea, la simulación del circuito está hecha en basea LEDs y nada más, para que seasencillo visualizarlo. Ahora sin más, aquí vatodo:

Código:
STATUS	EQU	0x03
PORTA	EQU	0x05
PORTB	EQU	0x06
TRISA	EQU	0x85
TRISB	EQU	0x86

W		EQU	0
F		EQU	1
RP0		EQU	5
Z		EQU	2
C		EQU 0

IO		EQU 2
RST		EQU 0
SCLK	EQU 1

SEGUNDO	EQU 0x0C
MINUTOS	EQU 0x0D
HORAS	EQU 0x0E
DIA		EQU 0x0F
MES		EQU 0x10
ANO		EQU 0x11

DATO	EQU	0x12
CONT	EQU	0x13

	bsf		STATUS,RP0
	movlw	B'00000000'
	clrf	TRISA
	movlw	B'00000000'
	movwf	TRISB
	bcf		STATUS,RP0

	clrf	PORTA
	clrf	PORTB
	movlw	D'8'
	movwf	CONT

	movlw	0x8E			;Comando Escritura a dirección 07
	call	ENVIAR_DATO		;Llamar rutina enviar.
;Aquí "ENVIAR_DATO" también se puede usar para enviar un comando.
	movlw	0x00			;Deshabilitar WriteProtect
	call	ENVIAR_DATO
	bcf		PORTA,RST		;Terminar comunicación

	movlw	0x83			;Comando leer minutos
	call	ENVIAR_DATO
	movlw	D'7'
	movwf	CONT
	call	RECIBIR_DATO
	movwf	MINUTOS

	movwf	PORTB

	goto	FIN

ENVIAR_DATO
	movwf	DATO
	bsf		STATUS,RP0		;Setear IO como salida
	bcf		TRISA,IO
	bcf		STATUS,RP0
	bsf		PORTA,RST		;Entablar comunicación
ENVIANDO
	bcf		PORTA,IO		;Apagar IO
	btfsc	DATO,0			;Si DATO,0 es 1, entonces
	bsf		PORTA,IO		;poner IO en 1
	bsf		PORTA,SCLK		;Un Clock
	bcf		PORTA,SCLK
	rrf		DATO,F			;Rotar DATO hacia la derecha
	decfsz	CONT,F			;Decrementa CONT y salta si es 0
	goto	ENVIANDO		;Volver si CONT no era 0
	movlw	D'8'			;Redefinir contador
	movwf	CONT
	return		;No olvidar resetear comunicación manualmente.

RECIBIR_DATO
	bsf		STATUS,RP0		;Setear IO como entrada
	bsf		TRISA,IO
	bcf		STATUS,RP0
	bsf		PORTA,RST		;Entablar comunicación
RECIBIENDO
	bcf		DATO,0			;Resetear DATO,0
	btfsc	PORTA,IO		;Si IO es 1, entonces
	bsf		DATO,0			;poner DATO,0 en 1
	bsf		PORTA,SCLK		;Un Clock
	bcf		PORTA,SCLK
	rlf		DATO,F			;Rotar DATO a la izquierda
	decfsz	CONT,F			;Decrementa CONT y salta si es 0
	goto	RECIBIENDO		;Volver si CONT no era 0
	bcf		PORTA,RST		;Terminar comunicación
	movlw	D'7'			;Redefinir contador
	movwf	CONT
	movf	DATO,W			;Enviar DATO recibido a W
	return
	
FIN
	goto	FIN

END

O sea, esto es básicamente lo mismo que sale en el tutorial de más arriba, pero creo que esto es un poco más fáil de entender. Así como está, pueden copiarlo al MPLAB, compilarlo y simularlo en el PROTEUS.

Saludoos!
 

Adjuntos

  • ds1302_127.zip
    7.8 KB · Visitas: 891
buenas alguien me podría ayudar con el uso de el ds1302 quisiera implementarlo en mi tesis pero no tengo idea de como funciona a la hora de sacar la información.

agradecería si me pudiesen ayudar
 
Atrás
Arriba