diff --git a/main.c b/main.c index c8ce75a..39db399 100644 --- a/main.c +++ b/main.c @@ -55,12 +55,7 @@ volatile bool rtc_internal_tick_flag = false; /**< flag set when internal RTC ticked */ /** @} */ -/** @defgroup main_timer timer used to periodically query the meter measurements - * @{ - */ -#define MAIN_TIMER 4 /**< timer number */ -#define MAIN_PERIOD 10.0 /**< period in seconds to query meter measurements */ -/** @} */ +#define QUERY_PERIOD 10 /**< period in seconds to query meter measurements */ int _write(int file, char *ptr, int len) @@ -275,20 +270,6 @@ void main(void) radio_esp8266_setup(); printf("OK\n"); - // setup timer to periodically query meter measurements - printf("setup query timer (%.0fs): ", MAIN_PERIOD); - rcc_periph_clock_enable(RCC_TIM(MAIN_TIMER)); // enable clock for timer block - timer_reset(TIM(MAIN_TIMER)); // reset timer state - timer_set_mode(TIM(MAIN_TIMER), TIM_CR1_CKD_CK_INT, TIM_CR1_CMS_EDGE, TIM_CR1_DIR_UP); // set timer mode, use undivided timer clock,edge alignment (simple count), and count up - timer_set_prescaler(TIM(MAIN_TIMER), 0xffff); // set the prescaler so this 16 bits timer allows to wait for ~60s ( (2**16)/(2**16)/72E6=59.65s ) - timer_set_period(TIM(MAIN_TIMER), MAIN_PERIOD*(rcc_ahb_frequency/(TIM_PSC(TIM(MAIN_TIMER))+1))); // set period for meter measurements queries - timer_set_counter(TIM(MAIN_TIMER), 0); // reset timer counter to get preset waiting time - timer_clear_flag(TIM(MAIN_TIMER), TIM_SR_UIF); // clear flag - timer_enable_irq(TIM(MAIN_TIMER), TIM_DIER_UIE); // enable update interrupt for timer (timer overflows when period is reached) - //nvic_enable_irq(NVIC_TIM_IRQ(MAIN_TIMER)); // allow interrupt for timer just to wake up - timer_enable_counter(TIM(MAIN_TIMER)); // start timer for periodic queries - printf("OK\n"); - #if !(DEBUG) //setup watchdog to reset in case we get stuck (i.e. when an error occurred) printf("setup watchdog (%.2fs): ",WATCHDOG_PERIOD/1000.0); @@ -489,6 +470,17 @@ void main(void) if ((ticks_time%(60))==0) { // one minute passed printf("uptime: %lu.%02lu:%02lu:%02lu\n", ticks_time/(60*60*24), (ticks_time/(60*60))%24, (ticks_time%(60*60))/60, (ticks_time%60)); // display external time } + if ((ticks_time%(QUERY_PERIOD))==0) { // query period passed + printf("query meter measurements (%lu.%02lu:%02lu:%02lu)\n", ticks_time/(60*60*24), (ticks_time/(60*60))%24, (ticks_time%(60*60))/60, (ticks_time%60)); + // start getting all PZEM-004T measurements from all meters + pzem_meter = 0; // reset PZEM meter number + pzem_measurement = 0; // reset PZEM measurement index + sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request first measurement + // start getting all SDM120 measurements from all meters + sdm120_meter = 0; // reset SDM120 meter number + sdm120_measurement = 0; // reset SDM120 measurement index + sensor_sdm120_measurement_request(1+sdm120_meter, sdm120_measurement); // request first measurement + } } while (pzem_meter>=LENGTH(pzem_measurements) && sdm120_meter>=LENGTH(sdm120_measurements)) { // all measurements received for all meter action = true; // action has been performed @@ -600,19 +592,6 @@ void main(void) sdm120_meter = 0; // reset meter } - while (timer_get_flag(TIM(MAIN_TIMER), TIM_SR_UIF)) { // timer update event -> query measurements - timer_clear_flag(TIM(MAIN_TIMER), TIM_SR_UIF); // clear flag - action = true; // action has been performed - printf("query meter measurements (%lu.%02lu:%02lu:%02lu)\n", ticks_time/(60*60*24), (ticks_time/(60*60))%24, (ticks_time%(60*60))/60, (ticks_time%60)); - // start getting all PZEM-004T measurements from all meters - pzem_meter = 0; // reset PZEM meter number - pzem_measurement = 0; // reset PZEM measurement index - sensor_pzem_measurement_request(0xc0a80100+pzem_meter, pzem_measurement); // request first measurement - // start getting all SDM120 measurements from all meters - sdm120_meter = 0; // reset SDM120 meter number - sdm120_measurement = 0; // reset SDM120 measurement index - sensor_sdm120_measurement_request(1+sdm120_meter, sdm120_measurement); // request first measurement - } if (action) { // go to sleep if nothing had to be done, else recheck for activity action = false; } else {