Duda con reloj con DS1307, pic 16f628 y LCD

Hola:

Puedes ver el código fuente en estos ejemplo.
Fig2403_DS1307.gif


Fuente:
http://www.pic16f84a.org/index.php?...w=article&id=66&Itemid=87#Proteus_Capitulo_24

Saludo.
 
y por cierto, ahora ya lo tengo montado, pero sabeis como hacer para que al pasarlo al ares te conecte las patillas de masa y alimentacion del pic, ya que en el ISIS las omite¿?¿?UN saludo
 
buenas a todos.
Estoy realizando un reloj despertador con ds1307, lcd y el pic16f628a, tengo el programa y el hardware, pero tengo un problema al momento de cambiar por medio de pulsadores la hora o los minutos.
Cuando el programa arranca, pide que se le ingresen tanto la hora como los minutos, luego de que el usuario ingresa los valores y los guarda, el programa escribe esos datos en los registros correspondientes del ds1307, y aqui viene el problema, si la hora o los minutos son valores menores a 10, el programa los guarda correctamente, pero, si los valores de hora o minuto son iguales o mayores a 10 entonces el programa escribe esos datos incorrectamente, graba "010" en lugar de guardar "10" nada mas, eso me provoco un error en la visualizacion de la hora o minuto transcurrido los 60segundos despues de haber guardado los datos de hora o minuto.

tengo entendido que los datos que se guardan en los registros del ds1307 no pueden ser en decimal, sino en bdc .

aqui les dejo la parte del codigo donde hago la escritura de los datos.

; ************************ subrutina grabar *********************
grabarRTC:
lcdout $fe,$80,"H:" ;pide que se ingrese la hora
lcdout $fe,$C0,"M:" ;pide que se ingrese los minutos
IF U=0 THEN ;u es un pulsador
PAUSE 300
HORA=HORA+1 ; hora es una variable tipo byte para capturar el dato que el usuario ingresa
IF HORA>23 THEN HORA=0
LCDOUT $fe,$82, dec2 HORA ;muestra la hora en el lcd que el usuario esta ingresando
ENDIF
IF M=0 THEN ; m es un pulsador para poder guardar el dato capturado
PAUSE 200
GOTO MI
ENDIF
GOTO GRABARRTC
MI:

IF U=0 THEN ; ahora se hace el ingreso de los minutos
PAUSE 300
MINU=MINU+1
IF MINU>59 THEN MINU=0
LCDOUT $fe,$C2, DEC2 MINU
ENDIF
IF M=0 THEN ESCRIBIR
GOTO MI

ESCRIBIR: ; aqui es el probrema
I2CWRITE DPIN,CPIN,%11010000,0,[$00] ;setear 00 segundos
PAUSE 10 ;retardo para finalizar grabación
I2CWRITE DPIN,CPIN,%11010000,1,[MINU] ; minutos
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,2,[HORA] ; horas
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,3,[$7] ;setear día lunes, D=1,L=2
PAUSE 10 ;M=3, M=4, J=5, V=6, S=7
I2CWRITE DPIN,CPIN,%11010000,4,[$27] ;setear día 27 del mes
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,5,[$12] ;setear mes
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,6,[$04] ;setear año 04
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,7,[$10] ;control %00010000 para
PAUSE 10 ;encender el led cada 1 seg.
WRITE 0,1 ;escribe en la memoria 0 el valor de 1 para que no
;se vuelva a grabar otra vez estos datos en el RTC
GOTO inicio ;ir a presentar los datos en el LCD

como ven, para setear el dato desde la programacion se lo hace con $xx , donde xx es el valor que se ingresa, pero al momento de escribir el contenido de una variable tipo byte en los registros de hora o minuto se guarda mal cuando es mayor a 10...
les agradeceria me ayuden con ese pequeno detalle

gracias/
 
Hola yo hice este circuito y todavia no me funciona despues de tres intentos. Realice la versión del libro "Microcontrolador PIC16F84 Desarrollo de proyectos" pag. 373 pero en el ultimo diseño que hice reemplace la parte del ds por una placa Tiny RTC con el ds1307 y una pequeña memoria pero lo termine de soldar anoche y no dio señal de vida. Creo que es mi display el que dejo de funciona esta vez, pero bueno a unos de mis compañeros les funciono pero no configuraba bien la hora o no contaba los segundos.
Alguno de ustedes llego a hacer esta versión? hay algo que me quieran recomendar para enderazar mi turbulento y oscuro camino a traves de esta amada Electrónica?
 
Les recomendario utilizar codeflow5 ya que en el programa se hace facil y constante.
Referente a tu sistema debes recordar que los RTC utilizan hora de 12 o militar ,posiblemente no enviaste el registro para que sea o no militar ,tal vez por eso te ajusta con un cero por delante porque los 10 que tu envias es 01 horas del dia
 
Atrás
Arriba