ADC AD7921

Hello everyone

I have to use ADC AD7921.
It is manageable through the SPI device. It is equipped with two analog inputs that can be selected by manipulating a MUX, through SPI.

By default, the Vin0 signal is enabled on the exit from the MUX, which I read correctly with the code I attach.

One thing I noticed is that if I decrease the freq I read incorrect values, and this thing is not clear to me since on the datasheet, p. 7, I find a Freq rage from 10 khz to 5 Mhz. What am I wrong?

Further, he goes to sample in and out on the fall.

On my uC which is a SAMD21 I selected mode 3.

The data that he sends me I receive correctly with mode 3 because, even looking at the time digram, page 7, he samples the DOUT on the falling and I on the uC I read it on the first positive front.

But instead when I send from the uC, always with mode 3, they field on the FALLING and also the ADC on the DIN samples on the FALLING. Could that be the problem?

I attach the code separately to send the channel value.

Ulteriore cosa è che guardando il diagramma temporale di pagina 8 si vede che richiede 16 colpi di clock per eseguire tutta la comunicazione; come faccio a far risultare esattamente questo numero di colpi di clock ?

Thank you

SPISettings SPI_Settings_Test_14(5000000, MSBFIRST, SPI_MODE3);

void setup() {
    
     Serial.begin(115200);

}

void loop() {

                   // SPI ACTIVED
                    SPI.begin();

                    // BUS SPI ACTIVED
                    SPI.beginTransaction(SPI_Settings_Test_14);

                    //  SLAVE ACTIVED
                    digitalWrite(FPGA_CS_VOLT_NEG, LOW);

                    SPI_Received_Value_BATT_480_VOLT = SPI.transfer16(0);

                    // SLAVE DISABLED
                    digitalWrite(FPGA_CS_VOLT_NEG, HIGH);

                    Serial.println(SPI_Received_Value_BATT_480_VOLT, BIN);

                    // BUS SPI DISABLED
                    SPI.endTransaction();

                    // SPI
                    SPI.end();


                    float Voltage = SPI_Received_Value_BATT_480_VOLT * (5.2/4096);
}
// SEND DATA -- CHANNEL VALUE

                    // ABILITO LA COMUNICAZIIONE SPI
                    SPI.begin();

                    // ABILITO IL BUS SPI
                    SPI.beginTransaction(SPI_Settings_Test_14);

                    // ATTIVO LO SLAVE
                    digitalWrite(FPGA_CS_VOLT_NEG, LOW);

                    SPI.transfer16(001000000000000); pag 17

                    // DISATTIVO LO SLAVE
                    digitalWrite(FPGA_CS_VOLT_NEG, HIGH);

                    SPI.endTransaction();

                    SPI.end();

datasheet.pdf (317 KB)