bclose

Arduino y los relojes RTC

Usando un reloj integrado y batería de respaldo

Objetivos

.

 
    • Presentar los RTC Real Time Clocks.
    • Montar un circuito con un Tiny RTC.
    • Presentar las librerías complemento de Time, llamadas DS1307RTC y TimeAlarms.
    • Argumentos __DATE__ y __TIME__
 

Material requerido.

Imagen de Arduino UNO

 Arduino UNO o similar.

BreadboardconexionesProtoboard y algunos cables macho hembra.
 Reloj con bateria RTC clock
 Un reloj digital TinyRTC con respaldo de batería

 

Los relojes de tiempo real o RTCs

 

En la sesión anterior, presentamos la nueva librería Time para Arduino. Empezamos utilizando el reloj interno para los ejemplos, porque es una opción que siempre está disponible y además es de precio imbatible.

Pero dijimos que tenía varios problemas evidentes, como eran el hecho de que el reloj interno se reinicia cada 50 días aproximadamente, y además si cortamos la corriente a nuestro Arduino, pone el reloj a 00 y vuelve a empezar desde el 1 de enero de 1970, lo que no mucho.

Necesitamos una solución, que nos permita usar un reloj fiable que se mantenga incluso cuando apagamos Arduino. ¿Y qué ocurre cuando tenemos que resolver un problema electrónico? Pues que hay un fabricante, o varios, que nos suministran un chip para resolverlo.

Uno muy extendido para reloj digital es el DS1307 de Maxim. Por muy poco dinero realiza todas las funciones para llevar un reloj con calendario y solo hay que añadirle una batería externa para que no pierda la hora al perder la corriente. Sus características son:

Chip reloj DS1307
  • RTC: Real Time Clock, o reloj de tiempo real. Que lleva la cuenta de segundos minutos y horas además de día mes y año automáticamente, válido hasta el año 2100.
  • 56 byte de memoria RAM respaldada por una batería exterior, que mantiene la fecha y hora cuando no hay corriente.
  • Detección automática de corte de corriente y cambio a modo batería.
  • Muy bajo consumo, lo que ayuda a que la batería dure entre 5 y 10 años.
  • I2C integrado en el mismo chip.

 

Reloj con bateria RTC clock

Además, es bastante fácil conseguir un reloj con batería montado en una placa y listo para usarse en nuestros proyectos, por unos pocos euros.

En esta sesión vamos a usar uno de estas placas, la Tiny RTC, con el DS1307, montado en un soporte de conexión, con su cristal, una batería de respaldo, y bus I2C, con lo que solo tendremos que conectar unos pocos cables y podremos empezar a jugar con el tema.

 

 

Diagrama de conexión

 

De nuevo la conexión es trivial. Simplemente conectar SDA a Arduino A4 y SCL a A5.


Tiny RTC

Y para la protoboard:

Sesion 55_bb

El pin SQW, es una salida digital del chip DS1307, que nos permite generar una señal cuadrada de frecuencia programable( De1Hz, 4kHz, 8kHz,32kHz) que podemos emplear como base de tiempos para el reloj de cualquier circuito sin necesidad de un cristal adicional de cuarzo y circuito oscilador (Que ya lleva el propio Tiny RTC)..

Por eso, en este caso, como no vamos a usarlo, lo dejamos sin conectar tranquilamente, después de comprobar en la hoja de normas que podemos hacerlo sin problemas.

 

El programa de control

 

En la sesión anterior descargamos e instalamos la nueva librería Time en nuestro IDE.  La ventaja de utilizar una librería coherente es que todas las funciones que vimos en la sesión previa siguen siendo válidas y se usan igual aunque tengamos ahora un reloj diferente.

Basta con que instalemos el modulo correspondiente al nuevo reloj DS1307. Y para ello descargamos e instalamos una nueva librería aquí Libreria DS1307RTC,

