I have been using Arduino UNO connecting to an MAX11040K through SPI.
Got a bit error with communicating with more than a byte, need some help here.
When started writing WCR and reading WCR was fine, WDRCR and RDRCR both do well now.
However I couldn't read the results correctly.
The results for all the channels are just showing 262143 =(
CR=10000
RCR Confirmation=10000
WDRCR=10011000000000
WDRCR Confirmation=10011000000000
RDR=11110000
DATA=262143 IC=0 Ch=0
DATA=262143 IC=0 Ch=1
DATA=262143 IC=0 Ch=2
DATA=262143 IC=0 Ch=3
RDR=11110000
DATA=262143 IC=0 Ch=0
DATA=262143 IC=0 Ch=1
DATA=262143 IC=0 Ch=2
DATA=262143 IC=0 Ch=3
void loop() {
// put your main code here, to run repeatedly:
if (millis() - time >= samplingRate) { // time loop
time = millis();
byte ADCData;
long ADCData_0 = 0;
long ADCData_1 = 0;
long ADCData_2 = 0;
long ADCData_3 = 0;
// don't do anything until the data ready pin is high:
if (digitalRead(dataReadyPin) == LOW) {
//Read the temperature data
Serial.print("RDR=");
Serial.println(RDR, BIN);
// take the chip select low to select the device:
digitalWrite(chipSelectPin, LOW);
// send the device the register you want to read:
SPI.transfer(RDR);
// send a value of 0 to read the byte returned:
ADCData = SPI.transfer(0x00);
ADCData_0 = ADCData;
ADCData = SPI.transfer(0x00);
ADCData_0 = (ADCData_0 << 8) | ADCData ;
ADCData = SPI.transfer(0x00);
ADCData_0 = (ADCData_0 << 8) | ADCData ;
ADCData = SPI.transfer(0x00);
ADCData_1 = ADCData;
ADCData = SPI.transfer(0x00);
ADCData_1 = (ADCData_1 << 8) | ADCData ;
ADCData = SPI.transfer(0x00);
ADCData_1 = (ADCData_1 << 8) | ADCData ;
ADCData = SPI.transfer(0x00);
ADCData_2 = ADCData;
ADCData = SPI.transfer(0x00);
ADCData_2 = (ADCData_2 << 8) | ADCData ;
ADCData = SPI.transfer(0x00);
ADCData_2 = (ADCData_2 << 8) | ADCData ;
ADCData = SPI.transfer(0x00);
ADCData_3 = ADCData;
ADCData = SPI.transfer(0x00);
ADCData_3 = (ADCData_3 << 8) | ADCData ;
ADCData = SPI.transfer(0x00);
ADCData_3 = (ADCData_3 << 8) | ADCData ;
// take the chip select high to de-select:
digitalWrite(chipSelectPin, HIGH);
// For debuging
// Channel 0
Serial.print("DATA=");
Serial.print((ADCData_0 >> 5) & 0b1111111111111111111, DEC);
Serial.print("\t");
Serial.print("IC=");
Serial.print((ADCData_0 >> 2) & 0b111, BIN);
Serial.print("\t");
Serial.print("Ch=");
Serial.println(ADCData_0 & 0b11, DEC);
// Channel 1
Serial.print("DATA=");
Serial.print((ADCData_1 >> 5) & 0b1111111111111111111, DEC);
Serial.print("\t");
Serial.print("IC=");
Serial.print((ADCData_1 >> 2) & 0b111, BIN);
Serial.print("\t");
Serial.print("Ch=");
Serial.println(ADCData_1 & 0b11, DEC);
// Channel 2
Serial.print("DATA=");
Serial.print((ADCData_2 >> 5) & 0b1111111111111111111, DEC);
Serial.print("\t");
Serial.print("IC=");
Serial.print((ADCData_2 >> 2) & 0b111, BIN);
Serial.print("\t");
Serial.print("Ch=");
Serial.println(ADCData_2 & 0b11, DEC);
// Channel 3
Serial.print("DATA=");
Serial.print((ADCData_3 >> 5) & 0b1111111111111111111, DEC);
Serial.print("\t");
Serial.print("IC=");
Serial.print((ADCData_3 >> 2) & 0b111, BIN);
Serial.print("\t");
Serial.print("Ch=");
Serial.println(ADCData_3 & 0b11, DEC);
}
} // time loop
}