I want to get temperature data at the rate of 50 readings in one second. The data sheet of MP9600 says that it can read one temperature value in 17 ms.
I will be using the thermocouples with an esp8266. I can use a different microcontroller too. Realistically speaking, how fast can I record temperature with these if I use the MCP9600? What should I do differently if I want to record data at such a high speed? Any assistance is welcome.
I have a Sparkfun MCP9600 which is connected to Artemis ATP.
I have reworked the original Example1 to do the testing (see below). While it can perform a reading fast, it needs to be converted with the ADC. The resolution of that ADC has a big impact on the time it takes to complete. The timing is different than the datasheet indicates, but tracing the I2C line shows this is really the timing with which the MCP9600 is responding.
resolution avg time to read
18 bits 109ms
16 bits 55ms
14 bits 33ms
12 bits 30ms
The testing code used :
#include <SparkFun_MCP9600.h>
MCP9600 tempSensor;
void setup(){
Serial.begin(115200);
Wire.begin();
Wire.setClock(100000);
tempSensor.begin(); // Uses the default address (0x60) for SparkFun Thermocouple Amplifier
//tempSensor.begin(0x66); // Default address (0x66) for SparkX Thermocouple Amplifier
//check if the sensor is connected
if(tempSensor.isConnected()){
Serial.println("Device will acknowledge!");
}
else {
Serial.println("Device did not acknowledge! Freezing.");
while(1); //hang forever
}
//check if the Device ID is correct
if(tempSensor.checkDeviceID()){
Serial.println("Device ID is correct!");
}
else {
Serial.println("Device ID is not correct! Freezing.");
while(1);
}
// make sure it is on defaults
if(! tempSensor.resetToDefaults()){
Serial.println("Default restore is completed");
}
else {
Serial.println("Default restore failed! Freezing.");
while(1);
}
// set the resolution.
// RES_18_BIT avg time 108ms
// RES_16_BIT avg time 55ms
// RES_14_BIT avg time 33ms
// RES_12_BIT avg time 30ms
tempSensor.setThermocoupleResolution(RES_12_BIT);
unsigned long t = 0;
unsigned long st = millis();
unsigned long en = st;
while(t < 50){
if(tempSensor.available()){
// Serial.print("waited :");
// Serial.println(millis()-en);
// en = millis();
// you must read to reset the available status bit
float h = tempSensor.getThermocoupleTemp();
t++;
}
}
en = millis();
Serial.print("time taken:");
Serial.println(en - st);
Serial.print("cnt: ");
Serial.println(t);
}
void loop(){
delay(1000);
}
Thank you Paul! So if I use a microcontroller like ESP8266 and if I pick 12 bit resolution will I get a temperature reading every 30 ms? It’s way better than my MAX6675.
Moreover, can you suggest an amplifier that’s cheaper than the MCP9600 but gives similar sampling rates?
I have just taken my Sparkfun ESP8266 thing, connected the MCP9600, loaded the same sketch, and can confirm the ~30mS for 12-bit resolution. I am not an expert in the area of MCP9600 or MAX6675 or any other, so I can not provide you with some suggestions.
paulvha:
I have just taken my Sparkfun ESP8266 thing, connected the MCP9600, loaded the same sketch, and can confirm the ~30mS for 12-bit resolution. I am not an expert in the area of MCP9600 or MAX6675 or any other, so I can not provide you with some suggestions.
Hey. These MCP9600 circuits, are they the same as those made by other companies? For example, how different is the Qwicc Thermocouple Amplifier MCP9600 different from this product-[https://wiki.seeedstudio.com/Grove-I2C_ ... r-MCP9600/](https://wiki.seeedstudio.com/Grove-I2C_Thermocouple_Amplifier-MCP9600/)