+ version 0.1.01

+ optimized _read() function for speed
  based upon numbers from datasheet
+ some refactoring
+ added demo2 - delta-read
+ added demo3 - measure timing
This commit is contained in:
Rob Tillaart 2014-01-02 22:24:55 +01:00
parent d59d553eb2
commit 2c2316f817
4 changed files with 120 additions and 26 deletions

View File

@ -1,7 +1,7 @@
//
// FILE: MAX31855.cpp
// AUTHOR: Rob Tillaart
// VERSION: 0.1.00
// VERSION: 0.1.01
// PURPOSE: MAX31855 - Thermocouple
// DATE: 2014-01-01
// URL:
@ -11,7 +11,7 @@
#include "MAX31855.h"
MAX31855::MAX31855(uint8_t sclk, uint8_t cs, uint8_t miso)
MAX31855::MAX31855(uint8_t sclk, uint8_t cs, uint8_t miso)
{
_sclk = sclk;
_cs = cs;
@ -30,57 +30,49 @@ void MAX31855::begin()
uint8_t MAX31855::read()
{
uint32_t value = _read();
// process status bit 0-2
_status = value & 0x0007;
value >>= 3;
// reserved bit 3
value >>= 1;
// process internal bit 4-15
_internal = (value & 0x07FF) * 0.0625;
if (value & 0x0800) _internal *= -1;
value >>= 12;
// Fault bit ignored as we have the 3 status bits
// _fault = value & 0x01;
value >>= 1;
// reserved bit 17
value >>= 1;
// process temperature bit 18-31
_temperature = (value & 0x1FFF) * 0.25;
if (value & 0x2000) _temperature *= -1;
return _status;
}
uint32_t MAX31855::_read(void)
uint32_t MAX31855::_read(void)
{
uint32_t value = 0;
digitalWrite(_sclk, LOW);
delayMicroseconds(1000);
digitalWrite(_cs, LOW);
delayMicroseconds(1000);
for (int8_t i=31; i>=0; i--)
for (int8_t i = 31; i >= 0; i--)
{
digitalWrite(_sclk, LOW);
delayMicroseconds(1000);
value <<= 1;
if (digitalRead(_miso) == HIGH) value += 1;
digitalWrite(_sclk, LOW);
if ( digitalRead(_miso) ) value += 1;
digitalWrite(_sclk, HIGH);
delayMicroseconds(1000);
}
digitalWrite(_cs, HIGH);
return value;
}

View File

@ -3,7 +3,7 @@
//
// FILE: MAX31855.h
// AUTHOR: Rob Tillaart
// VERSION: 0.1.00
// VERSION: 0.1.01
// PURPOSE: MAX31855 - Thermocouple
// DATE: 2014-01-01
// URL:
@ -17,14 +17,14 @@
#include "Arduino.h"
#endif
#define MAX31855_VERSION "0.1.00"
#define MAX31855_VERSION "0.1.01"
#define STATUS_OK 0x00
#define STATUS_OPEN_CIRCUIT 0x01
#define STATUS_SHORT_TO_GND 0x02
#define STATUS_SHORT_TO_VCC 0x04
class MAX31855
class MAX31855
{
public:
MAX31855(uint8_t SCLK, uint8_t CS, uint8_t MISO);
@ -40,10 +40,12 @@ private:
float _internal;
float _temperature;
uint8_t _status;
uint8_t _sclk;
uint8_t _miso;
uint8_t _cs;
};
#endif
#endif
// END OF FILE

View File

@ -0,0 +1,43 @@
//
// FILE: max31855_demo2.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.01
// PURPOSE: thermocouple lib demo application
// DATE: 2014-01-02
// URL:
//
// Released to the public domain
//
#include "MAX31855.h"
const int doPin = 7;
const int csPin = 6;
const int clPin = 5;
MAX31855 tc(clPin, csPin, doPin);
void setup()
{
Serial.begin(115200);
Serial.print("Start max31855_demo: ");
Serial.println(MAX31855_VERSION);
Serial.println();
tc.begin();
tc.read();
}
void loop()
{
float t1 = tc.getTemperature();
delay(1000);
tc.read();
float t2 = tc.getTemperature();
Serial.print("delta:\t");
Serial.println(t2-t1, 2);
delay(1000);
}

View File

@ -0,0 +1,57 @@
//
// FILE: max31855_demo2.ino
// AUTHOR: Rob Tillaart
// VERSION: 0.1.01
// PURPOSE: thermocouple lib demo application
// DATE: 2014-01-02
// URL:
//
// Released to the public domain
//
#include "MAX31855.h"
const int doPin = 7;
const int csPin = 6;
const int clPin = 5;
MAX31855 tc(clPin, csPin, doPin);
void setup()
{
Serial.begin(115200);
Serial.print("Start max31855_demo: ");
Serial.println(MAX31855_VERSION);
Serial.println();
tc.begin();
uint32_t start = micros();
tc.read();
uint32_t stop = micros();
Serial.print("read:\t");
Serial.println(stop - start);
start = micros();
float t1 = tc.getTemperature();
stop = micros();
Serial.print("getTemperature:\t");
Serial.println(stop - start);
start = micros();
tc.getInternal();
stop = micros();
Serial.print("getInternal:\t");
Serial.println(stop - start);
Serial.println(t1,2);
}
void loop()
{
}