Como lo normal cuando instalas un RTC, es que no tenga la hora ajustada, vamos a empezar por ahí. Vamos a ver si el chip ha sido puesto en hora:

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>  // La libreria que gestiona el DS1307 RTC para Time

void setup()
   {    Serial.begin(9600);
        while (!Serial) ;  // Solo si usas un Arduino Leonardo
        setSyncProvider(RTC.get);     // Sincronizar con el RTC
        if(timeStatus()!= timeSet)
             Serial.println("Unable to sync with the RTC");
        else
             Serial.println("RTC has set the system time");
   }

Las tres primeras líneas cargan las librerías necesarias. Las dos primeras ya las usamos en la sesión anterior y la correspondiente al DS1307 se debe al RTC que vamos a usar. Fíjate en la línea:

  setSyncProvider(RTC.get);     // Sincronizar con el RTC

Las librerías están escritas de forma que usando setSyncProvider() podemos definir el modelo de reloj que vamos a usar y que todo el resto del programa sea el mismo, independientemente de la base del reloj. No esta mal, es la ventaja de usar unas librerías coherentes.

En el setup hacemos uso de timeStatus () para saber si el reloj está o no en hora.  En caso de que no esté en hora podemos añadir al setup una línea más con setTime () para ajustar el reloj. En mi caso he añadido:

setTime(21,46,00,8,11,2014); // Las 21:45:00 del dia 8 de Nov de 2014

Reemplaza la hora por el valor que corresponda y corre el programa para sincronizar el reloj.

 
  • Asegurate de que corres el setTime una única vez, porque si lo haces repetidamente volverás una y otra vez a poner la misma hora en el reloj interno del DS1307.
  • Cuando hayas ejecutado el programa y la hora sea correcta, simplemente convierte en comentario la línea del setTime.
 
Podemos ya escribir un programa completo que nos de la fecha y la hora en la puerta serie. Prog_55_1
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>  // a basic DS1307 library that returns time as a time_t

void setup()
   {   Serial.begin(115200);
       while (!Serial) ;              // Solo para el Leonardo
       setSyncProvider(RTC.get);      // Vamos a usar el RTC

       setTime(21,46,00,8,11,2014); // Las 21:45:00 del dia 8 de Nov de 2014

       if (timeStatus() != timeSet)
           Serial.println("Unable to sync with the RTC");
       else
           Serial.println("RTC has set the system time");
   }
void loop()
   {     digitalClockDisplay();
         delay(1000);
   }
void digitalClockDisplay()
   {     Serial.print(hour());
         printDigits(minute());
         printDigits(second());
         Serial.print(" ");
         Serial.print(day());
         Serial.print(" ");
         Serial.print(month());
         Serial.print(" ");
         Serial.print(year());
         Serial.println();
   }
void printDigits(int digits)
   {     Serial.print(":");
         if(digits < 10)
            Serial.print('0');
         Serial.print(digits);
   }

La función printDigits, se asegura de que siempre haya dos dígitos en los números correspondientes, añadiendo un cero por delante cuando el número es menor que 10, con lo que tendremos un bonito calendario en la puerta serie.

Calendario con RTC

 

Usando la fecha y hora del compilador.

 

Si estás haciendo pruebas con la librería a deshoras, es frecuente que tengas que recompilar una y otra vez tu código, y si cada vez tienes que poner en hora a mano el reloj, lo normal es que acabes dando alaridos de frustración con el asunto (Si fueras alguien tranquilo es poco probable que estuvierasleyendo esto, tendrías un oficio sensato como contable, o abogado de un ayuntamiento).

Pensando en tus vecinos, el compilador de Arduino, dispone de un par de argumentos que nos informan de la fecha y hora de la última compilación: __DATE__ y __TIME__.

Podemos aprovechar esto para poner en hora el reloj interno corriendo un programita que convierta estos valores a formato fecha time_t y asignarlo al valor del reloj interno.

De este modo, aunque arrastraremos un par de segundos de error, asignaremos una hora razonablemente buena al reloj, sin necesidad de estar recompilando continuamente para ponerlo en hora.

