logo elektroda
logo elektroda
X
logo elektroda

High temperature measurement - thermocouple with MAX6675 - connection and communication protocol

p.kaczmarek2  6 2718 Cool? (+2)
📢 Listen (AI):

TL;DR

  • K-type thermocouple with the MAX6675 module for measuring high temperatures from 0°C to 800°C.
  • It uses a simple SPI-style interface on three GPIOs, reading 16 bits and extracting the 12 measurement bits after checking the error flag.
  • The kit runs from 3 V to 5.5 V and can be bought for about 10 zlotys from China, or a few tens of zlotys locally.
  • Reading is straightforward: pull CS low, clock data out, shift the word by 3 bits, and multiply by 0.25 to get degrees Celsius.
  • It works well for hot-air testing and even ran on BK7231, but you must order the complete thermocouple-plus-module set, not the MAX6675 board alone.
Generated by the language model.
K-type thermocouple with MAX6675 A/D converter module, kit.
The K-type thermocouple together with the MAX6675 A/D converter module allows you to easily measure high temperatures from 0°C to 800°C with 12-bit resolution. The kit presented here operates on a voltage from 3 V to 5.5 V and uses a simple SPI protocol for communication, which can be equally well implemented on any three GPIOs of the selected microcontroller.

Let's probably start with the most important thing, i.e. the price - at the moment of writing this topic, the whole kit can be bought with shipping for a few tens of zlotys in our country, and importing from China we can close in the amount of 10 zlotys.
Offer of type K temperature sensors with MAX6675 module Screenshot of the MAX6675 temperature module offer with a Type K thermocouple.
It is only important to order the whole set, and not accidentally the module alone with the MAX6675.... and by the way let's have a look at its catalogue note:
Diagram of applications for MAX6675 chip
The connection to the MCU seems to be very simple, only three lines are needed
MISO, SCK, SSB, but let's not forget also the common ground and the power supply.
The SPI protocol - it sounds scary, but in practice here SPI is used in the simplest possible way. The datasheet note describes how the communication is done:
Page from the MAX6675 datasheet.
Visually presented communication:
Diagrams showing the serial interface protocol and data reading method for the MAX6675 chip.
So basically we set the CS to a low state, then manipulate the clock and read the next bits from the SO. The whole thing has to be done at the same time respecting the timings, but everything is on the diagram. The meaning of the 16 bits read is also defined in the diagram - we are mainly interested in the 12 bits of measurement, i.e. bits 3 to 14 inclusive.
Now the question of how to use this with the MCU - well, the best way is to use a ready-made library, there are plenty of these under the Arduino:
https://www.arduino.cc/reference/en/libraries/max6675/
It can be added via Library Manager.
Here's another library:
https://github.com/adafruit/MAX6675-library
For most people you could end here, but anyway now we'll take a look at how this communication is implemented internally.
We don't use hardware SPI here - any digital GPIO will suffice:
Code: C / C++
Log in, to see the code

For reading we have 16 bits, so two bytes. You will need the function that reads the byte:
Code: C / C++
Log in, to see the code

In the loop we set the clock to a low state, wait a moment and then read the data from MISO. Then we set the clock to a high state and wait, after which the loop repeats.
There is still manipulation of the CS pin missing, but this we have outside this function:
Code: C / C++
Log in, to see the code

Here we also read both bytes and assemble them into a single 16-bit word (although you could just as well read the whole 16 bits at once in spiRead).
Then we need to interpret the read data. Here we have a bit more than the measurement itself...
Code: C / C++
Log in, to see the code

One of the bits allows us to check if the measurement was successful at all. This can be useful when looking for errors. After checking the error, we simply shift the whole thing by 3 bits (to "cut off" the three youngest bits) and then multiply by 0.25 to get the result in degrees.
And that's it - we already have the measurement. As you can probably see, this is very easy to implement on practically any MCU and those proud SPI's of the offerings are not at all so terrible in this case.

What can this be used for? In my case, the kit with the MAX6675 is useful for hot air testing:
Type K thermocouple with MAX6675 A/D converter module on a breadboard.
Microcontroller with connected wires on a breadboard Close-up of a type K thermocouple connected to a screw in a workshop setting.
This is extremely useful for me, because, as I have found out over time, the temperature actually 'seen' by the PCB can differ significantly from the temperature on the display of the hot air station, depending on which station you have and what blowing you set. I document my measurements and put them on interactive graphs ( version 350°C , version 450°C ).

In summary, the kit with the MAX6675 is very cheap and at the same time easy to run, beginners should have no problem with it, as well as it should run on slightly less familiar MCUs, I even ran it myself on BK7231 , although in principle the same code will run on all platforms supported by OBK .
I invite you to discuss. Have any of you also used the MAX6675 in your projects? What are your experiences with this chip, or would you prefer an alternative?

