TODOPIC

Microcontroladores PIC => - Niple - => Mensaje iniciado por: rghugo en 04 de Octubre de 2020, 17:45:25

Título: ayuda Reloj DS1307
Publicado por: rghugo en 04 de Octubre de 2020, 17:45:25
Hola Amigos, en esta oportunidad necesito hacerles una consulta tecnica..

hice un circuito donde utilizo un reloj calendario DS1307,  el circuito con DS1307, lo hice yo (no compre modulo armado) no le puse memoria eprom, como tiene el modulo comprado.

el circuito funciona perfecta, el controlador lee perfectamente dias, horas, min, etc. el problema que tengo es que cada vez saco la energia del circuito el sistema vuelva a la hora de escritura..

hice toda clase de pruebas, inicializar, luego escribir hora, lectura, luego con MPlab, modifique la parte donde escrbe la fecha y hora, pero nada me funciono, digamos que tiene la pila sin sentido, pues la rutina inicializar, incluye escribir fecha y hora y si no arrancamos con Inicializar y pasamos a lectura, el controlador no lee las variables...

pueden ayudarme, a resolver esto?, pido disculpa si es un tema que ya se hablo.

gracias de antemano.

saludos
Hugo
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 05 de Octubre de 2020, 14:55:23
Puedes adjuntar el esquema de las conexiones realizadas para el módulo DS1307.
Da la impresión, como dices que la pila no hace efecto y no guarda los valores.
de todas formas pienso que una vez retirada la alimentación, al volver a poner tu programa se debería de inicializar desde el inicio y por tanto leer las variables.

F.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 05 de Octubre de 2020, 15:47:22
gracias amigo por su comentario...

no lo tengo con variables, lo tengo con dato fijo, por eso al inicializar vuelve a programar la fecha y la hora...

No pude usar las variables, pues al reloj no le puse eeprom y estoy usando 12f675, que entiendo no tiene eprom interna, de todas formas,  no me doy cuenta como hacer la rutina si le agrego una eprom 24c02 al el puerto SDA y SCL...

pude ayudarme con la rutina usando una variable? pies debo inicializar primero lectura de erpom y luego inicializar el reloj?

en que momento el reloj guarda la info en el registro de la eprom?

Gracias
Título: Re:ayuda Reloj DS1307
Publicado por: lucegiar2005 en 05 de Octubre de 2020, 18:17:49
Hola, buenas tardes. Según recuerdo el 675 tiene 128 bytes de eeprom, ¿me equivoco?
Título: Re:ayuda Reloj DS1307
Publicado por: remi04 en 05 de Octubre de 2020, 18:23:33
Yo de nipple cero. Pero al trabajar con el ds1307 en c (es indiferente) lo que hago es utilizar tres posiciónes ram del propio ds1307 para grabar un valor clave cualquiera en cada uno. Luego el programa cuando arranca lo primero que hace con el ds1307 es leer estos tres valores y compararlos con tres constantes. Si coinciden la memoria ram es válida, por lo tanto los datos de calendario y reloj son válidos, se leen y se cargan las variables desde el rtc.

 Si no coinciden se entiende que los datos se han perdido o dañado por que la pila no está o está descargada o se ha retirado momentáneamente, etc y entonces el programa principal pide poner fecha y hora de nuevo al usuario.

 En tu caso parece que el programa cada vez que arranca ajusta siempre la fecha y hora y por eso el rtc siempre te arranca en lo preajustado.

 Saludos.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 05 de Octubre de 2020, 21:01:47
Gracias, seguramnete se puede hacer desde Niple, pero no le encuentro la vuelta, yo con C, poco y nada...

Gracias
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 06 de Octubre de 2020, 12:17:10
Yo lo que tengo entendido es que tienes los valores a programar dentro de la memoria del pic y al dar tensión al equipo, lo que se realiza es que se reinicializa el reloj, mandando los valores que tienes fijados, al reloj para que los tome como valores de configuración.

Lo normal es que esos valores quedaran grabados en la eeprom del DS1307.

Lo que indicas es que aunque tengas puestas la pila, si quitas la alimentación, en un nuevo regreso de la alimentación ha perdido los valores iniciales. Según lo que has explicado, tienes nada mas dar tension un bloque que reinicia los valores reajustados, de esa forma aunque no tuviera pila el DS1307 siempre lo primero que haría el pic es volver a mandarle los datos, aunque me imagino que los días, horas, etc. no se actualizarían al valor actual en ese momento.

