Módulo RTC DS1302. Reloj de tiempo real

Descripción


Un módulo RTC (Real Time Clock) o "Reloj de tiempo real" consiste en un circuito integrado alimentado por una batería el cual, en todo momento, registra la fecha, día de la semana y hora al igual que un reloj digital convencional. Sólo que estos datos únicamente podrán ser consultados mediante comunicación I2CVer hoja de datos. Ver imágenes.

Para quien le preocupe la complejidad del protocolo, deje los miedos de lado. A lo largo de esta actividad aprenderán a programar el componente y hacerlo funcionar sin siquiera necesitar comprender cómo trabaja. Se le podrá asignar por única vez una fecha, hora y día de la semana, y mediante otro sketch aparte se lo comenzará a utilizar directamente.

Vale la pena conocer las prestaciones que este módulo ofrece, pero no siempre es necesario comprar y emplear un reloj de tiempo real, bien puede registrarse el tiempo mientras corre el programa solamente empleando software y la memoria interna EEPROM, aunque durante el tiempo en que la placa este sin alimentación esto no funcionará. Por lo tanto, si se desea tener en todo momento disponibles y actualizados la fecha, día de la semana y hora independientemente de la alimentación de la placa, este componente es la solución. Para el resto de los casos se lo consideraría innecesario. Visitar la entrada Reloj por software.

Imágenes

 

Nota: Para navegar el álbum sin molestias, el mismo se abre haciendo clic sobre el comentario visible. Los comentarios pueden ocultarse desde el botón color verde.

Actividad


Para mostrar la mayor cantidad de prestaciones útiles de este módulo se presentará un sketch de prueba mediante el cual se configurarán todos los parámetros por única vez mas un segundo sketch mediante el cual se consultará por separado: año, mes, día de la semana, hora, minuto y segundo para ser mostrados en un display LCD.

El primer paso será descargar la librería de este componente desde aquí. Luego abrir Arduino IDE. Ir a "Menú > Sketch > Importar librería > Add library" y navegar hasta el archivo .zip descargado anteriormente, luego dar Aceptar. Ver.

Habiendo hecho esto pueden probarse los ejemplos desde "Menú > Archivo > Ejemplos > DS1302" o cargarse el primer sketch de prueba, luego el segundo y observar cómo funciona.

  • Placa: Arduino Leonardo
  • IDE: V1.0.5
  • Módulo: RTC DS1302

Conexionado del circuito


Display LCD: Se conectará a la placa tal como en la entrada Display LCD 16x2.
Arduino [ ]
Display ( ) vista frontal

(1)        [GND]
(2)        [+5V]
(3)------[2,2KOhm]------[GND]
(4)       [D4]
(5)       [GND]
(6)       [D7]
(7)
(8)
(9)
(10)
(11)     [D8]
(12)     [D9]
(13)     [D12]
(14)     [D13]
(15)     [D10]
(16)---[47Ohm o directo]----[GND]


Módulo RTC: Se conectará a la placa mediante los siguientes pines.
Arduino [ ]
RTC ( ) vista frontal

(Vcc)    (GND)    (CLK)    (DAT)    (RST)
[+5V]    [GND]    [D5]      [D3]      [D2]
--- IMPORTANTE: En caso de no conservarse fecha y hora, medir tensión de pila y atender especialmente a las conexiones de la pila en el módulo; igual para la conexión de masas, ver comentarios ---

Detalle: Viendo al módulo RTC de frente, los pines denominados tal como se muestran se conectarán a los respectivos pines de la placa Arduino que se observan debajo de cada uno. Vcc se conectará a +5V, GND se conectará a GND de la placa Arduino. El pin CLK se conectará al pin D5 de la placa Arduino. DAT Se conectará a D3 y RST se conectará a D2.
Nota: En caso de no disponer de un display LCD, véase el sketch de prueba por puerto serie.



Sketch de prueba, configuración única



Sketch de prueba, LCD



Sketch de prueba, puerto serie


