fix DDM100TC measurement calculation when 0 values
This commit is contained in:
parent
301ccbb72d
commit
d3ed57fd0d
19
main.c
19
main.c
@ -363,6 +363,10 @@ void main(void)
|
||||
uint8_t sdm120_meter = 0; // SDM120 meter index (add to 1 to get ID)
|
||||
uint8_t sdm120_measurement = 0; // SDM120 measurement index
|
||||
|
||||
// variables for DDM100TC meter measurements
|
||||
uint32_t ddm100tc_value_energy = 0;
|
||||
uint32_t ddm100tc_value_power = 0;
|
||||
|
||||
while (true) { // infinite loop
|
||||
iwdg_reset(); // kick the dog
|
||||
while (cdcacm_received) { // data received over USB
|
||||
@ -535,9 +539,16 @@ void main(void)
|
||||
sdm120_measurement = 0; // reset SDM120 measurement index
|
||||
sensor_sdm120_measurement_request(1+sdm120_meter, sdm120_measurement); // request first measurement
|
||||
|
||||
// show DDM100TC measurements (base on number of pulses and interval)
|
||||
printf("DDM100TC meter energy: %lu Wh\n", (uint32_t)((ddm100tc_pulses*(uint64_t)1000)/1600)); // the meter has 1600 impulses/kWh (use 64-bit calculation to not overflow after 2684354 Wh)
|
||||
printf("DDM100TC meter power: %lu W\n", (uint32_t)(((rcc_ahb_frequency*(double)1.0)/((uint32_t)TIM_PSC(TIM(DDM100TC_TIMER))+1))*(3600*1000/1600)/ddm100tc_interval)); // calculate with floating point for precision
|
||||
// calculate and show DDM100TC measurements (base on number of pulses and interval)
|
||||
if (ddm100tc_pulses==0) { // no measurements received yet
|
||||
ddm100tc_value_energy = 0;
|
||||
ddm100tc_value_power = 0;
|
||||
} else {
|
||||
ddm100tc_value_energy = (uint32_t)((ddm100tc_pulses*(uint64_t)1000)/1600); // the meter has 1600 impulses/kWh (use 64-bit calculation to not overflow after 2684354 Wh)
|
||||
ddm100tc_value_power = (uint32_t)(((rcc_ahb_frequency*(double)1.0)/((uint32_t)TIM_PSC(TIM(DDM100TC_TIMER))+1))*(3600*1000/1600)/ddm100tc_interval); // calculate with floating point for precision
|
||||
}
|
||||
printf("DDM100TC meter energy: %lu Wh\n", ddm100tc_value_energy);
|
||||
printf("DDM100TC meter power: %lu W\n", ddm100tc_value_power);
|
||||
}
|
||||
}
|
||||
while (pzem_meter>=LENGTH(pzem_measurements) && sdm120_meter>=LENGTH(sdm120_measurements)) { // all measurements received for all meter
|
||||
@ -566,9 +577,7 @@ void main(void)
|
||||
"energy,meter=SDM120,phase=%u,type=active,direction=total value=%.3f\n",
|
||||
"energy,meter=SDM120,phase=%u,type=reactive,direction=total value=%.3f\n"
|
||||
};
|
||||
uint32_t ddm100tc_value_energy = (uint32_t)((ddm100tc_pulses*(uint64_t)1000)/1600); // the meter has 1600 impulses/kWh (use 64-bit calculation to not overflow after 2684354 Wh)
|
||||
const char* ddm100tc_string_energy = "energy,meter=DDM100TC value=%lu\n";
|
||||
uint32_t ddm100tc_value_power = (uint32_t)(((rcc_ahb_frequency*(double)1.0)/((uint32_t)TIM_PSC(TIM(DDM100TC_TIMER))+1))*(3600*1000/1600)/ddm100tc_interval); // calculate with floating point for precision
|
||||
const char* ddm100tc_string_power = "power,meter=DDM100TC value=%lu\n";
|
||||
|
||||
// calculate length for text to POST
|
||||
|
Loading…
Reference in New Issue
Block a user