diff --git a/Adafruit_MAX31865.cpp b/Adafruit_MAX31865.cpp index eb9789a..c5690b1 100644 --- a/Adafruit_MAX31865.cpp +++ b/Adafruit_MAX31865.cpp @@ -21,12 +21,8 @@ #include #endif -#include #include -static SPISettings max31865_spisettings = - SPISettings(500000, MSBFIRST, SPI_MODE1); - /**************************************************************************/ /*! @brief Create the interface object using software (bitbang) SPI @@ -39,10 +35,7 @@ static SPISettings max31865_spisettings = // Adafruit_MAX31865::Adafruit_MAX31865(int8_t spi_cs, int8_t spi_mosi, int8_t spi_miso, int8_t spi_clk) { - _sclk = spi_clk; - _cs = spi_cs; - _miso = spi_miso; - _mosi = spi_mosi; + spi_dev = Adafruit_SPIDevice(spi_cs, spi_clk, spi_miso, spi_mosi, 1000000); } /**************************************************************************/ @@ -52,8 +45,8 @@ Adafruit_MAX31865::Adafruit_MAX31865(int8_t spi_cs, int8_t spi_mosi, */ /**************************************************************************/ Adafruit_MAX31865::Adafruit_MAX31865(int8_t spi_cs) { - _cs = spi_cs; - _sclk = _miso = _mosi = -1; + spi_dev = + Adafruit_SPIDevice(spi_cs, 1000000, SPI_BITORDER_MSBFIRST, SPI_MODE1); } /**************************************************************************/ @@ -65,23 +58,7 @@ Adafruit_MAX31865::Adafruit_MAX31865(int8_t spi_cs) { */ /**************************************************************************/ bool Adafruit_MAX31865::begin(max31865_numwires_t wires) { - pinMode(_cs, OUTPUT); - digitalWrite(_cs, HIGH); - - if (_sclk != -1) { - // define pin modes - pinMode(_sclk, OUTPUT); - digitalWrite(_sclk, LOW); - pinMode(_mosi, OUTPUT); - pinMode(_miso, INPUT); - } else { - // start and configure hardware SPI - SPI.begin(); - } - - for (uint8_t i = 0; i < 16; i++) { - // readRegister8(i); - } + spi_dev.begin(); setWires(wires); readFault(true); // perform a selftest @@ -176,6 +153,23 @@ void Adafruit_MAX31865::autoConvert(bool b) { writeRegister8(MAX31865_CONFIG_REG, t); } +/**************************************************************************/ +/*! + @brief Whether we want filter out 50Hz noise or 60Hz noise + @param b If true, 50Hz noise is filtered, else 60Hz(default) +*/ +/**************************************************************************/ + +void Adafruit_MAX31865::enable50Hz(bool b) { + uint8_t t = readRegister8(MAX31856_CONFIG_REG); + if (b) { + t |= MAX31856_CONFIG_FILT50HZ; + } else { + t &= ~MAX31856_CONFIG_FILT50HZ; + } + writeRegister8(MAX31856_CONFIG_REG, t); +} + /**************************************************************************/ /*! @brief How many wires we have in our RTD setup, can be MAX31865_2WIRE, @@ -295,65 +289,12 @@ void Adafruit_MAX31865::readRegisterN(uint8_t addr, uint8_t buffer[], uint8_t n) { addr &= 0x7F; // make sure top bit is not set - if (_sclk == -1) - SPI.beginTransaction(max31865_spisettings); - else - digitalWrite(_sclk, LOW); - - digitalWrite(_cs, LOW); - - spixfer(addr); - - // Serial.print("$"); Serial.print(addr, HEX); Serial.print(": "); - while (n--) { - buffer[0] = spixfer(0xFF); - // Serial.print(" 0x"); Serial.print(buffer[0], HEX); - buffer++; - } - // Serial.println(); - - if (_sclk == -1) - SPI.endTransaction(); - - digitalWrite(_cs, HIGH); + spi_dev.write_then_read(&addr, 1, buffer, n); } void Adafruit_MAX31865::writeRegister8(uint8_t addr, uint8_t data) { - if (_sclk == -1) - SPI.beginTransaction(max31865_spisettings); - else - digitalWrite(_sclk, LOW); - - digitalWrite(_cs, LOW); - - spixfer(addr | 0x80); // make sure top bit is set - spixfer(data); - - // Serial.print("$"); Serial.print(addr, HEX); Serial.print(" = 0x"); - // Serial.println(data, HEX); - - if (_sclk == -1) - SPI.endTransaction(); - - digitalWrite(_cs, HIGH); -} - -uint8_t Adafruit_MAX31865::spixfer(uint8_t x) { - if (_sclk == -1) - return SPI.transfer(x); - - // software spi - // Serial.println("Software SPI"); - uint8_t reply = 0; - - for (int i = 7; i >= 0; i--) { - reply <<= 1; - digitalWrite(_sclk, HIGH); - digitalWrite(_mosi, x & (1 << i)); - digitalWrite(_sclk, LOW); - if (digitalRead(_miso)) - reply |= 1; - } + addr |= 0x80; // make sure top bit is set - return reply; + uint8_t buffer[2] = {addr, data}; + spi_dev.write(buffer, 2); } diff --git a/Adafruit_MAX31865.h b/Adafruit_MAX31865.h index 2ee8a66..bcf5ee6 100644 --- a/Adafruit_MAX31865.h +++ b/Adafruit_MAX31865.h @@ -53,6 +53,8 @@ #include "WProgram.h" #endif +#include + typedef enum max31865_numwires { MAX31865_2WIRE = 0, MAX31865_3WIRE = 1, @@ -76,21 +78,22 @@ class Adafruit_MAX31865 { void setWires(max31865_numwires_t wires); void autoConvert(bool b); + void enable50Hz(bool b); void enableBias(bool b); float temperature(float RTDnominal, float refResistor); private: - int8_t _sclk, _miso, _mosi, _cs; + Adafruit_SPIDevice spi_dev = NULL; bool _fault; + 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 diff --git a/README.md b/README.md index 8ac296e..d692db4 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ -# Adafruit MAX31865 ![Build Status](https://github.com/adafruit/Adafruit_MAX31865/workflows/Arduino%20Library%20CI/badge.svg) +# Adafruit MAX31865 [![Build Status](https://github.com/adafruit/Adafruit_MAX31865/workflows/Arduino%20Library%20CI/badge.svg)](https://github.com/adafruit/Adafruit_MAX31865/actions) -This is the Adafruit MAX31856 Arduino Library +This is the Adafruit MAX31865 Arduino Library -Tested and works great with the Adafruit Thermocouple Breakout w/MAX31856 +Tested and works great with the Adafruit Thermocouple Breakout w/MAX31865 * http://www.adafruit.com/products/3328 These sensors use SPI to communicate, 4 pins are required to diff --git a/library.properties b/library.properties index cb6e0b1..8420ebf 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Adafruit MAX31865 library -version=1.0.3 +version=1.2.2 author=Adafruit maintainer=Adafruit sentence=Library for the Adafruit RTD Amplifier breakout with MAX31865 @@ -7,3 +7,4 @@ paragraph=Library for the Adafruit RTD Amplifier breakout with MAX31865 category=Sensors url=https://github.com/adafruit/Adafruit_MAX31865 architectures=* +depends=Adafruit BusIO