Problema nell''utilizzo AnalogReference()

Buongiorno a tutti!
cortesemente, sto utilizzando arduino nano originale. Vorrei attivare il reference interno a 1V1. Ho inserito nel SETUP la semplice istruzione analogReference(INTERNAL); poi ho inserito un multimetro tra AREF e GND ma non leggo nulla. Ho provato la configurazione di DEFAULT ma ottengo sempre 0V. Dove sto sbagliando? Grazie per l'aiuto!

Buongiorno,
essendo il tuo primo post, nel rispetto del regolamento della sezione Italiana del forum (… punto 13, primo capoverso), ti chiedo cortesemente di presentarti IN QUESTO THREAD (spiegando bene quali conoscenze hai di elettronica e di programmazione ... possibilmente evitando di scrivere solo una riga di saluto) e di leggere con MOLTA attenzione il su citato REGOLAMENTO ... Grazie. :slight_smile:

Guglielmo

P.S.: Ti ricordo che, fino a quando non sarà fatta la presentazione, nessuno ti potrà rispondere, quindi ti consiglio di farla al più presto. :wink:

Buongiorno Guglielmo,
ho fatto la presentazione, mi scuso non ho letto il regolamento, lo faccio adesso.
molto cordialmente
Marco

Grazie :slight_smile:

... NON basta fare analogReference(INTERNAL), ma devi fare delle analogRead(). Per la calibrazione, ad esempio, io usavo uno stupido programmino come questo:

byte ledValue = 0;

void setup() {
   pinMode(LED_BUILTIN, OUTPUT);
   digitalWrite(LED_BUILTIN, ledValue);
   analogReference(INTERNAL);
}

void loop() {
   delay(500);
   analogRead(A0);
   ledValue = ~ledValue;
   digitalWrite(LED_BUILTIN, ledValue);
}

... vedrai che su Vref potrai misurare il valore esatto del riferimento interno (... che, pur essendo molto stabile, raramente è 1.1V esatti :wink:)

Guglielmo

Ti ringrazio Guglielmo!
Provo subito e poi ti dico!

Grazie Giglielmo,
adesso funziona tutto!
al prossimo intoppo!
ciaoooo
Marco

MARCO_ITALY:
Grazie Giglielmo,
adesso funziona tutto!

Bene :slight_smile:

Guglielmo

Sì, il riferimento selezionato viene attivato solo quando viene fatta una lettura, anche un semplice "analogRead();" senza una variabile.
Il riferimento interno, pur essendo abbastanza stabile in temperatura, ha una tolleranza del +/-10%.

Datman:
Sì, il riferimento selezionato viene attivato solo quando viene fatta una lettura, anche un semplice "analogRead();" senza una variabile.

La motivazione è chiaramente descritta nei sorgenti del "core" relativi alla funzione in esame:

void analogReference(uint8_t mode)
{
	// can't actually set the register here because the default setting
	// will connect AVCC and the AREF pin, which would cause a short if
	// there's something connected to AREF.
	analog_reference = mode;
}

... quindi, essenzialmente, per ragioni di "sicurezza" (onde evitare possibili danni).

Il vero "collegamento" (la programmazione dei registri) avviene solo in occasione dell'analogRead() in cui, ad un certo punto, nei commenti troviamo:

// set the analog reference (high two bits of ADMUX) and select the
// channel (low 4 bits).  this also sets ADLAR (left-adjust result)
// to 0 (the default).

... e di seguito il settaggio dei registri interessati.

Guglielmo