Gracias, seguramnete se puede hacer desde Niple, pero no le encuentro la vuelta, yo con C, poco y nada...

Gracias

Claro que lo hace.

De todas formas para ayudarte mejor deberías adjuntar el fichero NPL creado hasta el momento para revisarlo.
También el esquema eléctrico usado.

f.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 06 de Octubre de 2020, 12:28:01
estimado, usted esta en lo correcto, eso es lo que sucede...

comparto el fichero... ahi podra entender mejor..


Muchas gracias por la ayuda...

Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 06 de Octubre de 2020, 17:31:29
Gracias por el adjunto, lo voy a revisar.
Lo primero que he visto es una cosa ¿Para que inicializas el watchdog a o, si no lo tienes habilitado dentro de la configuración de la CPU?

Otra cosa como mejora: Ya que has creado etiquetas, yo utilizaría el "salto a etiqueta" de esa forma tienes menos flechas de unión entre bloques pasando por medio de otros bloque, además el diagrama seria mas fácil de seguir. De momento lo estoy acomodando un poco para poder seguirlo. 

Pero para un estudio mas afondo de lo realizado. ¿Puedes adjuntar el esquema eléctrico de las uniones del pic con el reloj, pila, etc.?
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 06 de Octubre de 2020, 19:20:01
gracias por los consejos...

adjunto el circuito en proteus...

nuevamente gracias....
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 07 de Octubre de 2020, 12:47:56
Amigo,
en el fichero del esquema que has adjuntado no aparece el reloj DS1307 por ningún sitio.

F.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 07 de Octubre de 2020, 14:21:01
disculpe, se refiere al circuito de proteus?
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 07 de Octubre de 2020, 14:25:01
perdón, me equivoque de archivo, adjunto el correcto..

gracias
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 07 de Octubre de 2020, 17:15:07
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.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 07 de Octubre de 2020, 17:41:44
Muchas gracias por sus comentarios y su tiempo...

entiendo lo que usted comenta, pero interpreto un error, salvo que el ds1307, escriba en los registros de eprom cuando corto la energia, y esto no se si lo hace realmente....
Título: Re:ayuda Reloj DS1307
Publicado por: remi04 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..
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo 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.
 
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA 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.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo 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..



Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA 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.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo 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
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA 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.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo 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

Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 08 de Octubre de 2020, 15:41:40
No desesperes que vamos a ver como se podria realizar.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 08 de Octubre de 2020, 15:48:27
No desesperes que vamos a ver como se podria realizar.

Muchas graciass


Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA 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.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo 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.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo 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..

Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA 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.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo 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
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 10 de Octubre de 2020, 08:45:00
A ver si somos capaces de entendernos, porqu no termino de aclararme con lo que estas explicando:

Para que Niple trabaje correctamente con el reloj DS1307, lo primero que se debe de realizar es: primero inicializar los puertos y seguidamente insertar el bloque de inicializar.

Cuando se configura el bloque de inicializar, los datos a introducir son o bien fijos: inicializar a un determinado número de día, mes, año o bien de forma variable. Si es variable quiere decir que tu puedes tener los valores en unos registros que pueden ir variando y si en un determinado momento si se actualiza el reloj, se actualizará con los valores que contengan esos registros. En el fichero que adjuntaste lo tienes configurado todo con valores fijos: 05/05/20 y 20:54.

Cuando se retira la alimentación, el reloj debe de seguir funcionando si está conectado adecuadamente como Niple indica en su esquema cuando se configura el uso del reloj. Es decir con su cristal y su pila o batería. Mientras que la batería o pila se encuentre dentro de las especificaciones que requiere el uso del reloj, va a seguir funcionando correctamente (se supone inicializado).

Con el regreso de la alimentación, Niple vuelve a ejecutar el programa desde el inicio. Eso quiere decir que lo primero que va a realizar es configurar los puertos y después ejecutará el bloque de inicializar el reloj. Pero antes de mandar las instrucciones de inicialización, revisa el bit 7 de estado del reloj, para comprobar si el reloj ya estaba inicializado. Si estaba inicializado, el bloque de inicializar se ignora y pasa a ejecutar las siguientes instrucciones de tu proyecto. Si ve que no esta inicializado (comprobación del bit7) entonces y solo entonces vuelve a configurar el reloj con los datos que tuvieras prefijados de antemano. Es decir en tu caso: 05/05/20 y 20:54.

