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
This commit is contained in:
@@ -11,6 +11,13 @@
|
||||
#include <DS1307.h>
|
||||
#include <SevSeg.h>
|
||||
|
||||
/* 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();
|
||||
@@ -275,4 +296,6 @@ void updateTimeStr(uint8_t h, uint8_t m)
|
||||
Display.setChars(str);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* vim: set filetype=cpp: */
|
||||
|
||||
Reference in New Issue
Block a user