ทำไมนาฬิกาเวลาจริงของฉันถึงผิดเวลาจากพีซีของฉัน


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

ฉันได้ลองตั้งเวลาด้วยตนเองบน RTC ด้วยตนเอง แต่ท้ายที่สุดแล้วก็มีปัญหาเดียวกัน: RTC นั้นอยู่หลัง 32-33 วินาทีเสมอตามที่ฉันตั้งไว้ ความล่าช้าเกิดขึ้นทันทีที่ฉันสเก็ตช์ ดูเหมือนแปลกมากสำหรับฉันที่ไม่ว่าฉันจะพยายามกำหนดเวลาอย่างไรฉันก็จบลงด้วยข้อผิดพลาดเดียวกันทั้งหมด ฉันสามารถบอก Arduino ให้รายงานเวลาเป็น 33 วินาทีหลังจากสิ่งที่ RTC บอกว่ามันเป็น แต่วิธีนี้ดูเหมือนจะไม่สมบูรณ์และฉันกังวลว่ามีบางอย่างผิดปกติกับ RTC ของฉันหรือวิธีที่ฉันใช้งาน

ฉันใช้ Arduino Uno กับชุดประกอบ Data Logging Shield จาก Adafruit ตัวป้องกันการบันทึกข้อมูลใช้ DS1307 RTC มีใครเคยมีปัญหานี้มาก่อนหรือมีแนวคิดใด ๆ เกี่ยวกับสิ่งที่อาจเป็นสาเหตุให้เกิดขึ้น ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชมมาก


ฉันได้ใช้คำอธิบาย Hugo Bertini และ Oli เพื่อใช้ในโครงการของฉันและใช้งานได้! ขอบคุณ (: แต่มันจะเร็วขึ้น 26 วินาที ....
Ahmad Zaki Aiman ​​Abdul Rashid

คำตอบ:


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);

ขอแสดงความนับถือ Hugo Bertini


-1

Arduino ใช้เวลาคอมพิวเตอร์และส่งไปยัง DS1307 เวลาที่ใช้ในการคัดลอกคือเวลาที่คุณเห็นผิด ฉันจะแก้ปัญหาด้วยการเพิ่มเวลาคอมพิวเตอร์ในเวลาไม่กี่วินาทีที่คุณต้องบอกว่าล่าช้าและเมื่อการเขียนโปรแกรมคุณควรมีเวลาที่แน่นอน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.