I took some timings, and here is the sketch I used:
// EmonLibrary examples openenergymonitor.org, Licence GNU GPL V3
#include "EmonLib.h" // Include Emon Library
#define NSENSORS 11
EnergyMonitor emon[NSENSORS]; // Instance of EmonTX sensors
unsigned long ctspeed = 0;
unsigned long loopspeed = 0;
void setup()
{
Serial.begin(9600);
analogReadResolution(ADC_BITS);
emon[0].voltage(0, 161.74, 3.11);//Voltage: pin, calibration, phase_shift
emon[0].current(1, 20.01); //Current: pin, calibration
emon[1].voltage(0, 161.74, 3.06);
emon[1].current(2, 20.08);
emon[2].voltage(0, 161.74, 2.49);
emon[2].current(3, 19.89);
emon[3].voltage(0, 161.74, 3.06);
emon[3].current(4, 20.11);
emon[4].voltage(0, 161.74, 2.17);
emon[4].current(5, 29.83);
emon[5].voltage(0, 161.74, 3.98);
emon[5].current(6, 30.55);
emon[6].voltage(0, 161.74, 2.43);
emon[6].current(7, 29.87);
emon[7].voltage(0, 161.74, 2.27);
emon[7].current(8, 29.83);
emon[8].voltage(0, 161.74, 2.36);
emon[8].current(9, 29.85);
emon[9].voltage(0, 161.74, 2.22);
emon[9].current(10, 29.83);
emon[10].voltage(0, 161.74, 2.46);
emon[10].current(11, 29.89);
}
void loop()
{
loopspeed = millis();
for (int i=0; i<NSENSORS; i++)
{
ctspeed = millis();
emon[i].calcVI(20,2000); // Calculate all. No.of half wavelengths (crossings), time-out 20 (20 = 1849ms loopSpeed)
Serial.println("ct speed ms:" + String(millis() - ctspeed)); // loopSpeed checker
}
Serial.println("loop speed ms:" + String(millis() - loopspeed)); // loopSpeed checker
delay(100);
}
It takes about 166-174ms per reading (how does 166ms compare to other emon units? I would assume the Due is faster but it is using 12 bit precision for the analog inputs so not necessarily), and 1850ms for the entire loop, here is the output:
ct speed ms:168
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:166
ct speed ms:174
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:174
loop speed ms:1851
ct speed ms:166
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
ct speed ms:166
ct speed ms:167
ct speed ms:167
ct speed ms:174
loop speed ms:1849
ct speed ms:167
ct speed ms:167
ct speed ms:166
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:166
ct speed ms:174
loop speed ms:1850
ct speed ms:166
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
ct speed ms:167
ct speed ms:166
ct speed ms:167
ct speed ms:174
ct speed ms:167
loop speed ms:1849
ct speed ms:166
ct speed ms:166
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
loop speed ms:1850
ct speed ms:166
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:166
ct speed ms:167
loop speed ms:1849
ct speed ms:166
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
ct speed ms:167
ct speed ms:166
ct speed ms:166
ct speed ms:174
loop speed ms:1849
ct speed ms:166
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:167
ct speed ms:174
ct speed ms:167
ct speed ms:167
loop speed ms:1850
(you may notice I have delay(100); at the end of the loop for all ctâs 100ms is roughly the amount of time it takes per loop for the network code in my full sketch that posts to emoncms)
Also this is with using .calcVI(20,2000)
it would take less time if I use less than 20 half wavelengths, resulting in even faster processing but less samples in the average. I chose 20 because it is what was used in the examples, so I figured it was a good number to use.