I’m interested in making a multi probe temperature monitor based on thermocouples but need a bit of advice on SPI VS i2c
SPI is a faster protocol since it doesn’t share the bus where i2c shares the bus, right?
So in a case where I would like high speed measurements SPI would be best where if I want multiple sensors I should use i2c.
I’ve been googling around looking for a 3.3v compatible thermocouple amp boards and was wondering if anyone has any recommendations where the libraries are already supported by particle.
A million thanks in advance
Edit: I want to monitor refrigeration equipment. Most thermocouple gear I see talks about how high it can measure and don’t talk much about the low end so I’m totally barking up the wrong tree, just say the word. I do have some thermosters in a kit but would rather run thermocouple wire to multiple spots and am concerned about properly enclosing the thermosters so they’re not affected by condensation
I don’t know much about thermocouples but I can comment on SPI and I2C.
SPI can be a shared bus. The difference is that the SPI bus is not “addressed”. Meaning that each device on the bus does not have a unique address. When you want to communicate with an SPI device, you enable its Chip Select (CS) pin. After you finish communicating with that device, you disable its CS pin and move on to the next device. The other difference is that SPI can run much faster than I2C. You have to set the SPI clock divider to whatever speed is appropriate for all the devices on your bus (can be in the mbit range up to the system clock speed). When using SPI, you clock out whatever is in the SPI out buffer on the MOSI line. As you are “clocking out” data, you are also reading in data on the MISO line. The SPI bus requires more lines (minimum 4… MOSI, MISO and SPICLK are shared, plus 1 additional unique CS line for each device on the bus) than the I2C bus (2 lines total).
For I2C, the bus can communicate at 1 or 2 fixed speeds (100k/s “full speed” or 400k/s “fast speed” modes). You can communicate in the 1mbit/s range but I haven’t seen alot of devices that support the “high speed” mode. When you communicate with a device, you first have to send its unique I2C bus address and (usually) the “register address” that you want to read. All slave devices listen for their address to be called. When they “hear” their unique address, then the protocol allows the slave device to send the requested data.
You might want to check out the 1-wire Dallas DS18B20 temperature devices. You can have multiple devices on the same wire.
Or check out any of the temperature monitoring devices on Adafruit. They usually have good tutorials for their devices. If you go onto the Particle WebIDE, click on the libraries button and search for the type of chip used in the device you’re interested in. For example, search for DS18B20 and you’ll find a few libraries… the most reliable of which is maintained by @ScruffR.
@kkjensen, the advice from @ninjatill is excellent. Thermocouples are great for extreme temperature ranges and the Type K is the most popular. To work properly, however, you need to have cold-junction temperature compensation and adjust for the thermocouple’s not-so-linear output. I have used both the MAX31855 and the MAX31856 thermocouple amplifiers (both available from Adafruit) for interfacing with Type K thermocouples. The MAX31856 can handle any type of thermocouple and automatically linearizes the temperature output. Both these devices are SPI.
Maxim and others make multi-channel amplifiers that are I2C or SPI capable depending on your application. Depending on the temperature range you need, @ninjatill’s suggestion of a DS18B20 sensor is good as well.
As for “speed”, the issue is not the speed of the sensor or sensor-amplifier but more the speed of the refrigerator or thermal inertia. Rarely do you need to measure temperature of a fridge very fast since it doesn’t change very fast!