Maxim Integrated MAX30205 C, C++ source code driver software: MAX30205 is accurate to +-0.1°C over the range of 37.0°C to 39.0°C. One-shot, shutdown modes are available for reduced power usage. Thermostat thresholds allow for temperature hysteresis or for alarm settings. The MAX30205 is available in a compact 3x3 mm, 8-pin TDFN package. Operating supply voltage range is 2.7V to 3.3V. Typical applications are for clinical digital thermometers, thermostats with hysteresis, and temperature alarms.
Dependents: MAX30205_Human_Body_Temperature_Sensor
Revision 1:d4271ef9f37f, committed 2017-04-06
- Comitter:
- j3
- Date:
- Thu Apr 06 00:05:03 2017 +0000
- Parent:
- 0:cdad7a9ef486
- Child:
- 2:a659724f496a
- Commit message:
- reworked a little more
Changed in this revision
| MAX30205.cpp | Show annotated file Show diff for this revision Revisions of this file |
| MAX30205.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/MAX30205.cpp Mon Apr 03 23:11:58 2017 +0000
+++ b/MAX30205.cpp Thu Apr 06 00:05:03 2017 +0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+ * Copyright (C) 2017 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"),
@@ -30,40 +30,115 @@
* ownership rights.
*******************************************************************************
*/
+
+
#include "MAX30205.h"
+
//******************************************************************************
-MAX30205::MAX30205(PinName sda, PinName scl, uint8_t slaveAddress):
-m_i2c(sda, scl), m_writeAddress(slaveAddress << 1), m_readAddress((slaveAddress << 1) | 1)
+MAX30205::MAX30205(PinName sda, PinName scl, uint8_t slaveAddress, PinName os):
+m_i2c(sda, scl), m_writeAddress(slaveAddress << 1),
+m_readAddress((slaveAddress << 1) | 1), m_os(os, PullUp)
{
}
+
//******************************************************************************
-MAX30205::MAX30205(I2C& i2c, uint8_t slaveAddress):
-m_i2c(i2c), m_writeAddress(slaveAddress << 1), m_readAddress((slaveAddress << 1) | 1)
+MAX30205::MAX30205(I2C &i2c, uint8_t slaveAddress, PinName os):
+m_i2c(i2c), m_writeAddress(slaveAddress << 1),
+m_readAddress((slaveAddress << 1) | 1), m_os(os, PullUp)
{
}
+
//******************************************************************************
MAX30205::~MAX30205(void)
{
//empty block
}
+
//******************************************************************************
-int32_t MAX30205::reg_write(Registers reg, uint8_t value)
+int32_t MAX30205::readTemperature(uint16_t &value)
+{
+ return readRegister(MAX30205::Temperature, value);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::readConfiguration(Config &config)
{
- int32_t result;
-
- char cmdData[2] = {reg, value};
-
- result = m_i2c.write(m_writeAddress, cmdData, 2);
-
- return result;
+ uint16_t data;
+
+ int32_t result = readRegister(MAX30205::Configuration, data);
+ if(result == 0)
+ {
+ config.all = (0x00FF & data);
+ }
+
+ return result;
+
+}
+
+
+//******************************************************************************
+int32_t MAX30205::writeConfiguration(const Config config)
+{
+ uint16_t local_config = (0x00FF & config.all);
+
+ return writeRegister(MAX30205::Configuration, local_config);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::readTHYST(uint16_t &value)
+{
+ return readRegister(MAX30205::THYST, value);
}
+
//******************************************************************************
-int32_t MAX30205::reg_write16(Registers reg, uint16_t value)
+int32_t MAX30205::writeTHYST(uint16_t value)
+{
+ return writeRegister(MAX30205::THYST, value);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::readTOS(uint16_t &value)
+{
+ return readRegister(MAX30205::TOS, value);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::writeTOS(const uint16_t value)
+{
+ return writeRegister(MAX30205::TOS, value);
+}
+
+
+//******************************************************************************
+float MAX30205::toCelsius(uint32_t rawTemp)
+{
+ float val1, val2;
+
+ val1 = static_cast<float>(rawTemp >> 8);
+ val2 = static_cast<float>(rawTemp & 0xFF);
+
+ return(val2 + (val1 / 256.0F));
+}
+
+
+//******************************************************************************
+float MAX30205::toFahrenheit(float temperatureC)
+{
+ return((temperatureC * 1.8F) + 32.0f);
+}
+
+
+//******************************************************************************
+int32_t MAX30205::writeRegister(Registers reg, uint16_t value)
{
int32_t result;
@@ -76,29 +151,9 @@
return result;
}
-//******************************************************************************
-int32_t MAX30205::reg_read(Registers reg, uint8_t& value)
-{
- int32_t result;
-
- char cmdData[1] = {reg};
- char readData;
-
- result = m_i2c.write(m_writeAddress, cmdData, 1);
- if(result == 0)
- {
- result = m_i2c.read(m_readAddress, &readData, 1);
- if(result == 0)
- {
- value = readData;
- }
- }
-
- return result;
-}
//******************************************************************************
-int32_t MAX30205::reg_read16(Registers reg, uint16_t& value)
+int32_t MAX30205::readRegister(Registers reg, uint16_t &value)
{
int32_t result;
@@ -117,40 +172,3 @@
return result;
}
-
-//******************************************************************************
-int32_t MAX30205::readTemperature(uint16_t& value)
-{
- int32_t result = reg_read16(MAX30205::Temperature, value);
-
- return result;
-}
-
-//******************************************************************************
-float MAX30205::toCelsius(uint32_t rawTemp)
-{
- float val1, val2;
-
- val1 = static_cast<float>(rawTemp >> 8);
- val2 = static_cast<float>(rawTemp & 0xFF);
-
- return(val2 + (val1 / 256.0F));
-}
-
-//******************************************************************************
-float MAX30205::toFahrenheit(float temperatureC)
-{
- return((temperatureC * 1.8F) + 32.0f);
-}
-
-//******************************************************************************
-int32_t MAX30205::reg_THYST_Read(uint16_t& value)
-{
- return reg_read16(MAX30205::THYST, value);
-}
-
-//******************************************************************************
-int32_t MAX30205::reg_THYST_Write(uint16_t value)
-{
- return reg_write16(MAX30205::THYST, value);
-}
--- a/MAX30205.h Mon Apr 03 23:11:58 2017 +0000
+++ b/MAX30205.h Thu Apr 06 00:05:03 2017 +0000
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
+ * Copyright (C) 2017 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"),
@@ -64,6 +64,22 @@
THYST = 0x02,
TOS = 0x03
};
+
+ ///MAX30205 Configuration register bitfields
+ union Config
+ {
+ uint8_t all;
+ struct BitField
+ {
+ uint8_t shutdown : 1;
+ uint8_t comp_int : 1;
+ uint8_t os_polarity : 1;
+ uint8_t fault_queue : 2;
+ uint8_t data_format : 1;
+ uint8_t timeout : 1;
+ uint8_t one_shot : 1;
+ }bits;
+ };
/**
* @brief Constructor using I2C PinNames
@@ -71,69 +87,66 @@
* @param scl - Pinname for scl
* @param slaveAddress - 7-bit I2C address
*/
- MAX30205(PinName sda, PinName scl, uint8_t slaveAddress);
+ MAX30205(PinName sda, PinName scl, uint8_t slaveAddress, PinName os = NC);
/**
* @brief Constructor using reference to I2C object
* @param i2c - Reference to I2C object
* @param slaveAddress - 7-bit I2C address
*/
- MAX30205(I2C& i2c, uint8_t slaveAddress);
+ MAX30205(I2C &i2c, uint8_t slaveAddress, PinName os = NC);
/** @brief Destructor */
~MAX30205(void);
- /** @brief Write register of device at slave address
- * @param reg - Register address
- * @param value - Value to write
- * @return 0 on success, non-zero on failure
- */
- int32_t reg_write(Registers reg, uint8_t value);
-
- /**
- * @brief Read register of device at slave address
- * @param reg - Register address
- * @param[out] value - Read data on success
- * @return 0 on success, non-zero on failure
- */
- int32_t reg_read(Registers reg, uint8_t& value);
-
- /**
- * @brief Write a 16-bit value into device at slave address
- * @param reg - Register address
- * @param value - 16-bit value to write
- * @return 0 on success, non-zero on failure
- */
- int32_t reg_write16(Registers reg, uint16_t value);
-
- /**
- * @brief Read a 16-bit value from a device at a slave address
- * @param reg - Register address
- * @param[out] value - Read data on success
- * @return 0 on success, non-zero on failure
- */
- int32_t reg_read16(Registers reg, uint16_t& value);
-
/**
* @brief Read the temperature from the device into a 16 bit value
* @param[out] value - Raw temperature data on success
* @return 0 on success, non-zero on failure
*/
- int32_t readTemperature(uint16_t& value);
+ int32_t readTemperature(uint16_t &value);
+
+ /**
+ * @brief Read the configuration register
+ * @param config - Reference to Configuration type
+ * @return 0 on success, non-zero on failure
+ */
+ int32_t readConfiguration(Config &config);
+
+ /**
+ * @brief Write the configuration register with given configuration
+ * @param config - Configuration to write
+ * @return 0 on success, non-zero on failure
+ */
+ int32_t writeConfiguration(const Config config);
/**
* @brief Read the THYST value from a specified device instance
* @param[out] value - THYST register value on success
* @return 0 on success, non-zero on failure
*/
- int32_t reg_THYST_Read(uint16_t& value);
+ int32_t readTHYST(uint16_t &value);
/**
* @brief Write the THYST to a device instance
* @param value - 16-bit value to write
* @return 0 on success, non-zero on failure
*/
- int32_t reg_THYST_Write(uint16_t value);
+ int32_t writeTHYST(const uint16_t value);
+
+ /**
+ * @brief Read the TOS value from device
+ * @param[out] value - TOS register value on success
+ * @return 0 on success, non-zero on failure
+ */
+ int32_t readTOS(uint16_t &value);
+
+ /**
+ * @brief Write the TOS register
+ * @param value - 16-bit value to write
+ * @return 0 on success, non-zero on failure
+ */
+ int32_t writeTOS(const uint16_t value);
/**
* @brief Convert a raw temperature value into a float
@@ -148,12 +161,32 @@
* @returns Returns the converted Fahrenheit value
*/
float toFahrenheit(float temperatureC);
+
+protected:
+
+ /**
+ * @brief Write register of device at slave address
+ * @param reg - Register address
+ * @param value - Value to write
+ * @return 0 on success, non-zero on failure
+ */
+ int32_t writeRegister(Registers reg, uint16_t value);
+
+ /**
+ * @brief Read register of device at slave address
+ * @param reg - Register address
+ * @param[out] value - Read data on success
+ * @return 0 on success, non-zero on failure
+ */
+ int32_t readRegister(Registers reg, uint16_t &value);
private:
/// I2C object
I2C m_i2c;
/// Device slave address
uint8_t m_writeAddress, m_readAddress;
+ /// Over temperature shutdown interrupt pin
+ DigitalIn m_os;
};
#endif /* __MAX30205_H_ */