मेरे वास्तविक समय की घड़ी को मेरे पीसी से गलत समय क्यों मिल रहा है?


10

मैं चाहता हूं कि मेरी वास्तविक समय की घड़ी मेरे पीसी पर अपना समय निर्धारित करे। हालाँकि, जब मैं निम्नलिखित स्केच चलाता हूं, तो वास्तविक समय की घड़ी मेरे पीसी के समय से 32-33 सेकंड पहले होने का समय बताती है।

#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();
}

मैंने आरटीसी पर समय को मैन्युअल रूप से सेट करने का भी प्रयास किया है, लेकिन मैं उसी समस्या को समाप्त करता हूं: आरटीसी हमेशा 32-33 सेकंड के पीछे है जो मैंने इसे सेट किया है। स्केच चलाते ही लैग होता है। यह मुझे बहुत अजीब लगता है कि कोई फर्क नहीं पड़ता कि मैं कैसे समय निर्धारित करने की कोशिश करता हूं, मैं बिल्कुल उसी त्रुटि के साथ समाप्त होता हूं। मैं आरडीसीओ को आरटीसी के कहने के 33 सेकंड बाद के समय की रिपोर्ट करने के लिए कह सकता हूं, लेकिन यह समाधान एक प्रकार का स्केच लगता है, और मुझे चिंता है कि कुछ मेरे आरटीसी के साथ मौलिक रूप से गलत है या जिस तरह से मैं इसका उपयोग कर रहा हूं।

मैं Adafruit के एक इकट्ठे डेटा लॉगिंग शील्ड के साथ एक Arduino Uno का उपयोग कर रहा हूं। डेटा लॉगिंग शील्ड एक DS1307 RTC का उपयोग करता है। क्या किसी को भी यह समस्या पहले हुई है, या इसके बारे में कोई विचार है कि यह क्या कारण हो सकता है? कोई भी सहायताकाफी प्रशंसनीय होगी।


Ive ने मेरी परियोजनाओं में उपयोग करने के लिए ह्यूगो बर्टिनी और ओली स्पष्टीकरण लिया और यह काम करता है! धन्यवाद (: लेकिन यह 26 सेकंड से भी तेज हो जाता है ....
अहमद जकी एमान अब्दुल राशिद

जवाबों:


17

__DATE__और __TIME__स्थापित कर रहे हैं जब कोड संकलन है, ताकि वे स्वाभाविक रूप से पीछे हो जाएगा के बाद से कोड अभी भी संकलन खत्म करने के लिए और फिर चिप के लिए भेजा जा जरूरत है।

सीरियल पर अपने कंप्यूटर को कैसे सिंक करें, इसके उदाहरण के लिए Arduino Playground देखें ।

TimeSerial.pde बाहरी हार्डवेयर के बिना एक घड़ी के रूप में Arduino दिखाता है।

यह सीरियल पोर्ट पर भेजे गए समय के संदेशों द्वारा सिंक्रनाइज़ किया जाता है। यदि यह चल रहा है और Arduino सीरियल पोर्ट से जुड़ा है, तो एक साथी प्रसंस्करण स्केच स्वचालित रूप से इन संदेशों को प्रदान करेगा।


0

आप setup()फ़ंक्शन में निम्न कोड को एक बार कॉल करके ऑफसेट को ठीक कर सकते हैं :

RTC_DS3231 rtc;

DateTime now = rtc.now();
rtc.adjust(DateTime(now.unixtime() + 10)); // add 10s to current time for fixing the offset

0

मैं एक Arduino UNO और एक नैनो के साथ एक समान समस्या का सामना कर रहा हूं। दोनों एक ही पीसी से। वास्तव में ऐसा लग रहा है कि कंपाइल टाइम से लेकर अपलोड + MCU शुरू होने तक का समय परिलक्षित होता है।

मान लें कि RTC में एक अच्छी बैटरी है और संकलन + अपलोड समय सुसंगत है, तो कोड में एक बहाव मुआवजे को जोड़ने के लिए चाल लगती है। यहाँ मैंने यह कैसे किया (मेरे मामले में 7 सेकंड में "ट्रिक" किया गया - हार्डकोड के लिए खेद है, लेकिन यह केवल अन्य उद्देश्यों के लिए है:

RTC.adjust(DateTime(__DATE__, __TIME__));
DateTime t = DateTime(RTC.now().unixtime()+7);
RTC.adjust(t);

सादर, ह्यूगो बर्टिनी


-1

Arduino कंप्यूटर समय लेता है और इसे DS1307 पर भेजता है। कॉपी करने में लगने वाला समय वह है जिसे आप गलत देख रहे हैं। मैं कंप्यूटर के समय को आपके द्वारा कहे गए आवश्यक सेकंड्स को आगे बढ़ाते हुए समस्या को हल करूँगा और जब प्रोग्रामिंग करना हो तो आपके पास सटीक समय होना चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.