Gerçek zamanlı saatim neden bilgisayarımdan yanlış zaman alıyor?


10

Gerçek zamanlı saatimin zamanını bilgisayarımdaki saat olarak ayarlamasını istiyorum. Ancak, aşağıdaki çizimi çalıştırdığımda, gerçek zamanlı saat, zamanı bilgisayarımın zamanından 32-33 saniye önce bildiriyor.

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

Ayrıca RTC'de zamanı manuel olarak ayarlamayı denedim, ancak aynı sorunla karşılaşıyorum: RTC her zaman ayarladığımdan 32-33 saniye geridedir. Gecikme, çizimi çalıştırdığımda olur. Zamanı nasıl ayarlamaya çalışsam da tamamen aynı hatayla karşılaşıyorum. Arduino'ya zamanı RTC'nin söylediklerinden 33 saniye sonra bildirmesini söyleyebilirim, ancak bu çözüm biraz kabataslak görünüyor ve RTC'mde veya onu kullanma şeklimde bir şeylerin yanlış olduğundan endişeleniyorum.

Adafruit'dan birleştirilmiş Veri Günlüğü Kalkanı ile Arduino Uno kullanıyorum. Veri kaydı kalkanı bir DS1307 RTC kullanır. Bu sorun daha önce olmuş veya neye neden olabileceği hakkında bir fikri olan var mı? Herhangi bir yardım çok takdir edilecektir.


Hugo Bertini ve Oli'yi projelerimde kullanmak için açıklama aldım ve işe yarıyor! Teşekkür ederim (: ama 26 saniye daha hızlı gidiyor ....
Ahmad Zaki Aiman ​​Abdul Rashid

Yanıtlar:


17

__DATE__Ve __TIME__kod hala derleme bitirmek ve sonra çip flaşlar ihtiyacı beri onlar doğal arkasında olacak böylece kod derleme zaman ayarlanır.

Seri üzerinden bilgisayarınıza nasıl senkronize edileceğine ilişkin bir örnek için Arduino Playground'a bakın .

TimeSerial.pde, Arduino'yu harici donanımı olmayan bir saat olarak gösterir.

Seri port üzerinden gönderilen zaman mesajları ile senkronize edilir. Refakatçi İşleme çizimi Arduino seri portuna çalışıyorsa ve bağlıysa bu mesajları otomatik olarak sağlayacaktır.


0

İşlevde aşağıdaki kodu bir kez çağırarak ofseti düzeltebilirsiniz 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 ve Nano ile benzer bir sorun yaşıyorum. Her ikisi de aynı bilgisayardan. Gerçekten de derleme zamanından yüklemek için geçen süre + MCU başlatması yansıtılmış gibi görünüyor.

RTC'nin iyi bir bataryaya sahip olduğu ve derleme + yükleme sürelerinin tutarlı olduğu varsayıldığında, koda bir sürüklenme telafisi eklemek hile yapıyor gibi görünüyor. İşte nasıl yaptım (benim durumumda 7 saniye "hile" yaptı - hardocode için üzgünüm, ama bu sadece açıklama amaçlıdır):

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

Saygılarımızla, Hugo Bertini


-1

Arduino bilgisayarın zamanını alır ve DS1307'ye gönderir. Kopyalama süresi yanlış gördüğünüz zamandır. Sorunu, bilgisayar saatini geciktirdiğinizi söylediğiniz gerekli saniye geciktirerek çözerdim ve programlama yaparken tam zamanınız olmalıdır.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.