Go Down

Topic: Problema con analogRead (Read 2 times) previous topic - next topic

d407336

Ho uno strano problema con analogRead() e non riesco a capire perchè mi succede.

Uso tre ingressi analogici e un lcd per vedere i valori letti.
Uno lo uso come un digitale, quindi nel setup() ho messo pinMode INPUT numerando il pin secondo i pin analogici ma da 14 a 19 anzichè da 0 a 5.
Agli altri due pin ho collegato dei potenziometri.
Con un analogRead() leggo il primo valore analogico dal potenziometro.
Il secondo valore analogico dell'altro potenziometro lo leggo solo quando vedo che il pin che uso come digitale è alto, per farlo uno digitalRead() e un interruttore.
Se lascio l'interruttore aperto vedo il primo valore analogico correttamente.
Se invece chiudo l'interruttore il secondo valore analogico lo vedo correttamente, ma il primo che continuo a leggere sale e scende da solo...
Non capisco perchè succeda, ho letto che servono almeno 100us per ricaricare il condensatore dell'analogRead(), ma anche mettendo 10 millisecondi di delay tra un analogRead() e l'altro non cambia...

m_ri

domanda banale: il primo ingresso analogico è collegato a qualcosa con tensione fissa,quando lo vedi flottare?

uwefed

Come hai collegato l'interuttore? usi una resistenza pullup/pulldown?
Ciao Uwe

d407336

dopo varie prove ho scoperto che se prima di leggere quello che mi serve metto un'analogRead() a vuoto funziona tutto correttamente.
Per esempio se invece di mettere
Code: [Select]
int a = analogRead(A0);
metto
Code: [Select]

analogRead(A0);
int a = analogRead(A0);

funziona.
Ma è normale che faccia così?

leo72

La prima volta che si usa l'ADC è bene fare una lettura a vuoto per calibrare il circuito S&H interno. Questo vale anche nel caso di ADC spento per motivi di sleep o altro.
Potresti postare lo sketch usato per capire cosa può succedere?

Go Up