mirror of https://github.com/arendst/Tasmota.git
100 lines
2.9 KiB
C++
100 lines
2.9 KiB
C++
/***************************************************
|
|
This is a library for the Adafruit PT100/P1000 RTD Sensor w/MAX31865
|
|
|
|
Designed specifically to work with the Adafruit RTD Sensor
|
|
----> https://www.adafruit.com/products/3328
|
|
|
|
This sensor uses SPI to communicate, 4 pins are required to
|
|
interface
|
|
Adafruit invests time and resources providing this open source code,
|
|
please support Adafruit and open-source hardware by purchasing
|
|
products from Adafruit!
|
|
|
|
Written by Limor Fried/Ladyada for Adafruit Industries.
|
|
BSD license, all text above must be included in any redistribution
|
|
****************************************************/
|
|
|
|
#ifndef ADAFRUIT_MAX31865_H
|
|
#define ADAFRUIT_MAX31865_H
|
|
|
|
#define MAX31856_CONFIG_REG 0x00
|
|
#define MAX31856_CONFIG_BIAS 0x80
|
|
#define MAX31856_CONFIG_MODEAUTO 0x40
|
|
#define MAX31856_CONFIG_MODEOFF 0x00
|
|
#define MAX31856_CONFIG_1SHOT 0x20
|
|
#define MAX31856_CONFIG_3WIRE 0x10
|
|
#define MAX31856_CONFIG_24WIRE 0x00
|
|
#define MAX31856_CONFIG_FAULTSTAT 0x02
|
|
#define MAX31856_CONFIG_FILT50HZ 0x01
|
|
#define MAX31856_CONFIG_FILT60HZ 0x00
|
|
|
|
#define MAX31856_RTDMSB_REG 0x01
|
|
#define MAX31856_RTDLSB_REG 0x02
|
|
#define MAX31856_HFAULTMSB_REG 0x03
|
|
#define MAX31856_HFAULTLSB_REG 0x04
|
|
#define MAX31856_LFAULTMSB_REG 0x05
|
|
#define MAX31856_LFAULTLSB_REG 0x06
|
|
#define MAX31856_FAULTSTAT_REG 0x07
|
|
|
|
|
|
#define MAX31865_FAULT_HIGHTHRESH 0x80
|
|
#define MAX31865_FAULT_LOWTHRESH 0x40
|
|
#define MAX31865_FAULT_REFINLOW 0x20
|
|
#define MAX31865_FAULT_REFINHIGH 0x10
|
|
#define MAX31865_FAULT_RTDINLOW 0x08
|
|
#define MAX31865_FAULT_OVUV 0x04
|
|
|
|
|
|
#define RTD_A 3.9083e-3
|
|
#define RTD_B -5.775e-7
|
|
|
|
#if (ARDUINO >= 100)
|
|
#include "Arduino.h"
|
|
#else
|
|
#include "WProgram.h"
|
|
#endif
|
|
|
|
typedef enum max31865_numwires {
|
|
MAX31865_2WIRE = 0,
|
|
MAX31865_3WIRE = 1,
|
|
MAX31865_4WIRE = 0
|
|
} max31865_numwires_t;
|
|
|
|
|
|
class Adafruit_MAX31865 {
|
|
public:
|
|
Adafruit_MAX31865(int8_t spi_cs, int8_t spi_mosi, int8_t spi_miso, int8_t spi_clk);
|
|
Adafruit_MAX31865(int8_t spi_cs);
|
|
Adafruit_MAX31865(void);
|
|
|
|
void setPins(int8_t spi_cs, int8_t spi_mosi, int8_t spi_miso, int8_t spi_clk);
|
|
boolean begin(max31865_numwires_t x = MAX31865_2WIRE);
|
|
|
|
uint8_t readFault(void);
|
|
void clearFault(void);
|
|
uint16_t readRTD();
|
|
|
|
|
|
void setWires(max31865_numwires_t wires);
|
|
void autoConvert(boolean b);
|
|
void enableBias(boolean b);
|
|
|
|
float temperature(float RTDnominal, float refResistor);
|
|
float rtd_to_temperature(uint16_t rtd, float RTDnominal, float refResistor);
|
|
float rtd_to_resistance(uint16_t rtd, float refResistor);
|
|
|
|
private:
|
|
int8_t _sclk, _miso, _mosi, _cs;
|
|
|
|
void readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n);
|
|
|
|
uint8_t readRegister8(uint8_t addr);
|
|
uint16_t readRegister16(uint8_t addr);
|
|
|
|
void writeRegister8(uint8_t addr, uint8_t reg);
|
|
uint8_t spixfer(uint8_t addr);
|
|
};
|
|
|
|
|
|
#endif
|