fix RTC period (onboard led toggling affects it)
This commit is contained in:
parent
4db6a2b455
commit
3569fe5958
64
main.c
64
main.c
@ -252,7 +252,7 @@ void main(void)
|
||||
|
||||
// setup RTC
|
||||
printf("setup internal RTC: ");
|
||||
rtc_auto_awake(RCC_LSE, 32768-1); // ensure internal RTC is on, uses the 32.678 kHz LSE, and the prescale is set to our tick speed, else update backup registers accordingly (power off the micro-controller for the change to take effect)
|
||||
rtc_auto_awake(RCC_LSE, 0x8000-1); // ensure internal RTC is on, uses the 32.768 kHz LSE, and the prescale is set to our tick speed, else update backup registers accordingly (power off the micro-controller for the change to take effect)
|
||||
rtc_interrupt_enable(RTC_SEC); // enable RTC interrupt on "seconds"
|
||||
nvic_enable_irq(NVIC_RTC_IRQ); // allow the RTC to interrupt
|
||||
printf("OK\n");
|
||||
@ -361,25 +361,26 @@ void main(void)
|
||||
while (true); // unhandled error
|
||||
}
|
||||
if (measurement.valid) { // only show valid measurement
|
||||
printf("PZEM-004T meter %u ", pzem_meter);
|
||||
switch (measurement.type) {
|
||||
case SENSOR_PZEM_VOLTAGE:
|
||||
printf("PZEM-004T meter %u voltage: %.01f V\n", pzem_meter, measurement.value.voltage); // display measurement
|
||||
printf("voltage: %.01f V\n", measurement.value.voltage); // display measurement
|
||||
break;
|
||||
case SENSOR_PZEM_CURRENT:
|
||||
printf("PZEM-004T meter %u current: %.02f A\n", pzem_meter, measurement.value.current);
|
||||
printf("current: %.02f A\n", measurement.value.current);
|
||||
break;
|
||||
case SENSOR_PZEM_POWER:
|
||||
printf("PZEM-004T meter %u power: %u W\n", pzem_meter, measurement.value.power);
|
||||
printf("power: %u W\n", measurement.value.power);
|
||||
break;
|
||||
case SENSOR_PZEM_ENERGY:
|
||||
printf("PZEM-004T meter %u energy: %lu Wh\n", pzem_meter, measurement.value.energy);
|
||||
printf("energy: %lu Wh\n", measurement.value.energy);
|
||||
break;
|
||||
/* not used for this application
|
||||
case SENSOR_PZEM_ADDRESS:
|
||||
printf("PZEM-004T meter %u address set\n", pzem_id);
|
||||
printf("address set\n");
|
||||
break;
|
||||
case SENSOR_PZEM_ALARM:
|
||||
printf("PZEM-004T meter %u alarm threshold set\n", pzem_id);
|
||||
printf("alarm threshold set\n");
|
||||
break;
|
||||
*/
|
||||
default:
|
||||
@ -415,7 +416,50 @@ void main(void)
|
||||
while (true); // unhandled error
|
||||
} else {
|
||||
sdm120_measurements[sdm120_meter][sdm120_measurement] = measurement; // save measurement
|
||||
printf("SDM120 meter %u measurement %u: %.01f\n", sdm120_meter, sdm120_measurement, measurement);
|
||||
printf("SDM120 meter %u ", sdm120_meter); // display measurement
|
||||
switch (sdm120_measurement) {
|
||||
case SENSOR_SDM120_VOLTAGE:
|
||||
printf("voltage: %.01f V\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_CURRENT:
|
||||
printf("current: %.02f A\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_POWER_ACTIVE:
|
||||
printf("power (active): %.0f W\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_POWER_APPARENT:
|
||||
printf("power (apparent): %.0f VA\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_POWER_REACTIVE:
|
||||
printf("power (reactive): %.0f VAr\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_POWER_FACTOR:
|
||||
printf("power factor: %.02f\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_FREQUENCY:
|
||||
printf("frequency: %.02f Hz\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_ENERGY_ACTIVE_IMPORT:
|
||||
printf("energy (import,active): %.02f KWh\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_ENERGY_ACTIVE_EXPORT:
|
||||
printf("energy (export,active): %.02f kWh\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_ENERGY_REACTIVE_IMPORT:
|
||||
printf("energy (import,reactive): %.02f kVArh\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_ENERGY_REACTIVE_EXPORT:
|
||||
printf("energy (export,reactive): %.02f kVArh\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_ENERGY_ACTIVE_TOTAL:
|
||||
printf("energy (active,total): %.02f kWh\n", measurement);
|
||||
break;
|
||||
case SENSOR_SDM120_ENERGY_REACTIVE_TOTAL:
|
||||
printf("energy (reactive,total): %.02f kVArh\n", measurement);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
if (sdm120_measurement<SENSOR_SDM120_MEASUREMENT_MAX-1) { // not all measurement type required
|
||||
sdm120_measurement++; // go to next measurement
|
||||
sensor_sdm120_measurement_request(1+sdm120_meter, sdm120_measurement); // request next measurement
|
||||
@ -439,7 +483,7 @@ void main(void)
|
||||
}
|
||||
while (rtc_internal_tick_flag) { // the internal RTC ticked
|
||||
rtc_internal_tick_flag = false; // reset flag
|
||||
led_toggle(); // toggle LED (good to indicate if main function is stuck)
|
||||
//led_toggle(); // toggle LED (good to indicate if main function is stuck). do not toggle onboard the LED on PC13 on the blue pill board since this heavily influences the RTC (by ~13%)
|
||||
ticks_time = rtc_get_counter_val(); // copy time from internal RTC for processing
|
||||
action = true; // action has been performed
|
||||
if ((ticks_time%(60))==0) { // one minute passed
|
||||
@ -559,7 +603,7 @@ void main(void)
|
||||
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\n");
|
||||
printf("query meter measurements (%02lu:%02lu:%02lu)\n", ticks_time/(60*60), (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
|
||||
|
Loading…
Reference in New Issue
Block a user