Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: MAX31723_Thermostat_Thermometer_Sensor
Diff: max31723.cpp
- Revision:
- 6:2e49aa7fa091
- Parent:
- 5:8e70ec0923e2
- Child:
- 8:e310e55a687b
diff -r 8e70ec0923e2 -r 2e49aa7fa091 max31723.cpp
--- a/max31723.cpp Wed Jan 30 02:13:51 2019 +0000
+++ b/max31723.cpp Tue Feb 12 22:57:17 2019 +0000
@@ -31,7 +31,7 @@
*******************************************************************************
*/
#include "max31723.h"
-
+#include "USBSerial.h"
union max31723_raw_data {
struct {
uint8_t lsb;
@@ -46,6 +46,59 @@
m_chip_enable = 0;
}
+
+int MAX31723::read_reg(uint8_t &val, uint8_t reg)
+{
+ if (reg <= MAX31723_REG_MAX) {
+ m_chip_enable = 1;
+ m_spi.write(reg);
+ val = m_spi.write(0);
+ m_chip_enable = 0;
+ return MAX31723_NO_ERROR;
+ } else {
+ printf("Input read_reg is invalid, 0x%02X \r\n", reg);
+ return MAX31723_ERROR;
+ }
+}
+
+uint8_t MAX31723::read_cfg()
+{
+ uint8_t cfg;
+ read_reg(cfg, MAX31723_REG_CFG);
+ return cfg;
+}
+
+float MAX31723::read_reg_as_temperature(uint8_t reg)
+{
+ max31723_raw_data raw;
+ float temperature;
+ if (reg >= MAX31723_REG_TEMP_LSB && reg <= MAX31723_REG_MAX) {
+ read_reg(raw.lsb, reg);
+ read_reg(raw.msb, reg+1);
+ temperature = raw.swrd * MAX31723_CF_LSB;
+ return temperature;
+ } else {
+ printf("Input read_registers_as_temperature is invalid, %d r\n",
+ reg);
+ return 0;
+ }
+}
+
+float MAX31723::read_temperature(void)
+{
+ return read_reg_as_temperature(MAX31723_REG_TEMP_LSB);
+}
+
+float MAX31723::read_trip_low(void)
+{
+ return read_reg_as_temperature(MAX31723_REG_TRIP_LO_LSB);
+}
+
+float MAX31723::read_trip_high(void)
+{
+ return read_reg_as_temperature(MAX31723_REG_TRIP_HI_LSB);
+}
+
int MAX31723::write_reg(uint8_t val, uint8_t reg)
{
if (reg == (MAX31723_REG_CFG | MAX31723_WRITE_MASK) ||
@@ -62,20 +115,43 @@
}
}
-int MAX31723::read_reg(uint8_t &val, uint8_t reg)
+int MAX31723::write_cfg(uint8_t val)
{
- if (reg <= MAX31723_REG_MAX) {
m_chip_enable = 1;
- m_spi.write(reg);
- val = m_spi.write(0);
+ m_spi.write(MAX31723_REG_CFG );
+ m_spi.write(val);
m_chip_enable = 0;
return MAX31723_NO_ERROR;
- } else {
- printf("Input read_reg is invalid, 0x%02X \r\n", reg);
- return MAX31723_ERROR;
- }
+}
+
+
+int MAX31723::write_trip_low(float temperature)
+{
+ int ret;
+ max31723_raw_data raw;
+ temperature /= MAX31723_CF_LSB;
+ raw.swrd = int16_t(temperature);
+ ret = write_reg(raw.lsb, MAX31723_WRITE_MASK | MAX31723_REG_TRIP_LO_LSB);
+ wait(.015);
+ ret = write_reg(raw.msb, MAX31723_WRITE_MASK | MAX31723_REG_TRIP_LO_MSB);
+ wait(.015);
+ return ret;
}
+int MAX31723::write_trip_high(float temperature)
+{
+ int ret;
+ max31723_raw_data raw;
+ temperature /= MAX31723_CF_LSB;
+ raw.swrd = int16_t(temperature);
+ ret = write_reg(raw.lsb, MAX31723_WRITE_MASK | MAX31723_REG_TRIP_HI_LSB);
+ wait(.015);
+ ret = write_reg(raw.msb, MAX31723_WRITE_MASK | MAX31723_REG_TRIP_HI_MSB);
+ wait(.015);
+ return ret;
+}
+
+
int MAX31723::perform_one_shot(uint8_t resolution, uint8_t interrupt_mode)
{
if (resolution <= MAX31723_CFG_RESOLUTION_12BIT) {
@@ -102,29 +178,6 @@
return ret;
}
-uint8_t MAX31723::read_cfg()
-{
- uint8_t cfg;
- read_reg(cfg, MAX31723_REG_CFG);
- return cfg;
-}
-
-float MAX31723::read_reg_as_temperature(uint8_t reg)
-{
- max31723_raw_data raw;
- float temperature;
- if (reg >= MAX31723_REG_TEMP_LSB && reg <= MAX31723_REG_MAX) {
- read_reg(raw.lsb, reg);
- read_reg(raw.msb, reg+1);
- raw.swrd = raw.swrd >> MAX31723_UNUSED_BITS;
- temperature = raw.swrd * MAX31723_CF_LSB;
- return temperature;
- } else {
- printf("Input read_registers_as_temperature is invalid, %d r\n",
- reg);
- return 0;
- }
-}
float MAX31723::celsius_to_fahrenheit(float temp_c)
{