Si lo que quieres es tener valores variables de configuración, tienes si o si que crear los registros necesarios como pueden ser : día, mes, año, hora, minuto, etc. y por su puesto contener en ellos los valores a actualizar En caso contrario de no tenerlos se te va a configurar cualquier cosa, aunque lo normal podría ser: 00/00/00 00:00. El reloj no entiende los registros programados en NIPLE. Cuando se le mandan los datos, Niple los realiza de la forma que se indica en el datasheet del reloj y se van almacenado en sus posiciones de memoria con el orden adecuado. De igual forma cuando se lee o se escribe en el reloj, se debe realizar de acuerdo a la secuencia establecida para que el reloj la entienda y que Niple le envía de forma automática.

Otra cosa que he visto al compilar el fichero npl que adjuntaste es que según mi versión no permite compilar el fichero por exceder el proyecto la capacidad de memoria del pic. ¿Con que versión de Niple trabajas?.

Por tanto y resumiendo. Tu programa "riego_autoV64" que adjuntaste:
1º ¿Lo estas probando de forma física o simulando?
2º Con la alimentación conectada ¿Funciona correctamente?
3º Después de quitar la alimentación y volver a ponerla despues de cierto tiempo de estar quitada:
a.- ¿Tu proyecto sigue funcionando?
b.- ¿El reloj se encuentra funcionando  e inicializado?
c.- ¿Cómo estas comprobando que está inicializado o no lo esta? En tu proyecto no hay nada donde se pueda ver (display o cosa similar) el estado del reloj


F
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 10 de Octubre de 2020, 09:33:33
A ver si somos capaces de entendernos, porqu no termino de aclararme con lo que estas explicando:

Para que Niple trabaje correctamente con el reloj DS1307, lo primero que se debe de realizar es: primero inicializar los puertos y seguidamente insertar el bloque de inicializar.

Cuando se configura el bloque de inicializar, los datos a introducir son o bien fijos: inicializar a un determinado número de día, mes, año o bien de forma variable. Si es variable quiere decir que tu puedes tener los valores en unos registros que pueden ir variando y si en un determinado momento si se actualiza el reloj, se actualizará con los valores que contengan esos registros. En el fichero que adjuntaste lo tienes configurado todo con valores fijos: 05/05/20 y 20:54.

Cuando se retira la alimentación, el reloj debe de seguir funcionando si está conectado adecuadamente como Niple indica en su esquema cuando se configura el uso del reloj. Es decir con su cristal y su pila o batería. Mientras que la batería o pila se encuentre dentro de las especificaciones que requiere el uso del reloj, va a seguir funcionando correctamente (se supone inicializado).

Con el regreso de la alimentación, Niple vuelve a ejecutar el programa desde el inicio. Eso quiere decir que lo primero que va a realizar es configurar los puertos y después ejecutará el bloque de inicializar el reloj. Pero antes de mandar las instrucciones de inicialización, revisa el bit 7 de estado del reloj, para comprobar si el reloj ya estaba inicializado. Si estaba inicializado, el bloque de inicializar se ignora y pasa a ejecutar las siguientes instrucciones de tu proyecto. Si ve que no esta inicializado (comprobación del bit7) entonces y solo entonces vuelve a configurar el reloj con los datos que tuvieras prefijados de antemano. Es decir en tu caso: 05/05/20 y 20:54.

Si lo que quieres es tener valores variables de configuración, tienes si o si que crear los registros necesarios como pueden ser : día, mes, año, hora, minuto, etc. y por su puesto contener en ellos los valores a actualizar En caso contrario de no tenerlos se te va a configurar cualquier cosa, aunque lo normal podría ser: 00/00/00 00:00. El reloj no entiende los registros programados en NIPLE. Cuando se le mandan los datos, Niple los realiza de la forma que se indica en el datasheet del reloj y se van almacenado en sus posiciones de memoria con el orden adecuado. De igual forma cuando se lee o se escribe en el reloj, se debe realizar de acuerdo a la secuencia establecida para que el reloj la entienda y que Niple le envía de forma automática.

Otra cosa que he visto al compilar el fichero npl que adjuntaste es que según mi versión no permite compilar el fichero por exceder el proyecto la capacidad de memoria del pic. ¿Con que versión de Niple trabajas?.

