Autor Tema: ayuda Reloj DS1307  (Leído 8771 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado remi04

  • PIC24F
  • *****
  • Mensajes: 657
Re:ayuda Reloj DS1307
« Respuesta #15 en: 07 de Octubre de 2020, 19:24:39 »
Hola,

Referente al circuito, solo una cosa, deberías de bajar las resistencias de pull-up de las líneas SDA y SCL a unos 4k7.
Por otra parte por lo que indicas en tus post, veo que el circuito lo inicializas al comienzo del programa. Niple, a través del bus I2C escribe los datos configurados en el reloj. Cuando desconectas la alimentación el reloj debe de seguir funcionando y creo que lo hará.
El problema creo que radica es que cuando regresa la alimentación, tu programa vuelve a comenzar desde el inicio y por tanto vuelve a inicializar el reloj, pero con los valores pre-ajustados en el primer bloque de inicializar el reloj al comienzo del programa.

Lo que creo que deberías de realizar es lo siguiente:
1º La primera vez que inicialices el reloj pongas un determinado valor en un registro y lo guardas en la memoria eeprom del pic.
2º Cada cierto tiempo leer los valores del reloj y guardarlos o bien en una eeprom externa o en en la memoria EEprom  del pic.
3º Modificar tu programa principal de forma que lo primero que realices es comprobar el valor del registro del punto 1º (por tanto leer la memoria EEprom). Con esto compruebas si esta inicializado el reloj y si lo está entonces lees los datos del reloj que habías almacenado en la eeprom.
4º Comprobar si los datos leídos de la eeprom se corresponden con los del reloj y si son distintos, entonces escribes los valores (los guardados en la eeprom) en el reloj.

Espero que me hayas entendido.

F.

 El punto 4 no se va a cumplir nunca por que si tú lees el calendario y lo salvaguardas en una eeprom, si apagas ahora y enciendes mañana no te va a coincidir nada. Ni es la misma hora, ni los mismos segundos, minutos, día, etc..   

   Lo que planteas en verdad va por buen camino, pero no hace falta usar eeprom ni nada sino la propia ram que el ds1307 dispone para ser usado a libre disposición del programador.  Creo que tiene unos 50 bytes que empiezan en la dirección 0x09.

  Yo lo que hago es coger tres posiciones de esta memoria y asignarles 3 valores distintos, por ejemplo un 15, un 100 y un 245.   Entonces, el programa principal cuando arranca lee estas tres posiciones primero y comprueba que sean 15,100 y 245. Si es así, los datos del rtc son válidos, si no, toca volver a grabar todo el calendario y de nuevo estas tres constantes.  Es que es la única forma de saber si el contenido del rtc es válido o si se ha perdido o dañado por que no hay pila backup, o se ha descargado, o está baja de tensión, etc.  No es posible comparar el calendario ni tirarle un checksum al mismo por que el calendario está en constante cambio. Con su batería el rtc sigue manteniendo la hora al día..

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #16 en: 07 de Octubre de 2020, 20:32:41 »
Gracias Amigo por sus comentarios...

pero como accede a la Flash / ram del ds1307, no veo esa opción en el entorno de programa?

voy a ver la hoja tecnica del DS1207 a ver que dice, mientras hice una prueba en proteus, con la foto que mostre antes y da error..

igualmente pienso, que los despertadores con 7 seg, tengo un micro hondas, y varios electrodomesticos, cuando se corta la energia el reloj vuelve a 00,  no debe ser muy simple!

Gracias continuo trabajando en ello.
 

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:ayuda Reloj DS1307
« Respuesta #17 en: 08 de Octubre de 2020, 01:33:43 »
Hola,
He mirado el datasheet del reloj y no veo por ningún lado que disponga de registros EEPROM.
Solo tiene una pequeña cantidad de registros del tipo SRam que debería de mantener sus valores con el uso de la pilaa y el cristal.
Por eso sí dispones de memoria a suficiente en el Pic empleado a consejería implementar un sistema como el indicado en el post anterior.
Remi: tienes toda la razón en lo que planteas, mi suposición era.porque supuse que el funcionamiento del sistema es de forma continua. Lo ideal es trabajar con los registros de la RAM interna

Rghugo; cuando le das a inicializar el reloj ya se deben de guardar los valores en la RAM. No obstante por seguridad, una vez inicializado puedes añadir el bloque de escribir y listo, con eso bastaría.
F.
« Última modificación: 08 de Octubre de 2020, 01:41:22 por Fer_TACA »
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #18 en: 08 de Octubre de 2020, 07:49:19 »
Gracias Amigo por sus comentarios...

pero como accede a la Flash / ram del ds1307, no veo esa opción en el entorno de programa?

voy a ver la hoja tecnica del DS1207 a ver que dice, mientras hice una prueba en proteus, con la foto que mostre antes y da error..

igualmente pienso, que los despertadores con 7 seg, tengo un micro hondas, y varios electrodomesticos, cuando se corta la energia el reloj vuelve a 00,  no debe ser muy simple!

Gracias continuo trabajando en ello.


Amigos buen dia,


estuve analizando y creo que hay un error...

interpreto lo siguuiente..

1- crear una rutina donde el pic pone el reloj en fecha / hora...

2- reprogramar, donde la rutina ahora debe compara los registros "variables" de eeprom pic con sram del reloj.

aqui es a donde veo un error, pues en mi caso no contemplo segundos, pero si pasa mas de 1 minut, ya va a encontrar diferencias, por otro lado segun las pruebas que hice, la primea instruccion para que funcione reloj, debe ser INICIALIZAR,  si arrancas con leer o escribir, no se comunica con  el relloj, con lo cual no puede comparar registros.

disculpen, no se si me explico...

hice diferentes pruebas  inicializando directamente lectura del reloj y no me funciono, la pila y demas funcionan OK!, pues en las diferentes pruebas siempre comprobe que el reloj cambia sus datos, cuando le sacas la pila o el controlador envia la instruccion...

Gracias por la ayuda, sigo trabajando en el tema..




Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:ayuda Reloj DS1307
« Respuesta #19 en: 08 de Octubre de 2020, 12:45:19 »
Lo de inicializar el reloj al comienzo eso es correcto.

Lo que se ha indicado es que de alguna manera se programe un sistema, guardar algún dato en un registro por ejemplo, de forma que al regreso de la alimentación se compruebe ese valor y si coincide significaría que el reloj esta bien. en caso contrario se debe reinicializar de nuevo.
Una buena forma para realizar esto ultimo con Niple es activar la casilla de que se inicialice con la fecha actual al compilar.
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #20 en: 08 de Octubre de 2020, 13:47:44 »
Lo de inicializar el reloj al comienzo eso es correcto.

Lo que se ha indicado es que de alguna manera se programe un sistema, guardar algún dato en un registro por ejemplo, de forma que al regreso de la alimentación se compruebe ese valor y si coincide significaría que el reloj esta bien. en caso contrario se debe reinicializar de nuevo.
Una buena forma para realizar esto ultimo con Niple es activar la casilla de que se inicialice con la fecha actual al compilar.

disculpen, posiblemente no estoy entiendo la idea...

si genero un registro para comparar cuando vuelva la alimentacion,  seguramente NO van a coincidir los valores nunc, pues el reloj avanza siempre...

o estoy interpretando mal?


Gracias

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:ayuda Reloj DS1307
« Respuesta #21 en: 08 de Octubre de 2020, 14:12:11 »
...
   Lo que planteas en verdad va por buen camino, pero no hace falta usar eeprom ni nada sino la propia ram que el ds1307 dispone para ser usado a libre disposición del programador.  Creo que tiene unos 50 bytes que empiezan en la dirección 0x09.

  Yo lo que hago es coger tres posiciones de esta memoria y asignarles 3 valores distintos, por ejemplo un 15, un 100 y un 245.   Entonces, el programa principal cuando arranca lee estas tres posiciones primero y comprueba que sean 15,100 y 245. Si es así, los datos del rtc son válidos, si no, toca volver a grabar todo el calendario y de nuevo estas tres constantes.  Es que es la única forma de saber si el contenido del rtc es válido o si se ha perdido o dañado por que no hay pila backup, o se ha descargado, o está baja de tensión, etc.  No es posible comparar el calendario ni tirarle un checksum al mismo por que el calendario está en constante cambio. Con su batería el rtc sigue manteniendo la hora al día..

De lo que se trata es de realizar una cosa como la que te ha indicado otro usuario y que te vuelvo a adjuntar al inicio de este post.

No obstante voy a ver como se puede grabar datos en la ram desde Niple.

F.
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #22 en: 08 de Octubre de 2020, 15:30:09 »
...
   Lo que planteas en verdad va por buen camino, pero no hace falta usar eeprom ni nada sino la propia ram que el ds1307 dispone para ser usado a libre disposición del programador.  Creo que tiene unos 50 bytes que empiezan en la dirección 0x09.

  Yo lo que hago es coger tres posiciones de esta memoria y asignarles 3 valores distintos, por ejemplo un 15, un 100 y un 245.   Entonces, el programa principal cuando arranca lee estas tres posiciones primero y comprueba que sean 15,100 y 245. Si es así, los datos del rtc son válidos, si no, toca volver a grabar todo el calendario y de nuevo estas tres constantes.  Es que es la única forma de saber si el contenido del rtc es válido o si se ha perdido o dañado por que no hay pila backup, o se ha descargado, o está baja de tensión, etc.  No es posible comparar el calendario ni tirarle un checksum al mismo por que el calendario está en constante cambio. Con su batería el rtc sigue manteniendo la hora al día..

De lo que se trata es de realizar una cosa como la que te ha indicado otro usuario y que te vuelvo a adjuntar al inicio de este post.

No obstante voy a ver como se puede grabar datos en la ram desde Niple.

F.

clraro, desde Niple No se puede hacer, pues si se pudiera inicializar leyendo, es decir cargar la libreria de RTC, pero solo leer por el bus I2C, estaria solucionado, pues seria la primera instruccion, cargaria los registros y todo estaria bien hasta perder la carga de la pila... pero esto no se puede pues el compilador no lo toma, no carga la libreria de rtc, con lo cual NO lee nada...

a esto ya lo probe.... inclusive probé editando desde MPLAB.... sin resultados..

gracias por la ayuda..

Sds


Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:ayuda Reloj DS1307
« Respuesta #23 en: 08 de Octubre de 2020, 15:41:40 »
No desesperes que vamos a ver como se podria realizar.
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #24 en: 08 de Octubre de 2020, 15:48:27 »
No desesperes que vamos a ver como se podria realizar.

Muchas graciass



Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:ayuda Reloj DS1307
« Respuesta #25 en: 09 de Octubre de 2020, 06:56:46 »
Hola,
Despues de realizar la consulta con Niple esto es lo que nos indican acerca del funcionamineto del modo de programacion del reloj.

Uno de los bits de configuración del reloj (bit nro 7) indica si el reloj esta inicializado o no.

El bloque de Niple de configuración del reloj lo primero que hace es leer ese bit a ver si el reloj ya esta en marcha y lo inicializa solo si el reloj no esta inicializado.
Si detecta que ya esta funcionando el reloj no lo inicializa.

Esa es la diferencia entre los bloques “inicializar” y “escribir”.
La funciona Escribir sobrescribe valores sin consultar el estado del reloj (horas, min seg, etc).
Mientras que la función inicializar primero “mira” a ver si corresponde actualizar los datos o no.


Una vez inicializado el reloj, si cuando regresa la alimentación ha perdido la información, el problema se encuentra en algún lugar del hardware como: pila baja de nivel, errores de conexionado, etc.

F.
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #26 en: 09 de Octubre de 2020, 08:05:55 »
Gracias por tus comentarios...

ahora voy a chequera, pueden ser las resistencias PU, (el reloj funciona, pues las rutinas las cumple)... hay que ver que pasa con la pila...

Gracias, verifico y comento.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #27 en: 09 de Octubre de 2020, 18:37:35 »
Hola,
Despues de realizar la consulta con Niple esto es lo que nos indican acerca del funcionamineto del modo de programacion del reloj.

Uno de los bits de configuración del reloj (bit nro 7) indica si el reloj esta inicializado o no.

El bloque de Niple de configuración del reloj lo primero que hace es leer ese bit a ver si el reloj ya esta en marcha y lo inicializa solo si el reloj no esta inicializado.
Si detecta que ya esta funcionando el reloj no lo inicializa.

Esa es la diferencia entre los bloques “inicializar” y “escribir”.
La funciona Escribir sobrescribe valores sin consultar el estado del reloj (horas, min seg, etc).
Mientras que la función inicializar primero “mira” a ver si corresponde actualizar los datos o no.


Una vez inicializado el reloj, si cuando regresa la alimentación ha perdido la información, el problema se encuentra en algún lugar del hardware como: pila baja de nivel, errores de conexionado, etc.

F.

amigos, hice la prueba (tal vez no la hice bien), comparto imagenes...

1ro-   programe el controlador con la instruccion inicializar para poner en hora el RTC, esto funciono perfecto, pues además ya lo venia haciendo y usando asi.... ademas de que cumple con las rutinas, me doy cuenta que funciona porque el led del oscilador 1hz de salida funciona (parpadea)

2do-   programe el controlador, sacando Inicializar y poniendo solo leer el RTC, y cuando energice, el led del RTC no funcionaba, como si no ubiera inicializado el bus I2C...

aclaro que en mi circuito este led solo funciona cuando energizo con 5v, mientras esta la pila el led esta apagado! por lo que ledi en data shett del ds1307, el rango de tension de la pila es bastante amplio,  la pila que tiene esta buena.


Gracias por la ayuda..


Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4154
Re:ayuda Reloj DS1307
« Respuesta #28 en: 09 de Octubre de 2020, 18:51:45 »
Entonces,
¿Cuál es el problema?

¿Esta inicializado, después de volver la alimentación o no?

F.
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #29 en: 09 de Octubre de 2020, 19:54:48 »
Entonces,
¿Cuál es el problema?

¿Esta inicializado, después de volver la alimentación o no?

F.

Hola...

No, no esta iniciado, con Niple, para que RTC funcione, se debe insertar la instrucción inicializar, eso hace que trabaje el bus I2c, sin esta instrucción primero NO inicializa, y el problema es que inicializar tiene 2 posibilidades Valor Fijo o Variable, pero variable requiere de un registro en la memoria interna del pic, que el reloj NO conoce... o si?

ademas la funcion Inicializar, le da la instruccion de la salida al RTC de 1hz
me explico?

Gracias


 

anything