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

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

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4032
Re:ayuda Reloj DS1307
« Respuesta #30 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
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #31 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

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4032
Re:ayuda Reloj DS1307
« Respuesta #32 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.
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #33 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



Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4032
Re:ayuda Reloj DS1307
« Respuesta #34 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.
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #35 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

Desconectado Duende_Azul

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 899
Re:ayuda Reloj DS1307
« Respuesta #36 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

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #37 en: 11 de Octubre de 2020, 07:56:37 »
jajajaja,,,, probar,,,!

Gracias

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #38 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

Desconectado Fer_TACA

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 4032
Re:ayuda Reloj DS1307
« Respuesta #39 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. 
Todos los días se aprende algo nuevo.

Desconectado rghugo

  • PIC10
  • *
  • Mensajes: 48
Re:ayuda Reloj DS1307
« Respuesta #40 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