analogRead
Stò realizzando un circuito che legge una tensione tra 0V e 5V utilizzando la funzione analogRead.
Nelle specifiche dell'Atmega si dice che il Sample & Hold del ADC per leggere correttamente il valore di tensione non deve avere un'impedenza in ingresso maggiore di 10k, altrimenti il condensatore del convertitore non si carica correttamente falsando il valore.
Avendo io un'impedenza intorno ai 470k cosa devo fare ? NON vorrei utilizzare un'inseguitore di tensione per questioni di spazio (ne dovrei montare 4 "sparsi" sulla basetta).
Ho visto soluzioni che prevedono l'inserimento di più comandi analogRead, tipo:
utilizzando solo il secondo valore.
Soluzioni a media (adottata attualmente):
che attenuano le differenze di lettura.
Le domande sono:
1) se leggo sempre dallo stesso ingresso Analogico e la variazione di tensione non è troppo rapida (in questo caso è quasi fissa), il condensatore rimane parzialmente carico e si riesce a farlo caricare con passaggi/letture successivi ?
2) Qualche altro metodo ?
3) Abolendo la funzione analogRead e utilizzando il codice macchina, posso ottenere di meglio ?
Grazie per qualunque suggerimento.
Nelle specifiche dell'Atmega si dice che il Sample & Hold del ADC per leggere correttamente il valore di tensione non deve avere un'impedenza in ingresso maggiore di 10k, altrimenti il condensatore del convertitore non si carica correttamente falsando il valore.
Avendo io un'impedenza intorno ai 470k cosa devo fare ? NON vorrei utilizzare un'inseguitore di tensione per questioni di spazio (ne dovrei montare 4 "sparsi" sulla basetta).
Ho visto soluzioni che prevedono l'inserimento di più comandi analogRead, tipo:
- Codice: Seleziona tutto
val = analogRead (A0);
delay (10);
val = analogRead (A0);
utilizzando solo il secondo valore.
Soluzioni a media (adottata attualmente):
- Codice: Seleziona tutto
RESVread = 0;
for (int iAN = 0; iAN < SAMPLEVAL; iAN++) {
RESVread += analogRead(RESanalog); // read the input on analogPin and accumulate
delay(DELAYADC); // delay to define the sampling time
}
RESVread = (float)RESVread / SAMPLEVAL; // calculate the corresponding voltage
che attenuano le differenze di lettura.
Le domande sono:
1) se leggo sempre dallo stesso ingresso Analogico e la variazione di tensione non è troppo rapida (in questo caso è quasi fissa), il condensatore rimane parzialmente carico e si riesce a farlo caricare con passaggi/letture successivi ?
2) Qualche altro metodo ?
3) Abolendo la funzione analogRead e utilizzando il codice macchina, posso ottenere di meglio ?
Grazie per qualunque suggerimento.