About Author
p.kaczmarek2
p.kaczmarek2 wrote 14412 posts with rating 12356 , helped 650 times. Been with us since 2014 year.

Comments

radex324 05 May 2024 10:21

It is better to use the MAX31855 chip, the max6675 at 2 measurements per second above 600* "jams" and the measurements change every 2-3s. I was making a controller for EGT reading in the car and just initially... [Read more]

p.kaczmarek2 05 May 2024 10:41

That's interesting, I haven't encountered this problem with the MAX6675, only that I only use it up to 500°C. Additionally, according to the datasheet for the MAX6675 it should not take more than 0.22s:... [Read more]

austin007 06 May 2024 08:19

I used to be about to buy this MAX6675 board from majfriends but after my experience with maxim17043 I gave up. I think it's a fake chip. Functionally did you check that it works properly? [Read more]

cukras 09 May 2024 10:49

I've also been thinking about viewing the EGT temperature in order to make a DPF firing indicator(my car QQ+2, 2.0 dCi in no way signals that the DPF firing procedure has started). I have a problem whether... [Read more]

radex324 09 May 2024 14:20

@cukras External EGT probe 3mm. [Read more]

cukras 10 May 2024 13:48

Hi, can you elaborate a bit or on PW explain how you fixed it and what the reading was? [Read more]

FAQ

