C++ driver software code for Maxim Integrated MAX31723/MAX31722 device temperature sensor. The MAX31723 provides 9 to 12 bits of resolution.
Dependents: MAX31723_Thermostat_Thermometer_Sensor
Diff: max31723.cpp
- Revision:
- 0:4a3d6ac5042d
- Child:
- 1:bb6f11be119f
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/max31723.cpp Sat Jan 26 23:55:38 2019 +0000 @@ -0,0 +1,97 @@ +/******************************************************************************* +* Copyright (C) 2019 Maxim Integrated Products, Inc., All Rights Reserved. +* +* Permission is hereby granted, free of charge, to any person obtaining a +* copy of this software and associated documentation files (the "Software"), +* to deal in the Software without restriction, including without limitation +* the rights to use, copy, modify, merge, publish, distribute, sublicense, +* and/or sell copies of the Software, and to permit persons to whom the +* Software is furnished to do so, subject to the following conditions: +* +* The above copyright notice and this permission notice shall be included +* in all copies or substantial portions of the Software. +* +* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +* OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +* IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES +* OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +* OTHER DEALINGS IN THE SOFTWARE. +* +* Except as contained in this notice, the name of Maxim Integrated +* Products, Inc. shall not be used except as stated in the Maxim Integrated +* Products, Inc. Branding Policy. +* +* The mere transfer of this software does not imply any licenses +* of trade secrets, proprietary technology, copyrights, patents, +* trademarks, maskwork rights, or any other form of intellectual +* property whatsoever. Maxim Integrated Products, Inc. retains all +* ownership rights. +******************************************************************************* +*/ +#include "max31723.h" + +MAX31723::MAX31723(SPI &spi, DigitalOut &ce_pin) : m_spi(spi), m_chip_enable(ce_pin) +{ + m_chip_enable = 0; +} + +int MAX31723::write_reg(uint8_t val, uint8_t reg) +{ + + m_chip_enable = 1; + m_spi.write(reg); + m_spi.write(val); + m_chip_enable = 0; + return MAX31723_NO_ERROR; +} + +int MAX31723::read_reg(uint8_t &val, uint8_t reg) +{ + + m_chip_enable = 1; + m_spi.write(reg); + val = m_spi.write(0); + m_chip_enable = 0; + return MAX31723_NO_ERROR; +} + +int MAX31723::perform_one_shot(uint8_t resolution) +{ + if (resolution <= MAX31723_CFG_RESOLUTION_12BIT) + write_reg(resolution | MAX31723_CFG_1SHOT | MAX31723_CFG_STANDBY, + MAX31723_REG_CFG | MAX31723_WRITE_MASK); + else + return MAX31723_ERROR; + return MAX31723_NO_ERROR; +} + +float MAX31723::read_temp() +{ + uint8_t lsb, msb; + uint16_t raw_temp; + float temperature; + + read_reg(lsb, MAX31723_REG_TEMP_LSB); + read_reg(msb, MAX31723_REG_TEMP_MSB); + + raw_temp = int16_t((msb << 8) | (lsb)); + raw_temp = raw_temp >> 4; + temperature = raw_temp * 0.0625 ; + return temperature; +} + + +float MAX31723::celsius_to_fahrenheit(float temp_c) +{ + float temp_f; + temp_f = ((temp_c * 9)/5) + 32; + return temp_f; +} + +MAX31723::~MAX31723(void) +{ + //empty block +} +