Quiero que mi reloj de tiempo real establezca su hora como la hora en mi PC. Sin embargo, cuando ejecuto el siguiente boceto, el reloj en tiempo real informa que la hora es 32-33 segundos antes de lo que dice mi PC.
#include <Wire.h>
#include "RTClib.h"
RTC_DS1307 RTC;
void setup () {
Serial.begin(57600);
Wire.begin();
RTC.begin();
if (! RTC.isrunning()) {
Serial.println("RTC is NOT running!");
// following line sets the RTC to the date & time this sketch was compiled
// uncomment it & upload to set the time, date and start run the RTC!
RTC.adjust(DateTime(__DATE__, __TIME__));
}
}
void loop () {
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
}
También he intentado configurar manualmente la hora en el RTC, pero termino con el mismo problema: el RTC siempre está 32-33 segundos detrás de lo que configuré. El retraso ocurre tan pronto como ejecuto el boceto. Me parece muy extraño que no importa cómo intente establecer la hora, termino exactamente con el mismo error. Puedo decirle al Arduino que informe que el tiempo es 33 segundos después de lo que dice el RTC, pero esta solución parece un poco incompleta, y me preocupa que algo esté fundamentalmente mal con mi RTC o la forma en que lo estoy usando.
Estoy usando un Arduino Uno con un escudo de registro de datos ensamblado de Adafruit. El escudo de registro de datos utiliza un DS1307 RTC. ¿Alguien ha tenido este problema antes o tiene alguna idea sobre lo que podría estar causándolo? Cualquier ayuda sería muy apreciada.
fuente
Respuestas:
Los
__DATE__
y__TIME__
se configuran cuando el código se está compilando, por lo que, naturalmente, estarán atrasados, ya que el código aún debe terminar de compilarse y luego enviarse al chip.Vea el Arduino Playground para ver un ejemplo de cómo sincronizarlo con su computadora en serie.
fuente
Puede corregir el desplazamiento llamando una vez al siguiente código en la
setup()
función:fuente
Estoy experimentando un problema similar con un Arduino UNO y un Nano. Ambos desde la misma PC. De hecho, parece que se refleja el tiempo que lleva desde el tiempo de compilación hasta la carga + el inicio de MCU.
Suponiendo que el RTC tiene una buena batería y los tiempos de compilación + carga son consistentes, entonces agregar una compensación de deriva al código parece ser el truco. Así es como lo hice (en mi caso, 7 segundos hicieron el "truco" - lo siento por el código de hardo, pero es solo para fines de descripción):
Saludos, Hugo Bertini
fuente
El Arduino toma el tiempo de la computadora y lo envía al DS1307. El tiempo que lleva copiar es el que está viendo mal. Resolvería el problema adelantando el tiempo de la computadora los segundos necesarios que usted dice que se retrasan y cuando programe debe tener el tiempo exacto.
fuente