DS1307: solución de problemas.

Ayer publicaba el artículo “Tiny RTC y pérdida de la hora“, hoy voy a hablaros sobre como usar el RTC DS1307 y como implementarlo para que funcione bien. El integrado, muy conocido por todos, es muy fácil de instalar en cualquier pic que admita comunicación I2C (SDA/SCL) y lleva el siguiente partillaje:

  • Pines 1 y 2: oscilador de cuarzo de 32.768 KHz.
  • Pin 3: +Bat (positivo de la pila de respaldo CR2032)
  • Pin 4: GND
  • Pin 5: SDA
  • Pin 6: SCL
  • Pin 7: SQW/OUT
  • Pin 8: +5V

En todos los esquemas y montajes que he visto, dice que si no se va a usar una batería recargable, que se conecte tal y como se describe, pero en cuanto enchufamos nuestro reloj y queremos ver la hora recibimos cosas raras, como por ejemplo “165/165/165 165:165:65” ¿os suena, verdad?. Además el software del PIC nos dice que el reloj NO FUNCIONA.

¿Eh? ¿Qué pasa? Hemos conectado todo tal y como dice el esquema, revisamos una y mil veces y sigue fallando. De pronto ¿que pasa si le quito la pila CR2032? ¡¡¡FUNCIONA!!! Venga, estaría mal la pila, y probamos con una y otra y otra más….. Y el fallo sigue ahí.

¿Qué le pasa a esto? Ya estamos locos y mo sabemos que hacer. A buscar en la web a ver que hay. Nada. No hay nada. Solo gente quejándose de lo mismo y los mismos esquemas una y otra vez. ¿Será posible que no vamos a conseguir poner el reloj en marcha? ¿Será que es de los chinos y es muy malo? Desesperado lo dejamos sin la batería de respaldo y lo ponemos a funcionar, si nuestra instalación no es crítica con el tema de la hora, no pasa nada: apañamos unos botones para cambiar la hora y ya lo iremos ajustando cuando sea necesario.

Es una solución, sí; pero NO ES LA SOLUCIÓN. En la hoja de datos del fabricante indica que se le puede poner una pila de respaldo para que el reloj no pierda la hora ¿acaso el fabricante no sabe lo que dice? ¡¡¡Anda ya!!!

Personalmente no me dejo ganar por algo así, puede que aparque el problema a un lado y lo deje un tiempo (no es bueno obsesionarse) mietras hago otras cosas. De repente una noche, cansado y medio dormido, mientras ves una (patética) serie de TV antes de irte a dormir, se enciende un LED de alto brillo en el cerebro: ¿será la solución poner …..? ¡¡¡No tengo aquí componentes para probarlo, será lo primero que haga mañana!!!

Después de una noche inquieta dándole vueltas a la cabeza pensando si esa idea, simple y tonta idea, servirá para resolver el problema, te pones a hacerlo y ¡¡¡EUREKA!!! era eso ¡¡¡QUE TONTERÍA!!! A ver, a ver, ¿la hoja de datos dice algo de esto? ¿Nooooo? ¡¡¡Se les ha pasado una cosa tan tonta como esa!!! ¡¡¡Para darle un premio al que redactó el documento!!!

Y a estas alturas, ya hartos de leer este artículo, estaréis comiendoos las uñas y diciendo que vaya de una vez al asunto y diga cual es la solución a la que he llegado. Os pongo el esquema:

Esquema DS1307

Si observáis el esquema hay una resistencia de 560K entre el pin 3 (BAT+) y GND. Es una resistencia de PULL-DOWN, si la quitamos, aunque no tenga puesta la pila, y acercamos la mano o conectamos un cable, empieza a salir el famoso “165/165/165 165:165:65”, incluso si le pones la pila sola sale eso.

No se cual es el motivo, he leído y releído mil veces la hoja de datos, y no dice nada. Es posible que al estar tan cerca del oscilador de cuarzo (XTAL) se produzca algún tipo de interferencia electromgnética que afecta al funcionamiento interno del DS1307.

