Problemi con misura dei volt di alimentazione

Salve a tutti,
sono ancora qui per cercare di capire dove sbaglio.
Vorrei misurare la tensione di alimentazione e della batteria.
Sto facendo delle prove sulla tensione rilevata con il tester, meglio con due tester differenti così da avere un riferimento più preciso.
Però rilevo dei valori non corrispondenti rispetto alla misura che effettuo sui seguenti PIN: VIN e 3V3.
Le tensioni rilevate sono rispettivamente: VIN => 4.20V e 3V3 => 3.39V mentre dal serial monitor leggo: 5.00V e 2.48V.
Dove sbaglio ?

// Voltage test

float          PVolt;        // Power Volt 3V3
float          BVolt;        // Battery Volt 3.7V (min. or more to 5V)

void setup() {

    Serial.begin(115200);
    delay(2000);
    analogReference(INTERNAL1V024); // LGT8FX8P
    analogReadResolution(12);
    Serial.print("Start");
    Serial.println();

}

void loop() {

    uint32_t v;

    // Probe on VIN
    // PVolt POWER Volt measure 
    v = analogRead(A0) * 5 / 4095;
    PVolt = (v * 5) / 4;

    // Probe on 3V3
    // BVolt BATTERY Volt measure
    v = analogRead(A1) * 3.3 / 4095;
    BVolt = (v * 3.3) / 4;

    Serial.print("Battery Volt = ");
    Serial.print(BVolt);
    Serial.println(" V");

    Serial.print("Power Volt = ");
    Serial.print(PVolt);
    Serial.println(" V");

    Serial.println("");

  delay(3000);
  
}

cosa hai collegato ad A0 e ad A1?

comunque prima di eseguire la prima misura su un piedino analogico devi eseguire una misura a vuoto
poi, perché dividi per 4095 (semmai 4096, ma che scheda stai usando?)

Ciao Ducembarr,
Sto usando un LGT8F32 che ha un ADC a 12bit e sto prelevando dal piedino 3V3 i 3.3V e leggo con il multimetro 2.48V mentre dal VIN leggo 4.20V due valori prelevati sia a vuoto che non, non cambia i valori letti...

Per avere i decimali devi fare un cast aggiungendo .0:

v=analogRead(A0)*5.0/4096;
PVolt=(v*5.0)/4;

Ma comunque la formula corretta è:

PVolt = analogRead(A0)/4096*5.0/1.024;

alla quale devi aggiungere la moltiplicazione per il fattore relativo al partitore resistivo che hai usato.

CORREZIONE (dopo il post #29):
Il cast va fatto sulla prima operazione, perché calcola i decimali solo dal cast in poi!

PVolt = analogRead(A0)/4096.0*5/1.024;

Che continua ad essere 4096

Comunque adesdo vedo il DS della mcu

Ti ho chiesto cosa hai agli "ingressi"

Ciao Salvorhardin,
agli ingressi non ho nulla un semplice cavetto che collega 3V3 al pin A0 ed un cavetto VIN al pin A1, nessun partitore resistivo dal momento che sono tutte tensioni al di sotto dei 5V, ho pensato che non fosse necessario.
Correggo 4095 con 4096 scusate una svista...
Corretta anche la formula:

    // Probe on VIN
    // PVolt POWER Volt measure 
    PVolt = analogRead(A0)/4096*5.0/1024;

    // Probe on 3V3
    // BVolt BATTERY Volt measure
    BVolt = analogRead(A1)/4096*3.3/1024;

Ma in questo modo il risultato è in entrambi 0.00 V

Analogread restituisce al massimo 4096
Diviso 4096 da al massimo 1
Oppure zero, essendo divisione tra interi

Però a noi quei calcoli non convincono

E cambia il titolo
Voltaggio è una parolaccia
Ti risponderemo di nuovo dopo il cambio

1024???... 1 VIRGOLA 024!
Però, avendo giustamente impostato la tensione di riferimento a 1,024V, quella è la tensione di fondo scala, perciò devi usare un partitore per ogni ingresso dell'ADC! Per i 5V puoi fare un partitore con 4k7 e 1k applicando un fattore correttivo (v. post #4) pari a 5,7, mentre per i 3V3 puoi farlo con 3k3 e 1k applicando un fattore correttivo pari a 4,3, oppure entrambi con 4k7 e 1k con fattore 5,7:

PVolt = analogRead(A0)/4096*5.0/1.024*5.7; // 4k7 e 1k.

BVolt = analogRead(A1)/4096*3.3/1.024*4.3; // 3k3 e 1k.
// oppure:
BVolt = analogRead(A1)/4096*3.3/1.024*5.7; // 4k7 e 1k.

CORREZIONE (dopo il post #29):

PVolt = analogRead(A0)/4096.0*5/1.024*5.7; // 4k7 e 1k.

BVolt = analogRead(A1)/4096.0*3.3/1.024*4.3; // 3k3 e 1k.
// oppure:
BVolt = analogRead(A1)/4096.0*3.3/1.024*5.7; // 4k7 e 1k.

Ciao scusate, ho fatto ammenda, cambiato titolo e tutti i riferimenti alla "Parolaccia".
Fatto il partitore e applicato al circuito:

Modificato il codice:

    // Probe on VIN
    // PVolt POWER Volt measure 
    PVolt = analogRead(A0)/4096*5.0/1.024*5.7;

    // Probe on 3V3
    // BVolt BATTERY Volt measure
    BVolt = analogRead(A1)/4096*3.3/1.024*5.7;

Valori "letti da Arduino" per VIN => 0.00 V per 3V3 => 0.00 V

Lettura del multimetro per VIN => 3.34 V per 3V3 => 2.80 V, con o senza il collegamenti ai pin A0 e A1.

Hai provato a "calcolare" cosa entrerebbe dai pin analogici?

Si l'ho scritto VIN per il pin A0 lettura del multimetro 3.34 V
3V3 per il pin A1 lettura del multimetro 2.80 V

Adesso mi sono accorto che il fratello qui ha sbagliato a fare logout...

Fino a questo messaggio per cortesia considerate che ha scritto lui

Anche se abbiamo pensato in due...

Non ho ben capito ma mi adeguo...

Non credi che 3.34 volt sia un po' maggiore del fondo scala?

E comunque cosa hai "calcolato" di quel partitore?

Ha, le resistenze (quella da 1K con tolleranza 5% le ho scelte con esattamente lo stesso valore di 0,99K
Mentre le altre da 4K7 sono all'1% di tolleranza ed hanno comunque lo stesso valore

Io, Massimo Salvorhardin e mio fratello Fabio Ducembarr abitiamo assieme e abbiamo una sola connessione internet, e anche hardware in comune ( non siamo siamesi, ma condividiamo laboratorio e un paio di PC, alle volte ci si collega senza controllare che l'altro abbia fatto log-out

Certo, ma adesso te lo diciamo esplicitamente:

Tira fuori la calcolatrice e "calcola" quel partitore

Non ti viene il sospetto che dopo tre volte che te lo diciamo "forse" ma solo forse, abniamo notato qualcosa e non vorremmo essere costretti a dirti in "diretta mondiale" i tuoi errori?

Ha, ok capito scusate non sapevo in ogni caso la tensione calcolata è di 4.13V rispetto ai 5V per il pin A0 mentre è di 2.72V per il pin A1 rispetto ai 3V3.

E quindi?