Help Required - Four MCP9600 Thermocouple Amplifiers on Same I2C Bus

I’ve finally figured it out, so to assist anyone else wishing to connect four MCP9600 thermocouples to an Arduino, here’s my code. Note I amended the Seeed MCP9600 underside PCB jumper settings to give the following I2C addresses; (0x60) kept the default middle-to-right solder bridge, (0x63) cut the default middle-to-right solder bridge and replaced it by a 0603 SMT 3.57k resistor, (0x65) cut the default middle-to-right solder bridge and replaced it by a 0603 SMT 10.2k resistor, (0x67) cut the default middle-to-right solder bridge and soldered the middle-to-left jumpers together. I hope this helps anyone.

#include “Seeed_MCP9600.h”

#ifdef ARDUINO_SAMD_VARIANT_COMPLIANCE
#define SERIAL SerialUSB
#else
#define SERIAL Serial
#endif

const int N_SENSOR = 4;
MCP9600 sensors[N_SENSOR] = {MCP9600(0x60), MCP9600(0x63), MCP9600(0x65), MCP9600(0x67)};

err_t sensors_basic_config() {
err_t ret = NO_ERROR;

for (int i = 0; i < N_SENSOR; i++) {
CHECK_RESULT(ret, sensors[i].set_filt_coefficients(FILT_MID));
CHECK_RESULT(ret, sensors[i].set_cold_junc_resolution(COLD_JUNC_RESOLUTION_0_25));
CHECK_RESULT(ret, sensors[i].set_ADC_meas_resolution(ADC_14BIT_RESOLUTION));
CHECK_RESULT(ret, sensors[i].set_burst_mode_samp(BURST_32_SAMPLE));
CHECK_RESULT(ret, sensors[i].set_sensor_mode(NORMAL_OPERATION));
SERIAL.print("err_t ret = ");
SERIAL.println(ret);
}

return ret;
}

err_t get_temperature(MCP9600 * sensor, float * value) {
err_t ret = NO_ERROR;
float hot_junc = 0;
float junc_delta = 0;
float cold_junc = 0;

CHECK_RESULT(ret, sensor->read_hot_junc(&hot_junc));
CHECK_RESULT(ret, sensor->read_junc_temp_delta(&junc_delta));
CHECK_RESULT(ret, sensor->read_cold_junc(&cold_junc));

*value = hot_junc;

return ret;
}

void setup() {
SERIAL.begin(9600);
delay(10);

for (int i = 0; i < N_SENSOR; i++) {
if (sensors[i].init(THER_TYPE_K)) {
SERIAL.println(“Sensor Initialisation Failed!”);
}
}

sensors_basic_config();
}

void loop() {
float temps[N_SENSOR] = {0};

for (int i = 0; i < N_SENSOR; i++) {
get_temperature(&(sensors[i]), &(temps[i]));
}

for (int i = 0; i < N_SENSOR; i++) {
SERIAL.print(i);
SERIAL.print(" ");
SERIAL.println(temps[i]);
}

SERIAL.println();
delay(1000);
}

1 Like