mirror of
https://github.com/RobTillaart/Arduino.git
synced 2024-09-19 16:46:11 -04:00
+ 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:
parent
d59d553eb2
commit
2c2316f817
@ -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;
|
||||
}
|
||||
|
||||
|
@ -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
|
@ -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);
|
||||
}
|
||||
|
||||
|
||||
|
@ -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()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user