Guys,
I have 15 MAX31865s on a board with a 1284P chip and TI TXB0106 chips for level converters.
I can't seem to get any response back from the chip, I'm just talking to 1 right now, with hooks in the code to expand to 15 later.
All 15 are in place, wired up for 2-wire conversion of PTD1000 probes.
Here's the code and the results I am getting. Any ideas?
/*
Code to read 15 MAX31865 RTD chips via ATMega1284P & send data out via Serial port using FTDI chip.
TI TXB0108 used for 5V to 3.3V conversion of SCK, MOSI, CSx going out, and 3.3V to 5V conversion on MISO coming back
RTD1000 probe with 4K Rref resistor, 10nF Cl.
Only access 1 device for now
*/
#include <SPI.h>
// declare chip selects
// 0, 1 are serial pins
/*
byte ss0 = 10; // 10 as output for SPI Master mode
byte ss1 = 7;
byte ss2 = 6;
byte ss3 = 5;
byte ss4 = 4;
byte ss5 = 21;
byte ss6 = 20;
byte ss7 = 19;
byte ss8 = 18;
// 11, 12, 13 are SPI pins
byte ss9 = 17;
byte ss10 = 16;
byte ss11 = 15;
byte ss12 = 14;
byte ss13 = 29;
byte ss14 = 28;
*/
byte SSarray[] = {
10,7,6,5,4,21,20,19,18,17,16,15,14,29,28}; // slave select pins. See Bobuino pins_arduino.h & schematic
// 2,3,8,9,22,23,24,25,26,27,30,31 not used. Set up as inputs with pullup resistors for power savings
//declare variables
// registers
byte config_read = 0x00;
byte config_write = 0x80;
byte RTD_MSB_read = 0x01;
byte RTD_MSB_write = 0x81; // not a valid register address
byte RTD_LSB_read = 0x02;
byte RTD_LSB_write = 0x82; // not a valid register address
byte High_Fault_Threshold_MSB_read = 0x03; // 83h FFh R/W
byte High_Fault_Threshold_MSB_write = 0x83;
byte High_Fault_Threshold_LSB_read = 0x04; // 84h FFh R/W
byte High_Fault_Threshold_LSB_write = 0x84;
byte Low_Fault_Threshold_MSB_read = 0x05; // 85h 00h R/
byte Low_Fault_Threshold_MSB_write = 0x85;
byte Low_Fault_Threshold_LSB_read = 0x06; // 86h 00h R/W
byte Low_Fault_Threshold_LSB_write = 0x86;
byte Fault_Status_write = 0x87; // not a valid register address
byte Fault_Status_read = 0x07; // 00h R
byte Readarray[120] ; // 8 x 15 RTDs, start on 0,8,16,24,32,40,48,56,64,72,80,88,96,104,112
byte x=0; // chip counter
byte y=0; // register counter
byte incomingByte1;
byte incomingByte2;
byte incomingByte3;
byte incomingByte4;
unsigned long currentMillis;
unsigned long previousMillis;
unsigned long elapsedMillis;
//unsigned long duration = 55; // conversion time, milliseconds
unsigned long interval = 100UL; // Set longer for debug, keep PC serial port from getting swamped
void setup(){
// set up output pins
for (x=0; x<15; x=x+1){
pinMode(SSarray[x], OUTPUT); // set Slave Select pins as outputs
}
Serial.begin(115200);
// SPI mode changes
SPI.setDataMode(SPI_MODE1); // choices 0,1,2,3 - use 1,3 for MAX31865
SPI.setBitOrder(MSBFIRST); // choices LSBFIRST, MSBFIRST - use MSBFIRST for MAX31865
SPI.setClockDivider(SPI_CLOCK_DIV16); // choices 2,4,8,16,32,64,128. 2 = 8 MHz, 4 = 4 MHz, 8 = 1 MHz, etc. 5 MHz max for MAX31865
SPI.begin(); //
x=0; // setup "chip pointer" x for use later, eventually loop thru 15 MAX31865 chips
} // end setup
void loop(){
// send write address, data to start a conversion
digitalWrite (SSarray[x], LOW);
SPI.transfer(config_write); // send out register #
delayMicroseconds(10); // see if slight delay between write & read helps
SPI.transfer(0b10100010); // send out data:
// 7 1 = bias on,
// 6 0 = conversion mode off
// 5 1 = start a conversion
// 4 0 = 2 wire mode
// 3,2 0, 0 = no action
// 1 1 = clear faults in status register
// 0 0 = 60 Hz filter
digitalWrite(SSarray[x], HIGH);
delay(500); // wait for conversion - 500mS
// send read address, read the data
digitalWrite (SSarray[x], LOW);
SPI.transfer(RTD_MSB_read); // send out register #
delayMicroseconds(10);
incomingByte1 = SPI.transfer(0); // read register contents back
digitalWrite(SSarray[x], HIGH);
// send write address, data
digitalWrite (SSarray[x], LOW);
SPI.transfer(RTD_LSB_read); // send out register #
delayMicroseconds(10);
incomingByte2 = SPI.transfer(0); // read register contents back
digitalWrite(SSarray[x], HIGH);
// send write address, data
digitalWrite (SSarray[x], LOW);
SPI.transfer(Fault_Status_read); // send out register #
delayMicroseconds(10);
incomingByte3 = SPI.transfer(0); // read register contents back
digitalWrite(SSarray[x], HIGH);
// send write address, data to start a conversion
digitalWrite (SSarray[x], LOW);
SPI.transfer(config_read); // send out register #
delayMicroseconds(10);
incomingByte4 = SPI.transfer(0); // read register contents back
digitalWrite(SSarray[x], HIGH);
// show the data
Serial.print("MSB ");
Serial.print(incomingByte1, HEX);
Serial.print(" LSB ");
Serial.print(incomingByte2, HEX);
Serial.print(" Fault ");
Serial.print(incomingByte3, HEX);
Serial.print(" Config ");
Serial.println(incomingByte4, HEX);
delay(200); // wait for conversion
} // end loop
[code]
[/code]
MAX31865.pdf (1.53 MB)
txb0106.pdf (748 KB)