Comentarios

  1. Muy buenos códigos, quiero ver si me puedes apoyar ya que tengo un módulo que tiene hasta su batería de litio pero la hora no se conserva, qué tengo que hacer para conservar la hora a pesar de quitarle la energía al modulo y que se alimente con la batería que trae? en la aplicación que voy a hacer necesito presición en ese sentido, gracias Abel, estaré pendiente.

    ResponderEliminar
    Respuestas
    1. Perdón por la demora. La batería de litio es la encargada de mantener al integrado funcionando permanentemente, ese es el motivo por el cual no pierde la hora al desconectar la placa Arduino de la alimentación.
      Si no conserva la hora puede ser dos causas:

      1- La batería está agotada, vencida, o hace mal contacto (igual para alguna pista dentro de la pequeña placa).
      2 - Algún asunto de software hace que al inicio del programa, o en otro momento no deseado, se grabe una fecha y hora nula.

      El módulo es muy sencillo y no creo que el problema sea el integrado. Para cerciorarte de eso probá juntar los dos códigos: al inicio grabará una hora y fecha predeterminadas, luego mostrará lo grabado (sin haberse interrumpido la energía).

      Eliminar
    2. También me fallaba, luego de comprobar que la batería está bien (tiene carga suficiente y a la vez estaba bien conectada al módulo RTC), debes de cargar al micro dos códigos, carga el primero que aparece aquí para configurar la hora, luego carga el tercero que trata del puerto serial, para que desde el programa de arduino utilices el serial monitor y pruebes tu módulo. A mi me funcionó perfectamente. Suerte y muchas gracias al autor de este post. Es el único que encontré que realmente funciona.

      Eliminar
  2. Hola, como está.... Tengo un problema con el módulo, toma bien la lectura de la hora y todo lo funcional de la interactividad con la placa arduino, ahora bien, quito alimentación al arduino esperando a que el sistema siga contando el tiempo automáticamente sin la batería pero oh sorpresa cuando lo vuelvo a conectar arranca desde la hora en que lo desconecté, le agradezco si me ayuda con ese impase.

    ResponderEliminar
    Respuestas
    1. Perdón " que siga contando el tiempo con la batería" y no es problema de la batería porque yo le quito la batería y da el reset normal, deja ajustar la hora bien...

      Eliminar
    2. Estimado, la batería debe permanecer en el módulo a todo momento. Si la batería es removida del módulo, la hora almacenada se pierde.
      Si usted no quita la batería y graba su programa correctamente, podrá desconectar Arduino+RTC de la aliementación que no pasará nada (el RTC seguirá actualizando la hora.
      Siendo el día 3/12/2014 la actividad ha sido chequeada y es correcta. Recuerde: primero cargue el programa de asignación de fecha/hora, si desea modifique el código previamente y luego cargue el programa de consulta (serie o LCD, el que guste). Tenga en cuenta conectar bien el sensor, de acuerdo al esquema.

      Eliminar
  3. Revisaré nuevamente los programas y los mantendré al tanto. De mi parte son programas ya testeados, pero voy a analizar ese comportamiento y vuelvo a comentarles.

    ResponderEliminar
    Respuestas
    1. Hola que tal, todo me va bien el problema es que empieza contando los segundos y digamos empieza 1,2 y luego sigue 2,2,2,2,2,3,3,3,3,3,3,4,4,4,4,4,5,5,5,5 y asi se va, si se guarda y todo pero los segundos loquean

      Eliminar
  4. Hola, tengo un problema.
    El caso es que conecto todo tal como indicas, luego cargo el programa y lo
    único que aparece en la LCD es:
    HOY:, MIN:0
    MES:0, DE:2000,
    Y después:
    HORA:0, MIN:0
    SEG:0

    Así muchas veces cambiando entre los dos mensajes.
    ¿Qué puedo hacer para solucionarlo?

    ResponderEliminar
    Respuestas
    1. He hecho algunas pruebas y he notado que desconectando el vcc funciona perfectamente. ¿Por qué pasa esto?
      Tengo la LCD y el módulo conectados en paralelo al 5V del Arduino, pero no debería haber problema, ¿no?

      Eliminar
    2. Hola Iron Jony, mira, a mí me pasó algo similar, espero que te ayude aunque sea tarde y si no es a ti, al menos a algún otro lector, mi problema es que estaban "flotando" las tierras, yo tenía todo mi circuito (arduino + RTC + LCD + nRF24L01 + Lector de SD) me auxiliaba de un protoboard para "puentear" tierras y voltajes (3.3v y 5v según el caso), y se me ocurrió sacar una de las tierras del arduino hacia el protoboard y de ahí "colgarme" con los otros módulos y tomar tierra, mi sorpresa fue que ahí como que se flotaban las tierras causando cosas raras, todo se solucionó tomando las tierras de todos los componentes en cuestión directamente del arduino para que tengan la misma referencia, en el caso del voltaje no importa, esos sí los puedes puentear en protoboard pero las tierras NO.

      Y ya analizando suena lógico, las técnicas de reducción de ruido te indican que debes tomar la tierra de un mismo punto y de ahí distribuirla (muchos de nosotros preferimos a la hora de medir un aparato tomar la tierra de un tornillo o del chasis del equipo, funciona, pero en sentido extricto está mal hecho, debe ser de la fuente directamente en el polo negativo)

      Saludos.

      José Luis Salguero

      Eliminar
    3. Muchísimas gracias, ha sido de gran ayuda, ahora funciona perfectamente.

      Eliminar
  5. Muchísimas gracias por todos los aportes, a mi me pasaba que no quedaban cargados los datos, seguía los pasos, primero configuro, luego con el serial pruebo, y nada, me dio por mirar los pines por debajo de la placa del Modulo RTC y encontré que el pin de +Vcc de la pila estaba abierto, lo volví a soldar y EUREKA! todo funcionó, que alegría, no sé si así viene este módulo para evitar gastar la batería o sólo era mi caso, pero funciono, y ya tengo configurada la hora y fecha gracias a este excelente artículo. De nuevo gracias.

    ResponderEliminar
  6. Buenos días funciona correctamente todos los programas me ha gustado mucho vuestra pagina saludos y que tengan un buen día.

    ResponderEliminar
  7. HOLA QUE TAL INGENIERO SALUDOS COMO PUEDO LO CONFIGURAR EN FORMATO DE (12:00)?
    MUCHAS GRACIAS POR SUS APORTES

    ResponderEliminar
  8. HOLA QUE TAL INGENIERO SALUDOS COMO PUEDO LO CONFIGURAR EN FORMATO DE (12:00) AM/PM?
    MUCHAS GRACIAS POR SUS APORTES

    ResponderEliminar
  9. HOLA QUE TAL INGENIERO SALUDOS COMO PUEDO LO CONFIGURAR EN FORMATO DE (12:00) AM/PM?
    MUCHAS GRACIAS POR SUS APORTES

    ResponderEliminar
  10. Estimado esperando que se encuentre bien, le cuento tengo un modulo de reloj de control de tiempo real conectado arduino uno, le configure la hora y todo funciona perfecto, le saco la energía al arduino y el reloj que contiene una pila sigue funcionando y mantiene la hora funciona perfecto, le tengo incorporado un programa que hice en el cual hago prender un lámpara leds a una hora determinada de prendido paulatino y en la tarde se apaga de la misma forma en mi acuario de peces , por otro lado tengo un comedero que funciona con un bobina magnética que abre el comedero y cae el aliento este sistema es independiente del arduino, pues esta bobina me hace interferencia eléctrica sobre el reloj que lleva la hora el cual se pega a la hora que se activo el comedero por ende el reloj no sigue con la hora y por consiguiente después no se apaga la lámpara led en la tarde, lo solucione con un condensador no polarizado conectado a la bobina magnética y funcionó unos meses pero el día de ayer me fijé que mis plantas acuáticas se estaban poniendo de color amarillo eso significa que no han tenido la luz adecuada, cargue en el arduino el programa para ver la hora y me fije que estaba pegado otra vez con la hora de la comida del día de ayer, usted me dirá porque pasa esto si son independiente?, yo creo que es porque tanto el arduino como el comedero tienen sus propios transformadores y están conectados a una misma toma eléctrica y creo que por ha y la bobina genera algún tipo de ruido eléctrico que interfiere sobre el reloj, si me pudieran orientar les quedare eternamente agradecido, se despide Jaime Valenzuela de Chile.

    ResponderEliminar
  11. Hola a todos si conectaba el lcd más el reloj me dejaba de funcionar, y la solución era quitar el cable +5 del reloj, de esta forma me marca la hora perfectamente, si esta conectado me marca la fecha del año 2000 ... yo probé con un arduino mini... lo digo por si a alguien le pasa lo mismo :d
    saludos a todos y gracias por el código

    ResponderEliminar
  12. esta libreria no corresponde a este codigo

    ResponderEliminar
  13. Muchas gracias por este pos pues estoy empezando con RTC y me parece muy interesante muchas gracias por su aporte al conocimiento

    ResponderEliminar
  14. Tengo un problema, no actualiza los segundos, sera que no esta contando?

    ResponderEliminar
    Respuestas
    1. Hola, pudiste resolverlo!!?... Tengo em mismo problema, guarda correctamente los ajustes de fecha y hora, pero queda en pausa, no cuenta los segundos.

      Eliminar
    2. TENGO UN PROBLEMA SIMILAR EN CADA DELAY NO SE ACTIALUZAN LOS SEGUNDOS, Y COMO SE AJUSTA LA FECHA A LA ACTUAL?. POR SU APOYO GRACIAS.

      Eliminar
    3. supiste como actualizarlo a la fecha actual?

      Eliminar
  15. Cordial saludo exelente tutorial la presentacion en el LCD bien vistosa,no he podido hacerlo funcionar colocandolo con I2C no entiendo porque,por favor una ayuda.Gracias

    ResponderEliminar
  16. como hago para cambiar la hora y las fechas?

    ResponderEliminar
  17. tengo un problema... solo me imprime ceros... todas las fechas y horas quedan en cero y el segundero no avanza. sin embargo, cargando otro sketch, con básicamente la misma función pero sola, ahí si funciona bien.

    ResponderEliminar
  18. BUENAS NOCHES, SI ALGUEN PUEDE APOYARME, LES AGRADEZCO DE ANTEMANO, QUIERO QUE MI RTC DS1302, ME ENVIE AL DISPLAY LCD 20X4 FORMATO DE 2 DIGITOS POR EJEMPLO 5 9 2019 7 8 2 ... NECESITO 2 DIGITOS PARA CADA DATO O SEA EN ESTE CASO 05 09 2019 07 08 02 ...SUPONGO QUE SERIA PARTE DE PROGRAMAR EL DS1302 ... 5 DE SEPT 2019 (FECHA) Y 7 DE LA MAÑANA CON 8 MINUTOS Y 2 SEGUNDOS ..GRACIAS POR SUS APOYOS...MI CORREO magaza52@hotmail.com

    ResponderEliminar

Publicar un comentario