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 <DS1307.h>
|
||||||
#include <SevSeg.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 cbi(sfr, bit) (_SFR_BYTE(sfr) &= ~_BV(bit))
|
||||||
#define sbi(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 */
|
/* dot blinking stuff */
|
||||||
volatile bool dot = true;
|
volatile bool dot = true;
|
||||||
|
|
||||||
|
#ifdef TIMECOMP
|
||||||
/* time inaccuracy compensation flag */
|
/* time inaccuracy compensation flag */
|
||||||
volatile bool compflag1 = true;
|
volatile bool compflag1 = true;
|
||||||
volatile bool compflag2 = false;
|
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
|
volatile bool timeSkewEven = false; // comp. 1 additional second per 2 days
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
/* ambient light compensation aka night mode */
|
/* ambient light compensation aka night mode */
|
||||||
const int photoPin = A2;
|
const int photoPin = A2;
|
||||||
@@ -132,38 +143,48 @@ ISR(TIMER1_OVF_vect)
|
|||||||
else
|
else
|
||||||
dot = true;
|
dot = true;
|
||||||
|
|
||||||
|
#ifdef TIMECOMP
|
||||||
/* time compensation magic */
|
/* time compensation magic */
|
||||||
if ((myhour == 21) and (myminute == 21) and (mysecond == 21)
|
if ((myhour == 21) and (myminute == 21) and (mysecond == 21)
|
||||||
and (compflag2)) {
|
and (compflag2)) {
|
||||||
compflag1 = true;
|
compflag1 = true;
|
||||||
|
#ifdef OFIVECOMP
|
||||||
(timeSkewEven) ? timeSkewEven = false : timeSkewEven;
|
(timeSkewEven) ? timeSkewEven = false : timeSkewEven;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((myhour == 21) and (myminute == 21) and (mysecond == 23)) {
|
if ((myhour == 21) and (myminute == 21) and (mysecond == 23)) {
|
||||||
compflag1 = false;
|
compflag1 = false;
|
||||||
compflag2 = true;
|
compflag2 = true;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void loop()
|
void loop()
|
||||||
{
|
{
|
||||||
unsigned long currentMillis = millis();
|
unsigned long currentMillis = millis();
|
||||||
|
|
||||||
|
#ifdef TIMECOMP
|
||||||
/*
|
/*
|
||||||
* Let's implement time compenstion for individual rtc module time
|
* Let's implement time compenstion for individual rtc module time
|
||||||
* charachteristics. In in my case quartz resonator as inaccurate as
|
* 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) {
|
if (compflag1 && compflag2) {
|
||||||
|
#ifdef OFIVECOMP
|
||||||
if (timeSkewEven) {
|
if (timeSkewEven) {
|
||||||
clock.fillByHMS(myhour, myminute, (mysecond - timeSkew - 1));
|
clock.fillByHMS(myhour, myminute, (mysecond - timeSkew - 1));
|
||||||
} else {
|
} else {
|
||||||
|
#endif
|
||||||
clock.fillByHMS(myhour, myminute, (mysecond - timeSkew));
|
clock.fillByHMS(myhour, myminute, (mysecond - timeSkew));
|
||||||
|
#ifdef OFIVECOMP
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
clock.setTime();
|
clock.setTime();
|
||||||
compflag2 = false;
|
compflag2 = false;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
if (rtcsync) {
|
if (rtcsync) {
|
||||||
clock.getTime();
|
clock.getTime();
|
||||||
@@ -275,4 +296,6 @@ void updateTimeStr(uint8_t h, uint8_t m)
|
|||||||
Display.setChars(str);
|
Display.setChars(str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* vim: set filetype=cpp: */
|
/* vim: set filetype=cpp: */
|
||||||
|
|||||||
Reference in New Issue
Block a user