I am having trouble configuring Arduino Due SPI to an ADC. Here is a link to the ADC: https://www.analog.com/media/en/technical-documentation/data-sheets/AD7490.pdf
Here is how I have the pins connected: +3.3V > 7490 pin 22 Vin +3.3V > 7490 Vref DUE CS (8) > 7490 pin 20 SS - slave select) DUE SCK > 7490 pin 16 (SCK - clock) DUE MOSI > 7490 pin 19 (MOSI - data out) Ground > 7490 pin 24( all gnds tied together DUE MISO > 7490 pin 15
Below is my code, I feel like I am writing the correct bits into the register. The problem I think I'm having is getting the timing write. The code is a simple attempt to read a single channel.
#include <SPI.h>
// Set Constants
const int adcChipSelectPin = 8; // set pin 8 as the chip select for the
ADC:
// Start setup function:
void setup() {
pinMode (adcChipSelectPin, OUTPUT);
// set the ChipSelectPins high initially:
digitalWrite(adcChipSelectPin, HIGH);
// initialise SPI:
SPI.begin();
SPI.setBitOrder(MSBFIRST); // Not strictly needed but just to be
sure.
SPI.setDataMode(SPI_MODE0); // Not strictly needed but just to be
sure.
Serial.begin(9600);
//Clock Speed: Master clock/divider
//84Mhz/64 = 1.3 MHz
SPI.setClockDivider(SPI_CLOCK_DIV64);
} // End setup function.
// Start loop function:
void loop() {
float voltage[2];
for (int i = 0; i < 3; i++) {
voltage[i] = readAdc(0, 0);
}
}// End of loop function.
//Function to read the ADC, accepts the channel to be read.
float readAdc(int channel, int slave) {
float value;
if (slave == 0) {
noInterrupts(); // disable interupts to prepare to send address data to the
ADC.
digitalWrite(adcChipSelectPin, LOW); // take the Chip Select pin low to
select the ADC.
byte FirstByte = 0b10000011; // b00000111 Isolates the three LSB.
byte SecondByte = 0b00110000; // b00001111 isolates the 4 LSB for the
value returned.
SPI.transfer(FirstByte);
byte response1 = SPI.transfer(SecondByte);
byte response2 = SPI.transfer(0x00);
digitalWrite(adcChipSelectPin, HIGH); // take the Chip Select pin high to
de-select the ADC.
interrupts(); // Enable interupts.
Serial.println(response1);
Serial.println(response2);
}
Any pointers are appreciated.
Cheers!