OpenChargeMicro/Software/src/clock.cpp

103 lines
1.7 KiB
C++
Raw Normal View History

2018-11-22 11:50:11 +01:00
/*
* clock.cpp
*
* Created on: 22.11.2018
* Author: Hendrik Schutter
*/
#include "openChargeMicro.h"
2018-11-25 22:19:42 +01:00
unsigned long int systemTime; // 0 to 4294967295 sec
2018-11-22 11:50:11 +01:00
2018-11-22 14:17:39 +01:00
/* Only call once */
2018-11-22 11:50:11 +01:00
clock::clock() {
2018-11-22 14:17:39 +01:00
//TODO Singleton
2018-11-22 11:50:11 +01:00
systemTime = 0;
clock_init();
2018-11-25 22:04:09 +01:00
#ifdef DEBUG
2018-11-22 11:50:11 +01:00
serialSend("init clock\r\n");
2018-11-25 22:04:09 +01:00
#endif
2018-11-22 11:50:11 +01:00
}
clock::~clock() {
}
void clock::clock_init() {
OCR1A = 0x3D08; // --> 1 sec
2018-11-25 22:04:09 +01:00
//OCR1A = 0x7A11; // --> 2 sec
2018-11-22 11:50:11 +01:00
TCCR1B |= (1 << WGM12);
// Mode 4, CTC on OCR1A
TIMSK1 |= (1 << OCIE1A);
//Set interrupt on compare match
TCCR1B |= (1 << CS12) | (1 << CS10);
// set prescaler to 1024 and start the timer
2018-11-25 22:19:42 +01:00
sei();
//enable interrupts
2018-11-22 11:50:11 +01:00
}
2018-11-22 14:17:39 +01:00
/* get seconds since boot*/
2018-11-25 22:19:42 +01:00
unsigned long int clock::getTime() {
2018-11-22 11:50:11 +01:00
return systemTime;
}
2018-11-22 14:17:39 +01:00
/* get time struct since time stamp */
2018-11-22 11:50:11 +01:00
struct time_t clock::getTime(struct time_t pTime) {
struct time_t ret;
2018-11-22 14:17:39 +01:00
ret.seconds = (getTime() - pTime.seconds);
ret.diffSecond = ret.seconds;
ret.diffMinute = 0;
ret.diffHour = 0;
while (ret.diffSecond > 59) {
ret.diffSecond = ret.diffSecond - 60;
ret.diffMinute++;
}
while (ret.diffMinute > 59) {
ret.diffMinute = ret.diffMinute - 60;
ret.diffHour++;
}
return ret;
}
/* get time struct as time stamp */
struct time_t clock::getTimeStamp() {
struct time_t ret;
ret.seconds = getTime();
2018-11-22 11:50:11 +01:00
ret.diffSecond = ret.seconds;
ret.diffMinute = 0;
ret.diffHour = 0;
while (ret.diffSecond > 59) {
2018-11-25 22:19:42 +01:00
ret.diffSecond = ret.diffSecond - 60;
2018-11-22 11:50:11 +01:00
ret.diffMinute++;
}
while (ret.diffMinute > 59) {
2018-11-25 22:04:09 +01:00
ret.diffMinute = ret.diffMinute - 60;
2018-11-22 11:50:11 +01:00
ret.diffHour++;
}
return ret;
}
ISR (TIMER1_COMPA_vect) {
// action to be done every 1 sec
2018-11-22 14:17:39 +01:00
systemTime++; //increase system time
2018-11-25 16:58:13 +01:00
updateChargers();
2018-11-22 11:50:11 +01:00
}
2018-11-26 21:42:12 +01:00
2018-11-28 15:16:59 +01:00
2018-11-26 21:42:12 +01:00
ISR(__vector_default) {
}
2018-11-28 15:16:59 +01:00
2018-11-26 21:42:12 +01:00