TL;DR: With 3 wires and “very easy to implement” SPI bit-banging, a K-type thermocouple plus MAX6675 gives low-cost high-temperature measurement for Arduino and other MCUs. This FAQ helps makers connect the module, decode its 16-bit output, and decide when MAX31855 is the better choice above 600°C. [#21070305]

Why it matters: It shows how to get a real PCB or exhaust temperature reading instead of trusting a station display or guessing from indirect sensors.

Option Supply / update data mentioned in thread Temperature use discussed Main takeaway
MAX6675 3 V to 5.5 V; datasheet time cited as 0.22 s Used successfully up to 500°C by the author Cheap, simple, good for many MCU projects
MAX31855 0.1 s cited in the discussion Reported as better above 600°C Faster updates and fewer issues in one car EGT project

Key insight: MAX6675 is easy and inexpensive, but the thread’s strongest practical warning is about high-temperature use above 600°C, where one user saw slow or stalled updates and preferred MAX31855.

Quick Facts

  • The module discussed measures about 0°C to 800°C with 12-bit resolution and works from 3 V to 5.5 V, which makes it easy to pair with common MCUs. [#21070305]
  • The forum author says the full set can cost a few tens of zlotys locally, or about 10 PLN when imported from China, so price is a major reason people try MAX6675. [#21070305]
  • The MAX6675 readout uses 16 bits, but the actual temperature value is taken from bits 3 to 14 and then multiplied by 0.25°C per step. [#21070305]
  • The discussion cites a MAX6675 conversion time of 0.22 s versus 0.1 s for MAX31855, which helps explain why the newer part may feel more responsive. [#21070494]
  • One real-world use case was hot-air verification, where the measured temperature at the PCB differed noticeably from the hot-air station display depending on station type and airflow setting. [#21070305]

How do I connect a K-type thermocouple module with MAX6675 to a microcontroller using MISO, SCK, and CS/SSB?

Connect the module with three signal lines plus power and ground. Wire MISO/SO to the MCU input, SCK to a GPIO output, and CS/SSB to another GPIO output. Also connect VCC and a common ground; the module in the thread works from 3 V to 5.5 V. The author stresses that the interface looks simple, but the ground connection is just as important as the three SPI-style lines. [#21070305]

What is the SPI communication sequence for reading temperature data from the MAX6675 without using hardware SPI?

Pull CS low, clock in 16 bits from SO/MISO, then raise CS high. A simple bit-banged read works in 3 steps: 1. Set CS low and wait about 10 µs. 2. Toggle SCK, reading MISO on each cycle. 3. Read two bytes, combine them into one 16-bit value, then set CS high. The thread’s sample code uses arbitrary GPIO pins, so hardware SPI is not required. [#21070305]

How do I decode the 16-bit MAX6675 output and convert bits 3 to 14 into a temperature value in degrees Celsius?

Shift the 16-bit value right by 3 bits and multiply the result by 0.25. The thread states that the useful measurement is stored in bits 3 through 14, while lower bits include status information. In code, the routine reads two bytes, forms one uint16_t, checks the error bit, then uses v >>= 3; and returns v * 0.25. That yields the temperature in °C. [#21070305]

Why does the MAX6675 return an error when no thermocouple is attached, and how is that error bit detected in code?

It returns an error because the chip can detect an open thermocouple input. The example code checks v & 0x4, and when that bit is set it returns NAN instead of a temperature. That gives you a clear failure path for wiring faults, disconnected probes, or startup checks before you trust the measurement. [#21070305]

Which is better for high-temperature measurements above 600°C: MAX6675 or MAX31855?

For above 600°C, the thread points to MAX31855 as the safer choice. One user reported that MAX6675 “jams” above 600°C, updating only every 2 to 3 seconds, while MAX31855 gave about 3 readings per second with no such problem in a car EGT project. The thread author still reports good MAX6675 results up to 500°C, so the practical split is moderate temperatures versus harsher high-heat use. [#21070471]

Why might a MAX6675 module seem to 'jam' above 600°C and update readings only every 2 to 3 seconds?

The thread suggests this can happen in demanding high-temperature use, especially above 600°C. One user saw updates only every 2–3 s with MAX6675 in an automotive EGT build, despite the later note that the datasheet timing should be no more than 0.22 s. That mismatch points to a real-world limit in some modules or setups, not just the nominal timing figure. [#21070471]

What is a K-type thermocouple, and why is it commonly used with MAX6675 for measuring high temperatures?

“K-type thermocouple” is a temperature sensor that generates a small voltage from two dissimilar metals, supports wide high-temperature use, and is commonly paired with converter chips that turn that signal into digital data. In this thread, it is used with MAX6675 because the set is cheap, simple, and covers roughly 0°C to 800°C with digital readout suitable for MCUs. [#21070305]

What is EGT, and how is an EGT probe used in a car temperature monitoring setup?

“EGT” is an exhaust gas temperature measurement used in automotive monitoring, where a heat probe tracks exhaust-side temperature changes that reflect engine or aftertreatment conditions. In the thread, a user built a car controller around EGT reading and later said the solution used an external 3 mm probe, not an internal vehicle sensor tap. [#21075786]

How can I read a MAX6675 on arbitrary GPIO pins with bit-banged SPI on Arduino or another MCU?

Use three ordinary GPIO pins and toggle them in software. The thread’s sample constructor assigns SCLK, CS, and MISO, sets CS and SCLK as outputs, sets MISO as input, and keeps CS high when idle. A byte-read loop then toggles the clock with 10 µs delays and samples the data pin, so the same pattern works on Arduino, BK7231, or another MCU. [#21070305]

What are the measurement range, resolution, and supply voltage limits of the MAX6675 thermocouple module?

The thread gives a working range of about 0°C to 800°C, 12-bit resolution, and a supply range of 3 V to 5.5 V. Those numbers make the module practical for hot air, heater, and general high-temperature experiments. The same post also notes that the full kit is inexpensive, which is why it appeals to beginners and quick prototypes. [#21070305]

How do Arduino MAX6675 libraries work internally, and when is it better to use a library versus writing the SPI read routine myself?

Arduino libraries wrap a very small routine: configure three pins, read 16 bits, test the error bit, shift right by 3, then multiply by 0.25. Use a library when you want fast setup through Library Manager. Write your own routine when you need custom GPIO mapping, want to understand timing, or port the code to another platform such as BK7231 or supported OBK targets. [#21070305]

What are the risks of buying very cheap MAX6675 boards online, and how can I check whether the chip is genuine or fake?

The main risk raised in the thread is getting a suspicious or fake chip on a very cheap board. One commenter explicitly says they avoided buying after earlier bad experience with another Maxim part and asked whether the module had been functionally verified. A practical check from this discussion is simple: confirm it reads correctly across known temperatures and does not trigger false faults or unstable updates. [#21071535]

How can I use a MAX6675 and thermocouple to verify the real hot-air temperature reaching a PCB instead of trusting the station display?

Place the thermocouple where the PCB actually sees heat and log the result. The author uses the MAX6675 set for hot air testing because the real board temperature can differ significantly from the hot-air station display, depending on the station and airflow. That makes direct measurement more trustworthy than panel numbers when profiling rework or comparing stations at 350°C and 450°C settings. [#21070305]

What's the best way to build a DPF firing indicator in a car using exhaust temperature measurement: external EGT probe, thermocouple on the DPF housing, or tapping into an existing sensor?

The clearest answer in the thread is to use an external EGT probe. A user considering a DPF firing indicator asked whether to mount a thermocouple on the housing or hook into an existing sensor, and the only concrete implementation reply was “External EGT probe 3mm.” That does not prove it is universally best, but it is the thread’s only confirmed working method. [#21075786]

How was the external 3 mm EGT probe installed for car exhaust monitoring, and what temperature readings were observed?

The thread does not provide those details. It confirms only that the car setup used an external 3 mm EGT probe, but it gives no mounting position, no fastening method, and no observed temperature values. If you need exact installation steps or measured exhaust numbers, this thread is incomplete on that point. [#21075786]
Generated by the language model.
%}