Alla 4° lettura, se il valore è inferiore a 1024, quindi meno di 256 a lettura e se è stato settato l'autoscale con riferimento normale (5V)
if ((Counter == 4) && ((unsigned int)Value < 1024) && !(Probe & (1 << REFS1)) && (Config.AutoScale == 1))
{
Probe |= (1 << REFS1); //Select internal bandgap reference
cycle = true;
break; //Re-run sampling
}
viene impostato il rifermento a 1.1V, la variabile cycle è vera e il ciclo ricomincia. (prima qui c'era un orribile goto.
Così migliora la risoluzione in lettura.
Terminato il campionamento, le solite operazioni.
if (Probe & (1 << REFS1)) U = Config.U_Bandgap; //Bandgap reference
else U = UREF_VCC; //Vcc reference
//Convert to voltage
Value *= U; //ADC readings U_ref
//Value += 511 * Config.Samples; //Automagic rounding
Value /= 1024; // / 1024 for 10bit ADC
//De-sample to get average voltage
Value /= Config.Samples;
U = (unsigned int)Value;
return U;
Il valore viene moltiplicato per il valore di riferimento, 1.1V o 5V, diviso per 1024 (dovrebbe essere 1023??), e diviso per il numero di campioni.
Tutto questo, la prima volta, dovrebbe restituire 1100 mV.