Por tanto y resumiendo. Tu programa "riego_autoV64" que adjuntaste:
1º ¿Lo estas probando de forma física o simulando?
2º Con la alimentación conectada ¿Funciona correctamente?
3º Después de quitar la alimentación y volver a ponerla despues de cierto tiempo de estar quitada:
a.- ¿Tu proyecto sigue funcionando?
b.- ¿El reloj se encuentra funcionando  e inicializado?
c.- ¿Cómo estas comprobando que está inicializado o no lo esta? En tu proyecto no hay nada donde se pueda ver (display o cosa similar) el estado del reloj


F

Gracias Amigo...

su mensaje explica algo nuevo para... ( Niple vuelve a ejecutar el programa desde el inicio. Eso quiere decir que lo primero que va a realizar es configurar los puertos y después ejecutará el bloque de inicializar el reloj. Pero antes de mandar las instrucciones de inicialización, revisa el bit 7 de estado del reloj, para comprobar si el reloj ya estaba inicializado. Si estaba inicializado, el bloque de inicializar se ignora y pasa a ejecutar las siguientes instrucciones de tu proyecto.)

ahora considerando esto, podemos decir que el programa siempre estuvo bien y lo que esta fallando es mi RTC!!!


respuestas...

estoy usando Niple 6.1

1º ¿Lo estas probando de forma física o simulando? fisica, el RTC lo hice yo es casero, no es un modulo comprado...y simulador Proteus, pero en proteus, no pude cortar energia Ni resetear! si bien hice un programa que pulsado uno de botones vuelve a inicio, No es lo mismo.... ademas agregue un display LCD para verlo mejor
2º Con la alimentación conectada ¿Funciona correctamente? perfecto NO falla nunca!
3º Después de quitar la alimentación y volver a ponerla despues de cierto tiempo de estar quitada:
a.- ¿Tu proyecto sigue funcionando? sigue pero esta desplazado en el tiempo, tengo que energizar en el mismo horario de inicializacion...
b.- ¿El reloj se encuentra funcionando  e inicializado? Si.
c.- ¿Cómo estas comprobando que está inicializado o no lo esta? En tu proyecto no hay nada donde se pueda ver (display o cosa similar) el estado del reloj me doy cuenta por el led de salida RTC, que oscila en 1hz.


Gracias
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 10 de Octubre de 2020, 10:15:27
Hola Hugo,

A ver el mensaje no es nuevo. Eso lo realiza Niple siempre de la misma forma al igual que cualquier lenguaje de programación. Estos trabajan secuencialmente y vas ejecutando las instrucciones desde el inicio. Por tanto si quitas la alimentación, al volver a ponerla, TODOS comienzan desde el inicio.

Por lo que indicas, parece que si que tu proyecto funciona y ha funcionado siempre bien. Por tanto, creo, que  el problema se encuentre en el RTC.

Lo que deduzco ahora, por tus respuestas es que todo te está funcionando correctamente excepto que al regresar la alimentación el reloj se encuentra, digamos como retrasado respecto a la hora y que el reloj si se encuentra inicializado (tu respuesta 3-b).
Lo que sigo sin comprender es como sabes que la hora no se corresponde y que por tanto tienes que reinicializarlo a la misma hora inicial.
El parpadeo del led a 1Hz solo te indica que el reloj está funcionando.

Si la hora está desplazada deberías de comprobar por ejemplo si el cristal de 32768Hz realmente es de ese valor y si está funcionando correctamente, puede ser ese el problema y por eso el desfase en el horario. Además comprueba que realmente la oscilación del led es de 1Hz y no es superior.

F.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 10 de Octubre de 2020, 15:55:44
Hola....

claro, para explicarme un poco mas...

* el circuito funciona Normal, yo le pido ejecutar una instrucción a las 17:50 min, y a esa hora el circuito los hace... y asi con cada  instrucción / hora programada, (con esto descarto cristal, comunicación I2c, frecuencia 1hz...

* cuando corto la energia, imaginemos 10 min, y la restablezco, el pic arranca por puertos, luego inicializar y aqui, tiene una valor fijo en cada opcion (fecha / Hora) imaginemos 18:42... ahora si yo restablezco el pic a las 18:42, todo sigue normal, si en cambio lo hago a caulquier horatio, por ejemplo se corta la energia en la madruga 2am, y vuelve a las 2:30 am, para mi cicuito son las 18;42... y por consiguiente, ejecuta la instruccion de 17:50 en un horario completamente corrido...

es decir, cuando lo inicializo, no parece leer el Bit 7 primero, directamente actualiza el RTC...

podria probar, lo siguiente:

1- pongo en hora el RTC
2- saco el controlador del zocalo 1h aprox, sin cortar la energia, con esto RTC al tener los 5v va a seguir oscilando led)
3 vuelvo a poner el pic y compruebo que NO se atraso..

