RTC 역량 조사
RTC인 DS1307의 역량 조사
추월전자가 실시간 클록 모듈의 실력을 얻을 수 있는지 조사하다.시간을 설정한 뒤 81일 후의 인터넷 시간과의 차이를 조사했다.
(원래는 100일 후가 될 예정이었으나 실수로 울다가 81일 만에 끝났다.)
컨디션
Arduino IDE에서 M5 Stack을 활용하십시오.이 모듈은 Grove 커넥터를 사용하므로 동일한 커넥터가 있는 M5 Stack을 선택합니다.
소스 코드
기본적으로 여기.의 원본 코드를 직접 사용합니다.
시간 설정
#include <Wire.h>
#include "DS1307.h"
DS1307 clk;//define a object of DS1307 class
void setup() {
Serial.begin(9600);
clk.begin();
Serial.println("Waiting new line ...");
}
int done = 0;
void loop() {
while (!done) {
if (Serial.available()) {
clk.fillByYMD(2021, 5, 31);
clk.fillByHMS(18, 52, 00);
clk.fillDayOfWeek(MON);
clk.setTime();//write time to the RTC chip
(void)Serial.readStringUntil('\n');
done = 1;
}
delay(1);
}
printTime();
}
/*Function: Display time on the serial monitor*/
void printTime() {
clk.getTime();
Serial.print(clk.hour, DEC);
Serial.print(":");
Serial.print(clk.minute, DEC);
Serial.print(":");
Serial.print(clk.second, DEC);
Serial.print(" ");
Serial.print(clk.month, DEC);
Serial.print("/");
Serial.print(clk.dayOfMonth, DEC);
Serial.print("/");
Serial.print(clk.year + 2000, DEC);
Serial.print(" ");
//Serial.print(clk.dayOfMonth);
//Serial.print("*");
switch (clk.dayOfWeek) { // Friendly printout the weekday
case MON:
Serial.print("MON");
break;
case TUE:
Serial.print("TUE");
break;
case WED:
Serial.print("WED");
break;
case THU:
Serial.print("THU");
break;
case FRI:
Serial.print("FRI");
break;
case SAT:
Serial.print("SAT");
break;
case SUN:
Serial.print("SUN");
break;
}
Serial.println(" ");
delay(3000);
}
시퀀스에서 무언가를 입력할 때는'2021년 5월 31일 18시 52분'으로 설정한다.
표시 시간
#include <Wire.h>
#include "DS1307.h"
DS1307 clk;//define a object of DS1307 class
void setup() {
Serial.begin(9600);
clk.begin();
}
void loop() {
printTime();
}
/*Function: Display time on the serial monitor*/
void printTime() {
clk.getTime();
Serial.print(clk.hour, DEC);
Serial.print(":");
Serial.print(clk.minute, DEC);
Serial.print(":");
Serial.print(clk.second, DEC);
Serial.print(" ");
Serial.print(clk.month, DEC);
Serial.print("/");
Serial.print(clk.dayOfMonth, DEC);
Serial.print("/");
Serial.print(clk.year + 2000, DEC);
Serial.print(" ");
//Serial.print(clk.dayOfMonth);
//Serial.print("*");
switch (clk.dayOfWeek) { // Friendly printout the weekday
case MON:
Serial.print("MON");
break;
case TUE:
Serial.print("TUE");
break;
case WED:
Serial.print("WED");
break;
case THU:
Serial.print("THU");
break;
case FRI:
Serial.print("FRI");
break;
case SAT:
Serial.print("SAT");
break;
case SUN:
Serial.print("SUN");
break;
}
Serial.println(" ");
delay(1000);
}
자명하다.
결실
인터넷 시시각각 이용이쪽 정보.예를 들어 10일 후의 결과는 다음과 같다.
열흘 뒤 인터넷 시간과는 6초가량 차이가 났다.81일 후의 결과는 다음과 같다.
일수
10
20
30
40
50
60
70
81
차(초)
6
10
16
22
27
33
38
43
최초 목적의 100일 이후에는 1분가량의 편차(차)가 생길 것으로 추정된다.이 RTC는 정밀도가 그렇게 좋다고 말할 수 없다.다만, 보유 아이폰6가 기내 모드에서 상당한 일수를 뒀을 때(말하자면 한 달도 지나지 않았음) 1분 이상 편차가 있었다.결국 RTC의 실력은 이 정도일지도 모른다.
보통 인터넷과 GPS에서 정확한 시간을 얻기 때문에 RTC의 의미 자체가 미묘하다.
Reference
이 문제에 관하여(RTC 역량 조사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/infinite1oop/items/dcfe5b0bd7f8c9863278
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
#include <Wire.h>
#include "DS1307.h"
DS1307 clk;//define a object of DS1307 class
void setup() {
Serial.begin(9600);
clk.begin();
Serial.println("Waiting new line ...");
}
int done = 0;
void loop() {
while (!done) {
if (Serial.available()) {
clk.fillByYMD(2021, 5, 31);
clk.fillByHMS(18, 52, 00);
clk.fillDayOfWeek(MON);
clk.setTime();//write time to the RTC chip
(void)Serial.readStringUntil('\n');
done = 1;
}
delay(1);
}
printTime();
}
/*Function: Display time on the serial monitor*/
void printTime() {
clk.getTime();
Serial.print(clk.hour, DEC);
Serial.print(":");
Serial.print(clk.minute, DEC);
Serial.print(":");
Serial.print(clk.second, DEC);
Serial.print(" ");
Serial.print(clk.month, DEC);
Serial.print("/");
Serial.print(clk.dayOfMonth, DEC);
Serial.print("/");
Serial.print(clk.year + 2000, DEC);
Serial.print(" ");
//Serial.print(clk.dayOfMonth);
//Serial.print("*");
switch (clk.dayOfWeek) { // Friendly printout the weekday
case MON:
Serial.print("MON");
break;
case TUE:
Serial.print("TUE");
break;
case WED:
Serial.print("WED");
break;
case THU:
Serial.print("THU");
break;
case FRI:
Serial.print("FRI");
break;
case SAT:
Serial.print("SAT");
break;
case SUN:
Serial.print("SUN");
break;
}
Serial.println(" ");
delay(3000);
}
#include <Wire.h>
#include "DS1307.h"
DS1307 clk;//define a object of DS1307 class
void setup() {
Serial.begin(9600);
clk.begin();
}
void loop() {
printTime();
}
/*Function: Display time on the serial monitor*/
void printTime() {
clk.getTime();
Serial.print(clk.hour, DEC);
Serial.print(":");
Serial.print(clk.minute, DEC);
Serial.print(":");
Serial.print(clk.second, DEC);
Serial.print(" ");
Serial.print(clk.month, DEC);
Serial.print("/");
Serial.print(clk.dayOfMonth, DEC);
Serial.print("/");
Serial.print(clk.year + 2000, DEC);
Serial.print(" ");
//Serial.print(clk.dayOfMonth);
//Serial.print("*");
switch (clk.dayOfWeek) { // Friendly printout the weekday
case MON:
Serial.print("MON");
break;
case TUE:
Serial.print("TUE");
break;
case WED:
Serial.print("WED");
break;
case THU:
Serial.print("THU");
break;
case FRI:
Serial.print("FRI");
break;
case SAT:
Serial.print("SAT");
break;
case SUN:
Serial.print("SUN");
break;
}
Serial.println(" ");
delay(1000);
}
Reference
이 문제에 관하여(RTC 역량 조사), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/infinite1oop/items/dcfe5b0bd7f8c9863278텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)