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
|
// setup RTC
|
||||||
printf("setup internal 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"
|
rtc_interrupt_enable(RTC_SEC); // enable RTC interrupt on "seconds"
|
||||||
nvic_enable_irq(NVIC_RTC_IRQ); // allow the RTC to interrupt
|
nvic_enable_irq(NVIC_RTC_IRQ); // allow the RTC to interrupt
|
||||||
printf("OK\n");
|
printf("OK\n");
|
||||||
|
@ -361,25 +361,26 @@ void main(void)
|
||||||
while (true); // unhandled error
|
while (true); // unhandled error
|
||||||
}
|
}
|
||||||
if (measurement.valid) { // only show valid measurement
|
if (measurement.valid) { // only show valid measurement
|
||||||
|
printf("PZEM-004T meter %u ", pzem_meter);
|
||||||
switch (measurement.type) {
|
switch (measurement.type) {
|
||||||
case SENSOR_PZEM_VOLTAGE:
|
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;
|
break;
|
||||||
case SENSOR_PZEM_CURRENT:
|
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;
|
break;
|
||||||
case SENSOR_PZEM_POWER:
|
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;
|
break;
|
||||||
case SENSOR_PZEM_ENERGY:
|
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;
|
break;
|
||||||
/* not used for this application
|
/* not used for this application
|
||||||
case SENSOR_PZEM_ADDRESS:
|
case SENSOR_PZEM_ADDRESS:
|
||||||
printf("PZEM-004T meter %u address set\n", pzem_id);
|
printf("address set\n");
|
||||||
break;
|
break;
|
||||||
case SENSOR_PZEM_ALARM:
|
case SENSOR_PZEM_ALARM:
|
||||||
printf("PZEM-004T meter %u alarm threshold set\n", pzem_id);
|
printf("alarm threshold set\n");
|
||||||
break;
|
break;
|
||||||
*/
|
*/
|
||||||
default:
|
default:
|
||||||
|
@ -415,7 +416,50 @@ void main(void)
|
||||||
while (true); // unhandled error
|
while (true); // unhandled error
|
||||||
} else {
|
} else {
|
||||||
sdm120_measurements[sdm120_meter][sdm120_measurement] = measurement; // save measurement
|
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
|
if (sdm120_measurement<SENSOR_SDM120_MEASUREMENT_MAX-1) { // not all measurement type required
|
||||||
sdm120_measurement++; // go to next measurement
|
sdm120_measurement++; // go to next measurement
|
||||||
sensor_sdm120_measurement_request(1+sdm120_meter, sdm120_measurement); // request 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
|
while (rtc_internal_tick_flag) { // the internal RTC ticked
|
||||||
rtc_internal_tick_flag = false; // reset flag
|
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
|
ticks_time = rtc_get_counter_val(); // copy time from internal RTC for processing
|
||||||
action = true; // action has been performed
|
action = true; // action has been performed
|
||||||
if ((ticks_time%(60))==0) { // one minute passed
|
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
|
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
|
timer_clear_flag(TIM(MAIN_TIMER), TIM_SR_UIF); // clear flag
|
||||||
action = true; // action has been performed
|
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
|
// start getting all PZEM-004T measurements from all meters
|
||||||
pzem_meter = 0; // reset PZEM meter number
|
pzem_meter = 0; // reset PZEM meter number
|
||||||
pzem_measurement = 0; // reset PZEM measurement index
|
pzem_measurement = 0; // reset PZEM measurement index
|
||||||
|
|
Loading…
Reference in New Issue