Problemi con ADC e Sensore Accellerazione

Buona giornata a tutti

Vorrei ricapitolare su un problema che non riesco a risolvere.

Al mio Arduino 2009 ho connesso un modulo con sensore di accellerazione triassiale
il cui schema è visionabile dal seguente link :

Il modulo è basato da un ADXL330 il quale è alimentato a 3V attraverso uno Zener.
Detto questo mi aspetto segnali in uscita compresi tra 0 e +3V.

Purtroppo l'ADC dell'arduino 2009 lavora a 5V e per questa ragione è necessario
applicare una tensione di riferimento sul pin AREF.
Nel mio caso ho messo un ponticelo dal pin 3V3 e AREF e ho aggiunto la seguente
riga di codice nella funzione Setup() : analogReference(EXTERNAL);

Purtroppo temo che si sia un'errore che non ho ancora capito perchè su tutti e tre
i PIN connessi agli assi X, Y, Z dell'accellerometro ricevo il valore 1023 fisso
che rappresenta il valore massimo per l'adc.

Ma dove sbaglio ? Qualcuno mi potrebbe aiutare?

Ringrazio in anticipo
saluti
Drake

posta tutto il codice che hai caricato su Arduino

hai un multimetro per confrontare la tensione sul pin analogico e il valore dell'ADC?

stasera posto tutto e faccio le verifiche con il multimetro. :slight_smile:

Mi viene un dubbio ... speriamo che mi sbagli !!!

Per facilitarmi con i collegamenti ho connesso l'alimentazione in maniera
particolare.
Sia l'alimentazione che la massa li ho inseriti in PinAnalogici entrambi
impostati come uscite digitali......

The circuit:
analog 0: Non connesso
analog 1: ground // ---> groundpin
analog 2: z-axis
analog 3: y-axis
analog 4: x-axis
analog 5: vcc // ---> powerpin

void setup()
{
Serial.begin(9600);
pinMode(groundpin, OUTPUT);
pinMode(powerpin, OUTPUT);
digitalWrite(groundpin, LOW);
digitalWrite(powerpin, HIGH);
}

Questo sistema per alimentare il modulo è sbagliato ?
Io per la verità l'ho trovato nell'esempi presenti nell'IDE quindi
l'ho considerato giusto.....
Stasera vedo di fare due prove con il tester e vi dirò qualcosa di
più preciso......

Saluti
Drake

Secondo me è sbagliato lo schema elettrico. Usi degli amplificatori operazionali senza mettere la resistenza sulla retroazione ... secondo me così è normale che ottieni 1023 ... in uscita avrai sempre una tensione pari a VCC.

No ..... Quella è la configurazione di inseguitore di Tensione !
in uscita ottieni la stessa tensione che hai inserito in ingresso, quindi
senza alcuna amplificazione. Ha il vantaggio di disaccoppiare il resto
del circuito :

:smiley:

Saluti
Drake

Ah ok, scusa ... errore mio :stuck_out_tongue:

 digitalWrite(powerpin, HIGH);

ehmmm ma così non alimenti il sensore a 5V? il digital pin non è influenzato dall'analogReference()! e se volessi provare ad alimentarlo dall'analogico verrebbe ancora più casino perché il reference lo prende da se stesso, con un casino micidiale all'avvio (probabilmente si stabilizza su un valore a caso dettato dalle correnti interne).
Secondo me il reference lo metti a 5V, i valori 3V sai che al massimo arrivano a un certo tot (proporzione che non ho voglia di fare) e che riporti da 0 a 1023 (se proprio ne senti la necessità) con map().
A questo punto puoi buttare in output su un pin analogico il valore trovato nella proporzione sopra citata, e usarla come alimentazione.... Ovvio prima controllare che il sensore non ciucci più ampere di quelle che può fornire arduino, altrimenti bruci il microcontrollore. Che poi se non erro arduinp ha già un pin 3,3V per le alimentazioni, perchè complicarsi la vita? ;D

ciao
per primo collega la schedina del sensore direttamente alla massa e ai 5V e non usare uscite del arduino come alimentazioni.
per secondo se fai un partitore 1:1 con 2 resistenze uguali ( qualche kOhm ciascuna), le metti in serie e un estremitá la metti a massa e l' altra a 5V e colleghi il punto comune all'entrata analogica cosa leggi?

Per la cronaca: se cambi la tensione di riferimento del ADC interno cambi solo il finescala della lettura analogica.
Se usi un pin Analogico come digitale i livelli di tensione rimangono sempre quelle delle uscite digitali ( vicino alla massa e vicino a 5V).

Ciao Uwe

Ho pubblicato i valori letti con il tester nel seguente post :

http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1284410439/0

Saluti
Drake