Basta con que corráis este programa y la magia se encargara del resto. Los que no creáis en la magia podeis echar una ojeada al programa, porque aunque contiene algunas instrucciones de C++ que no hemos visto no tendréis mucho problema en seguirlo.

Aquí tenéis el programa de Ajuste automatico de fecha y hora

 

Librería TimeAlarms

 

Existe una librería más, relacionada con la librería Time, llamada TimeAlarms que nos permite definir alarmas en nuestro programa, muy al estilo de la que podemos fijar en un reloj despertador.Cuando una alarma dispara, llama a una función específica que se ejecuta en el momento preestablecido.

Podemos descargar la librería TimeAlarms de aquí TimeAlarms.zip

Dispone de varias funciones que vamos a enumerar aquí:

 Función Descripción
Alarm.alarmRepeat(hours, minutes, seconds, function);Crea una alarma que se repite cada día a la hora especificada y ejecuta la función
Alarm.alarmRepeat(dayofweek, hours, minutes, seconds, function);Crea una alarma que dispara solo el día de la semana especificada a la hora prevista
Alarm.alarmOnce(hours, minutes, seconds, function);Dispara mañana una única vez a la hora fijada y ejecuta la función
Alarm.alarmOnce(dayofweek, hours, minutes, seconds, function); .Dispara una única alarma el próximo día de la semana que le digamos y ejecuta la función
Alarm.timerRepeat(seconds, function);Llamará a la función especificada cada tantos segundos
.timerOnce(seconds, function);Llamará una única vez a la función al cabo de los segundos especificados

Es una librería interesante si tenéis que repetir tareas periódicamente (Como enviar datos a algún sitio) y además nos ofrece uno timers cómodos que se ejecutan de forma programada, sin necesidad de definir interrupciones que podrían interferir con otros funciones.

 
  • La librería TimeAlarm no emplea interrupciones, sino que se apoya en la gestión interna de Time,
  • TimeAlarm necesita ningún hardware o RTC especifico, solo requiere que la librería Time esté cargada.
  • Se pueden definir hasta 6 alarmas, cambiando el header de TiemeAlarm.h
  • No se pueden definir intervalos menores de 1 segundo. Para periodos inferiores se requiere usar una interrupción programada o Timer (que veremos en una sesión posterior)
 

Resumen de la sesión

 

 

    • Hemos visto cómo usar un RTC con la librería Time. No hay diferencias con usar el reloj interno de Arduino más allá de definir el  setSyncProvider ().
    • Vimos algún ejemplo de cómo poner el reloj en hora con setTime y usando los argumentos del compilador __TIME__ y __DATE__.
    • Presentamos además la librería de TimeAlrms para disparar funciones en alarmas programadas.
 

 

 

 

 

