22-10-2024, 06:57 PM
(Modification du message : 23-10-2024, 10:29 AM par Youpimatin.)
Bonsoir André,
voici une meilleure solution, belle, propre et qui fonctionne enfin à 100%, testée sur 24h, plus aucune mauvaise mesure de V et de I (enfin... à part les valeurs au démarrage, mais c'est un autre problème) :
typedef union {
uint64_t U64;
struct {
unsigned long Lower;
unsigned long Upper;
} U32;
} uint64_32;
void MeasurePower() { //Lecture Tension et courants pendant 20ms
int iStore;
value0 = analogRead(AnalogIn0); //Mean value. Should be at 3.3v/2
static uint64_32 Micros64 = {0};
unsigned long Micros32;
unsigned long MeasureMillis = millis();
while (millis() - MeasureMillis < 21) { //Read values in continuous during 20ms. One loop is around 150 micro seconds
Micros32 = micros();
if(Micros32 < Micros64.U32.Lower) {
Micros64.U32.Upper ++;
}
Micros64.U32.Lower = Micros32;
iStore = (Micros64.U64 % 20000) / 200; //We have more results that we need during 20ms to fill the tables of 100 samples
volt[iStore] = analogRead(AnalogIn1) - value0;
amp[iStore] = analogRead(AnalogIn2) - value0;
}
}
Bonne soirée à vous, et si besoin d'explications je reste disponible.
voici une meilleure solution, belle, propre et qui fonctionne enfin à 100%, testée sur 24h, plus aucune mauvaise mesure de V et de I (enfin... à part les valeurs au démarrage, mais c'est un autre problème) :
typedef union {
uint64_t U64;
struct {
unsigned long Lower;
unsigned long Upper;
} U32;
} uint64_32;
void MeasurePower() { //Lecture Tension et courants pendant 20ms
int iStore;
value0 = analogRead(AnalogIn0); //Mean value. Should be at 3.3v/2
static uint64_32 Micros64 = {0};
unsigned long Micros32;
unsigned long MeasureMillis = millis();
while (millis() - MeasureMillis < 21) { //Read values in continuous during 20ms. One loop is around 150 micro seconds
Micros32 = micros();
if(Micros32 < Micros64.U32.Lower) {
Micros64.U32.Upper ++;
}
Micros64.U32.Lower = Micros32;
iStore = (Micros64.U64 % 20000) / 200; //We have more results that we need during 20ms to fill the tables of 100 samples
volt[iStore] = analogRead(AnalogIn1) - value0;
amp[iStore] = analogRead(AnalogIn2) - value0;
}
}
Bonne soirée à vous, et si besoin d'explications je reste disponible.