Conversione segnale analogico-digitale utilizzando un adc esterno tramite SPI

Salve a tutti. Sono uno studente al terzo anno di ingegneria elettronica e sto lavorando ad un progetto d'esame che prevede la conversione di un segnale analogico, posto in ingresso ad un adc esterno, in un segnale digitale. Il segnale digitale viene infine visualizzato su monitor seriale.
L'arduino che sto utilizzando è un arduino uno marca Elegoo. L'adc che sto utilizzando è un LTC2445 a 24 bit di risoluzione della Analog Device, di cui riporto il datasheet

http://www.analog.com/media/en/technical-documentation/data-sheets/2444589fc.pdf

I collegamenti che ho effettuato sono riportati nell'immagine (chiedo scusa per la poca professionalità :-[ ). Da come si può vedere dall'immagine vado ad alimentare l'adc con i 5 V di arduino. Il pin 3 EXT è posto a 5 V (HIGH) in modo tale da selezionare la modalità che utilizza il clock interno. Il pin 35 f0 è connesso a GND in maniera tale da selezionare l'oscillatore interno. Le altre connessioni degne di nota sono:

  • 38 SCK (adc) -> pin 10 arduino;
  • 37 SDO (adc) -> pin 12 arduino;
  • 36 CS (adc) -> pin 10 arduino;
  • 24 SDI (adc) -> pin 11 arduino.

Come si può vedere da queste connessioni l'adc si interfaccia con arduino attraverso la comunicazione SPI.
Per ora sono interessato a convertire un segnale DC costante a 3.3V, che vado a porre in ingresso al pin 9 (adc) CH0, in digitale.

Il codice che vado ad utilizzare è riportato in allegato. Fornisco una breve descrizione del loop.
Come prima cosa vado ad inizializzare il bus SPI con il comando SPI.beginTransaction, e tramite il comando SPIsettings gli fornisco la velocità di comunicazione, il dataOrder e il dataMode. Il data mode che vado a scegliere è il mode 3 da come si può vedere in pag. 20 del datasheet. Dopo un breve dalay di 60 microsecondi vado a richiedere 32 bit all'adc (sempre pag. 20 del datasheet). Questi 32 bit verranno poi modificati per ottenere il dato finale di 24 bit che corrisponderà al mio valore in ingresso (3.3V).

Il problema che riscontro è che invece di ottenere il seguente valore in binario, che corrisponde a 3.3V in decimale,

101010001111010111000010

[ho semplicemente fatto il seguente calcolo: (3.3V/(5V/2^(24)))=11072962 e ho poi convertito questo numero in binario]

ottengo in uscita tutti valori pari a 1. Quindi è come se ponessi in ingresso una tensione di 5V.
Molto probabilmente è un problema di codice (i collegamenti sono abbastanza sicuro siano corretti) in particolare delle quattro richieste di dati

data0=SPI.transfer(0);
data1=SPI.transfer(0);
data2=SPI.transfer(0);
data3=SPI.transfer(0);

tuttavia non ne sono sicuro al 100%. Il codice a cui ho fatto riferimento è il seguente, che va a utilizzare un adc LTC1286 con risoluzione a 12 bit (esempio 2 del seguente link):

Se non capite qualcosa chiedete pure, ho cercato di essere il più chiaro e il più breve possibile.
Grazie a chiunque voglia dare una mano.

prova_aprile_adxl___adc.ino (1.87 KB)

Buonasera,
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