(197) Comments

  • Tengo una duda…
    Esto me servirá para un horario de colegio?
    Verán lo que quiero hacer es que los maestros habrán las puertas de los salones con RFID pero que si por ejemplo un maestro ‘a’ tiene clase a las 7:30 sólo este pueda abrir y nadie más…
    ¿Esto me serviría?
    Obviamente para llevar el tiempo y así saber a que hora buscar que variable de maestro

    • Buenas tardes Fernando, no veo mayor problema en lo que planteas, pero seria conveniente que dispongas un metodo de seguridad para que alguien mas pueda abrir en caso de cualquier problema. COmo ademas es probable que quieras unir los lectores RFID a un sistema central para poder variar las autorizaciones de las puertas, al final quizas mas que un reloj propio te convenga mas que tomen la hora del pc central que ya tiene la hora y asi todas las cerraduras esten sincronizadas

    • JC serrano

    Antes de nada, y dado que es mi primer comentario agradecería a todos la labor de divulgación que hacéis, es fantástica, profesional, práctica y de mucha calidad.
    Estoy utilzando el reloj RTC 1307 y al cabo de unas horas desconectado pierde la hora, alguien podría decirme los tiempos que es capaz de mantener la hora?. Si apago el arduino unas horas, continua por la hora en que lo apagué y si es algunos días pierde a hora por completo, no se si es por problemas del programa o por el reloj.
    Gracias de antemano.

    • Hola JC, parece que tu reloj no tiene bien la bateria. Puede estar gastada o mal conectada , o quizas mal seleccionado el modelo en la libreria, porque estos relojes aunque no son muy precisos deberian conservar correctamente la hora entre 7 y 10 años aunque desconectes la alimentaciion general, para eso es la bateria

  • Hola admin, un problema que se me ha presentado yo realice un código con el RTC DS3231 y si imprime y todo pero al momento de que quiero que me active cosas como un simple led en tal hora y tal tiempo este no lo realiza no sé a que se deba o como deba declararlo. Me es urgente encontrar una solución pronta

    • Hola Nayeli, basta con que con hagas en el loop un control de tiempo. Algo asi como que cada vez que reanuda el loop compruebas la hora y si es la que buscas pones en marcha una funcion por ejemplo

    • Nightfire

    Hay forma de poder usar la libreria time y timeAlarms con un DS3231?
    porque he bvuscado de todas las formas posbles y no doy con una libreria que me permita utilizarlas
    Gracias

    • Carlos Rojas

    Hola que tal!? este artículo ha sido el primero que me ha aclarado dudas generales sobre el módulo de reloj el cual estoy por comprar un DS1302, lo que me genera una duda, con este módulo podría setear un par de alarmas diarias que accionen un motor stepper? es para un proyecto que tengo. Agradecería cualquier ayuda.

    • Una vez que tienes un reloj en marcha con su respaldo a baterias, puedes comprobar la hora cada tanto tiempo para arrancar un motor o lo que se te ocurra

        • Carlos A Rojas

        Wow muchas gracias! eso era lo que necesitaba saber.

    • Hola Carlos.
      Yo te recomendaría su hermano mayor, el DS3231, que es más preciso pues incorpora compensación de temperatura. Se utilizan de la misma forma.

      Saludos.

        • Carlos A Rojas

        Muchas gracias!! “lamentablemente” compre el que mencioné, pero si hubiera visto tu comentario antes seguro hubiera comprado ese ya que si está disponible aqui en Venezuela

    • Samuel D. Sánchez.

    Buenas noches compañeros!
    Soy muy nuevo con esto de la arduino y la verdad necesito sinceramente de su ayuda! he montado unos 40 leds de 4 colores diferentes, ya tengo el RTC y todo los componentes, el dilema o la duda que tengo es si hay manera de tomar los segundos, los minutos y las horas y tener una variable por cada una y ponerle una condicional para que por ejemplo si el reloj esta en 1, 2 o 3 o más segundos estén encendidos ciertos leds de tal color, cuando estén los minutos igual a 1 o mayor, se enciendan otros y así.. es eso posible?
    Muchisimas gracias desde ya!

    • Hola Samuel, sería posible y bastante sencillo. En vez de (o además de) imprimir la hora, minutos y segundos en el monitor serie como en la sesión, iguálalos a distintas variables. Luego no tienes más que hacer las estructuras if que necesites.
      Por ejemplo:
      int hora = hour();
      if (hora == 6)
      {
      lo que quieras que haga
      }

    • Pablo

    Hola buen dia Disculpen me encontre con un problema con las 6 alarmas ya que necesito un total de 10 y apartir de la 7 me las ignora, uso el DS3231, alguien que me pudiera ayudar

    • Hola Pablo, la librería nos permite 6 alarmas como máximo. No la usado demasiado pero a lo mejor podrías modificarla, o hay alguien que lo haya hecho. Un saludo.

    • Hola Pablo, yo tuve el mismo problema que tu, necesitaba unas 12 alarmas y el programa solo me permitía 6.

      Para solucionarlo, ve al directorio de instalación de la librería “time alarms” (normalmente estará en documentos>>arduino>>libraries>>timealarms). Ahi debes abrir el archivo de tipo “header” con cualquier editor de texto. Ahora solo debes buscar la variable “dtNBR_ALARMS 6” (no te preocupes, no es difícil de encontrar), y sustituir ese seis por el valor que necesites, con un máximo de 255.

      Así podrás tener simultáneamente todas las alarmas que quieras. Espero haberte ayudado, un saludo!

    • Jonathan

    Buen día,

    Estoy intentando usar el codigo de ejemplo pero esta linea me genera error setSyncProvider(RTC.get);

    ‘setSyncProvider’ was not declared in this scope

    Su colaboración gracias.

    • Juan Carlos

    Pensaba que era yo. No aparecen los símbolos de la librería… lo de la librería TIME…. #include TimeLib (cuando debía ser solo #include Time)
    Gracias otra vez.

    • Juan Carlos

    Hola a todos. Escribo esta pregunta aquí, porque no hay un tuto específico para las librerías.
    Justo ahora, voy a usar un RTC, y me he descargado la librería y nada, no funciona. Lo intento desde el programa arduino, importando la librería en archivo ZIP, y lo intento tambien descomprimiendo la carpeta de la librería en la carpeta “libraries” dentro de la carpeta del programa. De ninguna manera me va. Me pasó lo mismo con la librería “Time”, hasta que no se como, al pinchar en añadir libreria al sketch, me añadió la librería con este tipo ” #include ” , (estuve buscando y descargando librerías porque pensaba que eran el problema). Y sigo pensando que hago algo mal, pero no se el que. (Con la DHT22 me funcionó sin problemas)
    ¿Alguien me puede echar una mano? ¿Qué es lo que hago mal? Gracias.

    • Hola Juan Carlos, ¿qué librería es y qué RTC?

    • Hola Juan Carlos, A veces a medida que el entorno IDE va avanzando y el compilador subyacente cambia, las librerias anteriores dejan de funcionar por cualquier detalle de los cambios. Basta con que busques en google github time library o cualquier nombre que la libreria tenga. De este modo iras encontrando las ultimas versiones que ya habran corregido estos problemas. Prueba y me dices algo

  • Hola Admin: No se si lo que te voy a preguntar cabe en este apartado, ya que ando bastante
    perdido. La pregunta ,o mejor dicho la duda que tengo es que e montado 100 led normales para mi acuario y loe programado con arduino uno de la siguiente manera: los 100 led blancos encienden poco a poco hasta llegar a su totalidad de luminosidad, y así permanecerá durante 14 horas. Luego empezará a desvanecer hasta apagarse y empezara a encender 20 led azules hasta su total luminosidad. Este estará encendido durante 10 horas. y luego volver a empezar con los blancos. todo va bien, perfecto. Peroooo, ahí está la duda. aunque va bien no se si el delay que por un lado son 50400000 y por otro 34000000 aguantara y cumplirá los horarios . Esto está bien hecho?. O hay una manera de hacer un sketch acorde a mis necesidades. Por favor me harias un gran favor de contestarme a mi pregunta y de ayudarme a confeccionar lo propio para este trabajillo Mil gracias.

    • Hola Diego, nunca es aconsejable usar delays muy largos, y estos que me comentas no sé no si funcionarán. Si estás usando un rtc usa la hora que puedes sacar de él para programarlo en vez de usar delays. Un saludo.

      • Hola gracias por contestar, pero soy nuevo en este mundillo de arduino y no se que es un rtc. yo lo que tengo montado es el sketch tal como te indico. pero si me indicas que sketch puedo usar te lo agradeceria, ya te digo que soy nuevo y se me hace dificil encontrar lo mejor. Espero tu respuesta gracias

        • Hola Diego.

          Ivan se refiere a un RTC (Real Time Clock), que no es más que un módulo con un chip que una vez programado registra y conserva la hora durante algunos años, mientras tenga carga la pequeña pila de botón que suelen traer. De esos módulos es de lo que se habla en este tutorial.
          Hay básicamente dos modelos: el DS1307 y el DS3231, siendo el segundo algo más preciso. Son fáciles de programar e implementar en cualquier sketch. Arduino en cualquier momento puede solicitar la hora y la fecha actuales y con esto puedes programar el encendido y apagado de esos LEDs del acuario.

          Saludos.

          • Imagen de perfil de Diego

            Hola Jesús. Me alegra que me hayas contestado. si no te importa , ¿te puedo mandar mi sketch? para que lo analices y me dices por favor como debo de hacerlo y como agregar ese modulo, pues no lo e usado nunca y no sabría como adaptarlo a un sketch para este proyecto, pues estoy mas perdido que el barco del arroz.Muchas gracias, espero que me puedas ayudar, gracias de nuevo.

            int Led(10,11);

            void setup(){
            pinMode( 10, OUTPUT);
            pinMode(11, OUTPUT);
            }

            void loop(){
            for( int brillo=0; brillo =0; brillo -=1){
            analogWrite(11,brillo);
            delay(2000);
            }

            digitalWrite(11,LOW);
            delay(34000000);

            for( int brillo=0; brillo =0; brillo -=1){
            analogWrite(10,brillo);
            delay(2000);
            }

            digitalWrite(10,LOW); // Apagamos el LED
            delay(34000000);
            }

    • Sebastian

    Hola estaria necesitando una mano, necesitó encender una salida analogica de una hota determinada a otra hora. Donde puedo buscat información de eso. Quisiera hacerlo con un RTC DS3231

    • no tenemos por ahora tuto sobre el DS3231 pero lo encontraras en seguida buscando en google

    • Victor

    Hola de nuevo, ha pasado un tiempecillo y sigo sin dar con la clave de la libreria… :/ Alguna sugerencia?
    Gracias de antemano!

    • ¿De la libreria de los RTC?

      • Hola! si, es acerca de la librería TimeAlarms. Te escribí hace un tiempo un comentario con mi duda y como no respondías supuse que por alguna razón no pudiste leerlo. Te lo dejo a continuación, pues mi duda sigue existiendo jeje.

        <>

        Gracias!

        • Hola admin y compañia. Necesito que me echeis una mano con la libreria TimeAlarms: ¿Hay alguna forma de poder tener parametros en la funcion que queremos llamar? Me explico:

          Imaginemos que deseo ejecutar una funcion llamada “void Activar_Motores()” cada día a las 8:00. Entonces deberia usar la funcion “Alarm.alarmRepeat(hours, minutes, seconds, function)” del siguiente modo: Alarm.alarmRepeat(8,0,0, Activar_Motores);

          Hasta ahi todo bien. El problema reside en que mi funcion a ejecutar tiene parametros formales en la cabecera de la funcion, es decir, mi funcion realmente es “void Activar_Motores(int x, float y), y si los coloco en la funcion de la libreria me quedaría asi: Alarm.alarmRepeat(8,0,0, Activar_Motores(x,y)) Y aqui es donde me da un error de compilacion (invalid use of void expression). Aclarar que las variables x e y estan previamente definidas asi como la funcion “void Activar_Motores(int x, float y)”.

          Alguna idea para solventar este problema o alguna alternativa? Muchisimas gracias

  • Hola admin y compañia. Necesito que me echeis una mano con la libreria TimeAlarms: ¿Hay alguna forma de poder tener parametros en la funcion que queremos llamar? Me explico:

    Imaginemos que deseo ejecutar una funcion llamada “void Activar_Motores()” cada día a las 8:00. Entonces deberia usar la funcion “Alarm.alarmRepeat(hours, minutes, seconds, function)” del siguiente modo: Alarm.alarmRepeat(8,0,0, Activar_Motores);

    Hasta ahi todo bien. El problema reside en que mi funcion a ejecutar tiene parametros formales en la cabecera de la funcion, es decir, mi funcion realmente es “void Activar_Motores(int x, float y), y si los coloco en la funcion de la libreria me quedaría asi: Alarm.alarmRepeat(8,0,0, Activar_Motores(x,y)) Y aqui es donde me da un error de compilacion (invalid use of void expression). Aclarar que las variables x e y estan previamente definidas asi como la funcion “void Activar_Motores(int x, float y)”.

    Alguna idea para solventar este problema o alguna alternativa? Muchisimas gracias

  • Buenas tardes. Sabes cómo se puede usar el módulo RTC que hay en el shield GPRS? (o al menos supongo que lo hay viendo que tiene hueco para la pila)

    • Hola Juan,

      Tenemos pendiente n tutorial al especto

    • David

    Gracias por responder.
    El reloj esta bien cableado porque si cargo otra librería que encontré por internet y hago el mismo programa funciona sin problemas, ademas de que si desconecto el cualquier cable del RTC automáticamente cambia los valores por otros sin sentido pues pierde la comunicación.
    El problema que le encuentro a la librería usada en este post es que nunca sabes si esta comunicando con el RTC o no (esta claro que se puede modificar para saberlo) , de hecho a raiz de eso descubrí lo del reloj virtual, pensé que era un cable mal conectado, al principio en el setup mira si hay o no comunicación por lo que añadí que ademas del mensaje activara una salida digital u otra a la que conecto un led verde y rojo para saber si la comunicación es correcta, aunque desconecte el RTC al arrancar arduino pues está en el setup y solo lo mira en el primer arranque, siempre dice que esta comunicándose por ahí empece a investigar.
    Todo empezó cuando de vez en cuando en el programa veía que la hora cambiaba sin motivo ya que en el bucle loop no hago ninguna actualización de la hora, por lo que deduzco que ese reloj virtual de vez en cuando hace un poco el “cabra”.
    Todas estas cosas van bien para aprender ya que soy de los que piensan que si haces un programa lo cargas en el arduino y funciona a la primera aprendes 0.
    Te felicito por tu web ya que es muy didactica y siempre que busco algo por google acabo en tu pagina.

    • Muchas gracias David, es un placer

    • David

    Hola, estoy probando tu programa y me he llevado una sorpresa, si desconectas el RTC el programa funciona exactamente igual, por lo que esa libreria que usas o no se comunica con el RTC o es una libreria de un RTC virtual. De hecho si usas una placa arduino uno sin conectar nada y cargas el programa veras que funciona sin RTC.

    • Hola David, en efecto, esa libreria crea un reloj virtual en caso de que no tengas un RTC y ademas te permite manejar varios relojes diferentes

      Pero eso tiene el inconveniente de que el reloj interno de arduino se resetea cada pocos dias lo que puede ser un inconveniente. Parece que no has conectado correctamente tu reloj al arduino y por eso te hace eso

    • Salvador

    EUREKKKA despues de seis horas investigando he dado con el fallo.

    Era la put…. libreria que gastaba.

    no ejecutaba bien la conversion al grabar y al leer de BCD A DEC Y DE DEC A BCD

    lo he arreglado leyendo y escribiento solo la hora con mi codigo ya mañana reparare la libreria porque no he encontrado el fayo si bien he anulado las lineas de programa .

    pero era eso por que grababa el registro tal cual y cuando ya me hiba las 17 18 19 etc horas cuando llegaba a 23 continuaba 24 25 y es por ahi por donde me he hecho un codigo para mostrarme por el serial lo que escribia y leia.
    por lo menos lo tengo solucionado y he aprendido un monton.

    GRACIAS DE TODAS FORMAS.

Give a Reply

WordPress Anti-Spam by WP-SpamShield

KIT DE INICIO A ARDUINO

¡¡Solo en Mayo!!

Antes 72€

¡¡Ahora por sólo 64,95€!!

Comprar