Saya ingin jam waktu-nyata saya mengatur waktunya sebagai waktu di PC saya. Namun, ketika saya menjalankan sketsa berikut, jam waktu sebenarnya melaporkan waktu 32-33 detik lebih awal dari PC saya mengatakan waktunya.
#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();
}
Saya juga mencoba secara manual mengatur waktu pada RTC, tetapi saya berakhir dengan masalah yang sama: RTC selalu 32-33 detik di belakang apa yang saya atur. Kelambatan terjadi segera setelah saya menjalankan sketsa. Sepertinya sangat aneh bagi saya bahwa tidak peduli bagaimana saya mencoba mengatur waktu, saya berakhir dengan kesalahan yang persis sama. Saya dapat memberitahu Arduino untuk melaporkan waktu 33 detik setelah apa yang dikatakan RTC, tetapi solusi ini tampaknya agak samar, dan saya khawatir ada sesuatu yang salah dengan RTC saya atau cara saya menggunakannya.
Saya menggunakan Arduino Uno dengan Shield Data Logging Shield dari Adafruit. Pelindung pencatatan data menggunakan DS1307 RTC. Adakah yang pernah mengalami masalah ini sebelumnya, atau memiliki ide tentang apa yang menyebabkannya? Bantuan apa pun akan sangat dihargai.
sumber
Jawaban:
The
__DATE__
dan__TIME__
ditetapkan ketika kode ini kompilasi sehingga mereka secara alami akan berada di belakang karena kode masih perlu menyelesaikan kompilasi dan kemudian melintas ke chip.Lihat Arena Bermain Arduino untuk contoh cara menyinkronkannya ke komputer Anda melalui serial.
sumber
Anda dapat memperbaiki offset dengan memanggil sekali kode berikut dalam
setup()
fungsi:sumber
Saya mengalami masalah serupa dengan Arduino UNO dan Nano. Keduanya dari PC yang sama. Memang sepertinya waktu yang dibutuhkan dari waktu kompilasi untuk mengunggah + MCU mulai tercermin.
Dengan asumsi RTC memiliki baterai yang bagus dan waktu kompilasi + unggahan konsisten, kemudian menambahkan kompensasi melayang ke kode tampaknya melakukan trik. Inilah cara saya melakukannya (dalam kasus saya 7 detik melakukan "trik" - maaf untuk hardocode, tapi itu hanya untuk tujuan deskripsi):
Salam, Hugo Bertini
sumber
Arduino membutuhkan waktu komputer dan mengirimkannya ke DS1307. Waktu yang diperlukan untuk menyalin adalah salah satu yang Anda lihat salah. Saya akan memecahkan masalah dengan memajukan waktu komputer detik-detik yang diperlukan yang Anda katakan tertunda dan ketika pemrograman Anda harus memiliki waktu yang tepat.
sumber