I have designed and built a small fairly simple circuit that uses a MAX6675 chip to take temperature readings from a multiplexed array of 16 k-type thermocouples.


MAX6675: https://www.farnell.com/datasheets/2079272.pdf

Thermocouple: https://www.farnell.com/datasheets/1918816.pdf

For the channel multiplexing I'm using a pair of MAX4544EUT+T and a CD4051BM96 (the latter is definitely a CMOS device, not sure about the former).

The system basically works from end-to-end. The data output from the MAX6675 is coherent and well formatted. However the actual temperatures indicated by the data are too high.

The circuit board and the thermocouples are just sitting at ambient temperature on my desk (about 19 Celsius at the moment). Yet I'm getting readings in the region of 47 Celsius from the MAX6675. This is far higher than the typical error rates suggested in the MAX6675's datasheet.

I believe that the firmware in the microcontroller is reading the data correctly, as it does properly identify "open" circuits for those channels where no thermocouple has been attached. The values do change if I touch one of the thermocouple junctions with my hand (ramping up quickly and then ramping down again when I let go). So fundamentally it is all working.

What could be the cause of this ~28 degree offset in the readings?

28 degrees is equivalent to 112 LSBs counts on the MAX6675's ADC!

I did wonder if it would be the extra resistance in the circuit because of the multiplexing chips, but this additional 160 Ohms is negligible compared to the 60,000 Ohm thermocouple input impedance on the MAX6675.

I think that the readings coming from the device should be absolute temperatures (e.g. any compensation for the cold junction is done by the MAX6675 internally), and do not need any further compensation in software.

The circuit itself does not warm up appreciably with prolonged use (no more than ambient + 4 degrees on top of the MAX6675 package measured with a Fluke meter). I don't think this is the cause of the discrepancy, as the readings are wrong by the same amount even when the board is starting from ambient temp.

The data format presented by the MAX6675 is shown on page 6 of the datasheet.

Consequently my readings of 0x05f8 for instance resolve to 47.75 Celsius.

To convert: right-shift the raw value by 3 bits, convert to float then multiply by 0.25 to get the temperature in Celsius.

Is this behaviour something I should simply be compensating for by calibrating my system with a compensation value? The datasheet doesn't mention anything about having to do that.

  • 1
    \$\begingroup\$ What is the multiplexer? \$\endgroup\$
    – tobalt
    Commented Nov 1, 2021 at 13:16
  • 2
    \$\begingroup\$ I tend to agree w/@tobalt that multiplexing might be the problem. Can you directly connect a thermocouple bypassing the multiplexer and post the results? Also, you did not mention the cold joint. Did you take care that the point of contact is only 1 type of metal (i.e. if soldered to the PCB, for example, you may be touching the copper trace or you may not be touching the copper trace). \$\endgroup\$
    – st2000
    Commented Nov 1, 2021 at 13:22
  • \$\begingroup\$ @tobalt, I've added the part numbers for the muxes. Both of those seem to have leakage in the order of nanoamps at the kind of temperatures I'm working at. \$\endgroup\$ Commented Nov 1, 2021 at 13:29
  • \$\begingroup\$ @st2000, the cold-junction seems to be entirely within the package body and there is no exposed thermal pad on the underside of the package. All pins are well soldered to their pads, inspected visually and with a meter. Stupidly, I designed this board so that the mux chips are always enabled, I'll have to life a pin on the 1-of-2 mux to isolate the analog input to the ADC, then I'll try connecting a thermocouple directly to the ADC. \$\endgroup\$ Commented Nov 1, 2021 at 13:33
  • 1
    \$\begingroup\$ You are really cramping our ability to help by not supplying a full schematic and links to the chips. That tends to waste a lot of time and lead to sub-optimal results. Seems like you could remove the ground on the thermocouple (-) sides, if present and allow the thermocouple potentials to float up to the reference voltage thus disabling the open detection current path, but that's just a guess. \$\endgroup\$ Commented Nov 1, 2021 at 14:49

2 Answers 2


The multiplexer I use is much "better" than CD4051, so results are not probably the same.

Take into account that Ron for CD4051 @5V @25°C is about 400 Ohm and may vary a "bit" with temperature. Leakage seems to be over ~ 100 nA to ~ 1000 nA. (100nA * 60k = 6 mV -> some degrees ...)

With the lack of schematic, I can make only a guess that "resistance's" are not "same value" with all thermocouples. I guess also that voltages are in order of mV.

Differences of voltage measured, on the 3 channels of interest, are in order of 500uV -> around 15 °C.

enter image description here


Your design is bad, but you can probably compensate for it in the firmware.

I spent most of today dunking the probes in ice-water, then later heating them up with a 1 Ohm resistor attached to a PSU.

Turns out, the error is highly linear - at least between 0°C and about 50°C.

Simply subtracting 29.5°C from each sample basically solves the problem.

As previously discussed in the comments, it is likely that this error is indeed caused by the MAX4454 "1-of-2" mux chip (which is a CMOS device). Additional (unwanted) leakage current is likely passing through the thermocouple which gives an artificially high temperature reading.

The design is obviously flawed. I should have used a different way to multiplex these signals. Better quality mux chips designed for low leakage etc.

But... it does raise a question, can this actually be a feature? The MAX6675 according to the data sheet at least, only measures down to 0°C. But since this accidental +29.5°C offset exists, perhaps this means that this board is now able to make measurements down to around -29.5°C (which the MAX6675 would think was 0°C).

That's a hypothetical question of course, if I made 10 of these devices, then they will probably all have different error offsets due to miniscule fabrication differences in the silicon chips on each board.

I'll try this tomorrow - refrigerating the probes down to -24°C or so (as cold as my freezer will go) and see if the readings track with my multimeter reference.

Pictures for fun: The orange line is the average of four of the channels (two on each side of the "1-of-2" mux) the blue trace is the true temperature...

enter image description here

This one is each of those 4 channels individually over the same temperature range. The separation of the lines on the right side is probably due to my failing to expose them all to the heat source evenly...

enter image description here


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.