si esto funciona, mi problema esta en bateria o pin de batt de mi RTC..

otra cuestion a considerar, es que si el comportamiento de la instruccion INICIALIZAR, es leer primero si RTC esta inicializado con Bit7, eso significa que no es necesario hacer una rutina de puesta en fecha y hora y otra de trabajo, la misma deberia funciona OK, obviamente actualizando cuando se corta la energia..

No se si me explico con esto ultimo..

Gracias
Hugo


Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 10 de Octubre de 2020, 16:47:27
Hola....

* cuando corto la energia, imaginemos 10 min, y la restablezco, el pic arranca por puertos, luego inicializar y aqui, tiene una valor fijo en cada opcion (fecha / Hora) imaginemos 18:42... ahora si yo restablezco el pic a las 18:42, todo sigue normal, si en cambio lo hago a caulquier horatio, por ejemplo se corta la energia en la madruga 2am, y vuelve a las 2:30 am, para mi cicuito son las 18;42... y por consiguiente, ejecuta la instruccion de 17:50 en un horario completamente corrido...

No se si me explico con esto ultimo..

Gracias
Hugo

Si eso es así, lo mas probable es que no funcione adecuadamente por la pila o el cristal de 32768Hz.


podria probar, lo siguiente:

1- pongo en hora el RTC
2- saco el controlador del zocalo 1h aprox, sin cortar la energia, con esto RTC al tener los 5v va a seguir oscilando led)
3 vuelvo a poner el pic y compruebo que NO se atraso..

si esto funciona, mi problema esta en bateria o pin de batt de mi RTC..

El punto 2º y 3º es peligroso hacerlo. Se puede dañar el micro. Pero puedes intentar realizarlo con cuidado.


otra cuestion a considerar, es que si el comportamiento de la instruccion INICIALIZAR, es leer primero si RTC esta inicializado con Bit7, eso significa que no es necesario hacer una rutina de puesta en fecha y hora y otra de trabajo, la misma deberia funciona OK, obviamente actualizando cuando se corta la energia..

No se si me explico con esto ultimo..

Eso es lo que te explique en un post anterior. Siempre comprueba ese bit y si está inicializado NO es necesario realizar ninguna rutina adicional de puesta en hora. Niple se "salta" la ejecución de inicializarlo y por tanto debería de funcionar.

F.
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 10 de Octubre de 2020, 18:34:49
Gracias, si es asi, seguro es el RTC, compre uno en ML del Kit arduino, voy a robar cuando llegue y comento.

Gracias
Título: Re:ayuda Reloj DS1307
Publicado por: Duende_Azul en 10 de Octubre de 2020, 21:27:14
Gracias, si es asi, seguro es el RTC, compre uno en ML del Kit arduino, voy a robar cuando llegue y comento.

Gracias

No lo hagas... robar es malo...   :D
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 11 de Octubre de 2020, 07:56:37
jajajaja,,,, probar,,,!

Gracias
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 16 de Octubre de 2020, 19:54:31
Hola Amigos,

ayer recibi la pla ca arduino RTC, la arme hoy en el circuito y funciona perfecto, tal como comentaron, una vez que inicio NO es necesario actualizar mas la hora a menos que saques la pila...

muchas gracias a todos por los comentarios y ayuda, espero que esto sirva para otros tanto como lo fue para mi...

saludos
Hugo
Título: Re:ayuda Reloj DS1307
Publicado por: Fer_TACA en 17 de Octubre de 2020, 07:50:36
Me alegro que te funcionara.
Por lo que indicabas, debía de haber algo que no estaba del todo correcto en el diseño que realizaste.

F. 
Título: Re:ayuda Reloj DS1307
Publicado por: rghugo en 17 de Octubre de 2020, 08:00:38
Hola Fer_TACA,  Si, el problema, esta claramente en mi RTC casero, el de Arduino no trae led (indicador de frecuencia), hay algo en HARDWARE justo en la pila, voy a revisar bien, puede ser el cristal pues lo saque de una cpu vieja (no recuerdo ahora si es la misma frecuencia que pide el DS1307, solo puede asegurar que energizado con 5v funcionaba perfecto....

gracias a todos