From ccb12d2076bbfd132bdbeb83e3af454201499ee7 Mon Sep 17 00:00:00 2001 From: eleksir Date: Mon, 7 Oct 2019 03:02:25 +0300 Subject: [PATCH] Move Time Compensation feature under define * move Time Compensation feature under define * translte last few eol to unix style * make correction: in my case with bad chrystal rtc runs faster about 9.5 seconds per day --- simpleclock.ino | 37 ++++++++++++++++++++++++++++++------- 1 file changed, 30 insertions(+), 7 deletions(-) diff --git a/simpleclock.ino b/simpleclock.ino index ce9c2ce..41e980b 100644 --- a/simpleclock.ino +++ b/simpleclock.ino @@ -11,6 +11,13 @@ #include #include +/* disable time compensation + * as we borrow more accurate chrystal and solder it to rtc breakboard + */ +//#define TIMECOMP +/* 0.5 second/day compensation flag */ +//#define OFIVECOMP + #define cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit)) #define sbi(sfr, bit) (_SFR_BYTE(sfr) |= _BV(bit)) @@ -29,11 +36,15 @@ unsigned long previousPushTimer = 0; /* dot blinking stuff */ volatile bool dot = true; +#ifdef TIMECOMP /* time inaccuracy compensation flag */ volatile bool compflag1 = true; volatile bool compflag2 = false; -const uint8_t timeSkew = 8; // assume that clock runs faster than should +const uint8_t timeSkew = 9; // assume that clock runs faster than should +#ifdef OFIVECOMP volatile bool timeSkewEven = false; // comp. 1 additional second per 2 days +#endif +#endif /* ambient light compensation aka night mode */ const int photoPin = A2; @@ -132,38 +143,48 @@ ISR(TIMER1_OVF_vect) else dot = true; +#ifdef TIMECOMP /* time compensation magic */ if ((myhour == 21) and (myminute == 21) and (mysecond == 21) and (compflag2)) { compflag1 = true; +#ifdef OFIVECOMP (timeSkewEven) ? timeSkewEven = false : timeSkewEven; +#endif } if ((myhour == 21) and (myminute == 21) and (mysecond == 23)) { compflag1 = false; compflag2 = true; } +#endif } void loop() { unsigned long currentMillis = millis(); +#ifdef TIMECOMP /* * Let's implement time compenstion for individual rtc module time * charachteristics. In in my case quartz resonator as inaccurate as - * about +8.5 seconds per 24 hours + * about +9.5 seconds per 24 hours */ if (compflag1 && compflag2) { +#ifdef OFIVECOMP if (timeSkewEven) { clock.fillByHMS(myhour, myminute, (mysecond - timeSkew - 1)); } else { +#endif clock.fillByHMS(myhour, myminute, (mysecond - timeSkew)); +#ifdef OFIVECOMP } +#endif clock.setTime(); compflag2 = false; } +#endif if (rtcsync) { clock.getTime(); @@ -265,14 +286,16 @@ void loop() void updateTimeStr(uint8_t h, uint8_t m) { - if (dot) { + if (dot) { char str[5]; - sprintf(str, "%2d.%02d", h, m); - Display.setChars(str); - } else { + sprintf(str, "%2d.%02d", h, m); + Display.setChars(str); + } else { char str[4]; sprintf(str, "%2d%02d", h, m); - Display.setChars(str); + Display.setChars(str); } } + + /* vim: set filetype=cpp: */