Je veux que mon horloge en temps réel règle son heure comme l'heure sur mon PC. Cependant, lorsque j'exécute l'esquisse suivante, l'horloge en temps réel signale l'heure comme étant 32-33 secondes plus tôt que mon ordinateur ne le dit.
#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();
}
J'ai également essayé de régler manuellement l'heure sur le RTC, mais je me retrouve avec le même problème: le RTC est toujours 32-33 secondes derrière ce que je l'ai réglé. Le décalage se produit dès que je lance le croquis. Il me semble très étrange que peu importe comment j'essaie de régler l'heure, je me retrouve avec exactement la même erreur. Je peux dire à l'Arduino de signaler le temps comme étant 33 secondes après ce que le RTC dit qu'il est, mais cette solution semble un peu sommaire, et je crains que quelque chose ne fonctionne fondamentalement avec mon RTC ou la façon dont je l'utilise.
J'utilise un Arduino Uno avec un bouclier de journalisation de données assemblé d'Adafruit. Le bouclier d'enregistrement des données utilise un RTC DS1307. Quelqu'un a-t-il déjà eu ce problème ou a-t-il une idée de ce qui pourrait en être la cause? Toute aide serait très appréciée.
la source
Réponses:
Les
__DATE__
et__TIME__
sont définis lorsque le code est en cours de compilation, ils seront donc naturellement en retard, car le code doit encore terminer la compilation, puis être flashé sur la puce.Voir l' Arduino Playground pour un exemple de la façon de le synchroniser avec votre ordinateur via série.
la source
Vous pouvez corriger le décalage en appelant une fois le code suivant dans la
setup()
fonction:la source
Je rencontre un problème similaire avec un Arduino UNO et un Nano. Les deux à partir du même PC. En effet, il semble que le temps qu'il faut entre la compilation et le téléchargement + le démarrage du MCU se reflète.
En supposant que le RTC a une bonne batterie et que les temps de compilation et de téléchargement sont cohérents, l'ajout d'une compensation de dérive au code semble faire l'affaire. Voici comment je l'ai fait (dans mon cas, 7 secondes ont fait le "truc" - désolé pour le hardocode, mais c'est à des fins de simple description):
Cordialement, Hugo Bertini
la source
L'Arduino prend le temps de l'ordinateur et l'envoie au DS1307. Le temps qu'il faut pour copier est celui que vous voyez mal. Je résoudrais le problème en faisant avancer l'heure de l'ordinateur des secondes nécessaires que vous dites retardées et lors de la programmation, vous devriez avoir l'heure exacte.
la source