#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);
}
} The serial.prints output 255 consistently. In my experience this means the SPI is configured incorrectly.