Podéis observar también, que aunque en la mayoría de los montajes se indica que se deje al aire, el PIN 7 (SQW/OUT) también tiene puesta una resistencia de PULL-UP de 3K3, esto hace que el reloj funcione de forma más fiable y sin atrasar (al menos en lo que llevo de mañana no me atrasa y ayer, sin ella, me atrasaba del orden de 30 segundos cada hora).

Espero vuestros comentarios.

Anuncios

10 comentarios

  1. Jose, mi nombre es Hernan y soy de Argentina, conecte una resistencia, un poco menor (460K) y por ahora vengo solucionando el problema. Ahora tengo una consulta, esa resistencia, no provoca la descarga prematura de la pila? Es decir, quizas sea muy alta la resistencia pero igualmente, descargaria antes la bateria, no? Muchas gracias.

    • Es muy alta la resistencia para que se descargue la pila por ella.

    • Estimados, en el esquema dice” para usar una pila NO recargable como lo es la CR 2032, debe realizarse la extracción de las R5, R6 y R4 mas el diodo”. Por ultimo puentear la R6. A mi me anduvo bien, espero que les ayude en esto.
      Saludos desde ARG.

  2. Buenas tardes don Alfonso.
    En mi sitio de trabajo estamos luchando contra un reloj que trabaja por poco tiempo. Hoy he tenido que reiniciarle dos veces porque se queda en una hora X y perdemos datos.
    Nosotros no podemos colocarle la batería CR2032 porque se calienta el reloj. Usamos una batería 18650 que alimenta el sistema (Arduino+blutooth+tarjeta de red y reloj).
    Crees que esta solución arregle el bendito reloj?
    Nota. No tengo ni idea en este campo, cuando llegue el ingeniero transmitiré lo que me digas. Gracias

    • Estimado Alejandro,

      No se como será tu sistema, en los míos he logrado suprimir el reloj al estar conectado a un servidor por LAN, así tomo la hora directamente del servidor.

      En cuanto al calentamiento del relój al ponerle batería deber ser por que esté defectuoso, nunca se me ha dado el caso. ¿Has comprobado que las tensiones sean correctas?

      Saludos.

  3. yo hice una matriz con pic16f887a y relog de principio funcianaba muy bien si necesidad de usar la interrupcion sout del ds1307, pero ahora resulta que comienza a atrasarse y hay veces que no se atraza, no se si sea porque lo tengo en protoboard, tambien lei que hay quienes el cristal lo soldan a masa, voy probra esta modificacion haber que tal me va.

  4. Hola Jose… Buena tu aportacion y me gustaria comentarte mi problema. Yo arme un reloj calendario con este dichoso DS1307 y el pic16f84A y me estaba funcionando de maravilla mas de medio año y sin conectar esta resistencia de pull-down y resulta que un dia se me apaga el reloj, entonces lo prendo y todo bien pero ya no le puedo programar la hora y fecha porque empieza con los datos programados de fabrica. Despues de mil suposiciones no pude solucionar el problema. Ahora me dio por probarlo con el Arduino UNO y me marca este error que tu señalas. Yo supongo que ya no sirve este DS1307 y que el fabricante oculta estos defectos para no dejar de venderlo. Saludos y que tenga un buen dia y espero algun comentario suyo

  5. Hola José soy de Colombia, te felicito por este post tan pero tan bueno, y como lo dices, es una tontería. Inclusive, hace unos cuantos meses estaba trabajando con comunicación USART y tuve que colocar PULL-DOWNS de 10K (para que lo tengas en cuenta). Muchas gracias y nuevamente felicidades por hacer un buen artículo de electrónica, que es raro de encontrar estos días, saludos.

  6. hola, soy concho de mexico, alguien ha trabajado del ds 1307 con micros de freescale

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: