Sample host software for the Maxim Integrated MAX31875 Low Power Small Package Temperature Sensor. Hosted on the MAX32630FTHR. The MAX31875 may be used in wearables, thermostats, thermometers, and hardware temperature supervisors.

Dependencies:   MAX31875_Temperature_Sensor_Low_Power max32630fthr USBDevice

Committer:
phonemacro
Date:
Thu Feb 14 09:13:10 2019 +0000
Revision:
3:587c7c740902
Parent:
2:32c0d11d8c0d
Use latest max31875 library.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
phonemacro 0:77036686489d 1 /*******************************************************************************
phonemacro 0:77036686489d 2 * Copyright (C) 2019 Maxim Integrated Products, Inc., All Rights Reserved.
phonemacro 0:77036686489d 3 *
phonemacro 0:77036686489d 4 * Permission is hereby granted, free of charge, to any person obtaining a
phonemacro 0:77036686489d 5 * copy of this software and associated documentation files (the "Software"),
phonemacro 0:77036686489d 6 * to deal in the Software without restriction, including without limitation
phonemacro 0:77036686489d 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
phonemacro 0:77036686489d 8 * and/or sell copies of the Software, and to permit persons to whom the
phonemacro 0:77036686489d 9 * Software is furnished to do so, subject to the following conditions:
phonemacro 0:77036686489d 10 *
phonemacro 0:77036686489d 11 * The above copyright notice and this permission notice shall be included
phonemacro 0:77036686489d 12 * in all copies or substantial portions of the Software.
phonemacro 0:77036686489d 13 *
phonemacro 0:77036686489d 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
phonemacro 0:77036686489d 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
phonemacro 0:77036686489d 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
phonemacro 0:77036686489d 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
phonemacro 0:77036686489d 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
phonemacro 0:77036686489d 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
phonemacro 0:77036686489d 20 * OTHER DEALINGS IN THE SOFTWARE.
phonemacro 0:77036686489d 21 *
phonemacro 0:77036686489d 22 * Except as contained in this notice, the name of Maxim Integrated
phonemacro 0:77036686489d 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
phonemacro 0:77036686489d 24 * Products, Inc. Branding Policy.
phonemacro 0:77036686489d 25 *
phonemacro 0:77036686489d 26 * The mere transfer of this software does not imply any licenses
phonemacro 0:77036686489d 27 * of trade secrets, proprietary technology, copyrights, patents,
phonemacro 0:77036686489d 28 * trademarks, maskwork rights, or any other form of intellectual
phonemacro 0:77036686489d 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
phonemacro 0:77036686489d 30 * ownership rights.
phonemacro 0:77036686489d 31 *******************************************************************************
phonemacro 0:77036686489d 32 */
phonemacro 0:77036686489d 33 #include "mbed.h"
phonemacro 0:77036686489d 34 #include "max32630fthr.h"
phonemacro 0:77036686489d 35 #include "max31875.h"
phonemacro 1:c5ac6967b6bf 36 #include "max31875_cpp.h"
phonemacro 0:77036686489d 37 #include "USBSerial.h"
phonemacro 0:77036686489d 38
phonemacro 0:77036686489d 39 MAX32630FTHR pegasus(MAX32630FTHR::VIO_1V8);
phonemacro 0:77036686489d 40
phonemacro 0:77036686489d 41 DigitalOut rLED(LED1);
phonemacro 0:77036686489d 42 DigitalOut gLED(LED2);
phonemacro 0:77036686489d 43 DigitalOut bLED(LED3);
phonemacro 0:77036686489d 44
phonemacro 0:77036686489d 45 I2C i2cBus(P3_4, P3_5);
phonemacro 0:77036686489d 46
phonemacro 0:77036686489d 47 // main() runs in its own thread in the OS
phonemacro 0:77036686489d 48 // (note the calls to Thread::wait below for delays)
phonemacro 0:77036686489d 49 /**
phonemacro 0:77036686489d 50 * @brief Sample main program for MAX31875
phonemacro 3:587c7c740902 51 * @version 1.0000.0003
phonemacro 0:77036686489d 52 *
phonemacro 0:77036686489d 53 * @details Sample main program for MAX31875
phonemacro 0:77036686489d 54 * The prints are sent to the terminal window (9600, 8n1).
phonemacro 0:77036686489d 55 * The program sets the GPIOs to 1.8V and the program
phonemacro 0:77036686489d 56 * configures the chip and reads temperatures.
phonemacro 0:77036686489d 57 * To run the program, drag and drop the .bin file into the
phonemacro 0:77036686489d 58 * DAPLINK folder. After it finishes flashing, cycle the power or
phonemacro 0:77036686489d 59 * reset the Pegasus (MAX32630FTHR) after flashing by pressing the button on
phonemacro 0:77036686489d 60 * the Pegasus next to the battery connector or the button
phonemacro 0:77036686489d 61 * on the MAXREFDES100HDK.
phonemacro 0:77036686489d 62 */
phonemacro 0:77036686489d 63 int main()
phonemacro 0:77036686489d 64 {
phonemacro 0:77036686489d 65 uint32_t i;
phonemacro 0:77036686489d 66 float temperature;
phonemacro 0:77036686489d 67 uint16_t cfg;
phonemacro 0:77036686489d 68 DigitalOut rLED(LED1, LED_OFF);
phonemacro 0:77036686489d 69 DigitalOut gLED(LED2, LED_OFF);
phonemacro 0:77036686489d 70 DigitalOut bLED(LED3, LED_OFF);
phonemacro 0:77036686489d 71 gLED = LED_ON;
phonemacro 0:77036686489d 72 printf("MAX31875 Small Package Temperature Sensor example source code.\r\n");
phonemacro 0:77036686489d 73 printf("\r\n");
phonemacro 0:77036686489d 74
phonemacro 0:77036686489d 75 MAX31875 temp_sensor(i2cBus, MAX31875_I2C_SLAVE_ADR_R0);
phonemacro 0:77036686489d 76 i2cBus.frequency(1000000);
phonemacro 0:77036686489d 77
phonemacro 0:77036686489d 78 /* Configure for fault filter 1, comparator, continuous,
phonemacro 0:77036686489d 79 * normal format, 8 sps, 12 bit resolution
phonemacro 0:77036686489d 80 */
phonemacro 0:77036686489d 81 temp_sensor.write_cfg(uint16_t(MAX31875_CFG_FAULT_FILTER_1 |
phonemacro 0:77036686489d 82 MAX31875_CFG_COMPARATOR_MODE | MAX31875_CFG_CONTINUOUS |
phonemacro 0:77036686489d 83 MAX31875_CFG_NORMAL_FORMAT | MAX31875_CFG_CONV_RATE_8 |
phonemacro 0:77036686489d 84 MAX31875_CFG_RESOLUTION_12BIT));
phonemacro 2:32c0d11d8c0d 85
phonemacro 0:77036686489d 86 for (i = 0; i < 10; i++) {
phonemacro 0:77036686489d 87 wait(MAX31875_WAIT_CONV_RATE_8);
phonemacro 0:77036686489d 88 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_TEMPERATURE);
phonemacro 0:77036686489d 89 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:77036686489d 90 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:77036686489d 91 }
phonemacro 0:77036686489d 92 temp_sensor.read_reg(&cfg, MAX31875_REG_CONFIGURATION);
phonemacro 0:77036686489d 93 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 2:32c0d11d8c0d 94 #if 0
phonemacro 2:32c0d11d8c0d 95 temp_sensor.write_trip_low(-63.9375);
phonemacro 2:32c0d11d8c0d 96 wait(0.03);
phonemacro 2:32c0d11d8c0d 97 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_THYST_LOW_TRIP);
phonemacro 2:32c0d11d8c0d 98 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 2:32c0d11d8c0d 99 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 2:32c0d11d8c0d 100
phonemacro 2:32c0d11d8c0d 101 temp_sensor.write_trip_high(64.0625f);
phonemacro 2:32c0d11d8c0d 102 wait(0.03);
phonemacro 2:32c0d11d8c0d 103 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_TOS_HIGH_TRIP);
phonemacro 2:32c0d11d8c0d 104 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 2:32c0d11d8c0d 105 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 2:32c0d11d8c0d 106 printf("\r\n\r\n");
phonemacro 2:32c0d11d8c0d 107 #endif
phonemacro 0:77036686489d 108
phonemacro 0:77036686489d 109 printf("\r\n");
phonemacro 0:77036686489d 110
phonemacro 0:77036686489d 111 /* Configure for fault filter 4, interrupt, shutdown,
phonemacro 0:77036686489d 112 * extended format, 0.25 sps, 10 bit resolution, start one-shot
phonemacro 0:77036686489d 113 */
phonemacro 2:32c0d11d8c0d 114 for (i = 0; i < 2; i++) {
phonemacro 0:77036686489d 115 temp_sensor.write_cfg(uint16_t(MAX31875_CFG_FAULT_FILTER_4 |
phonemacro 0:77036686489d 116 MAX31875_CFG_INTERRUPT_MODE | MAX31875_CFG_SHUTDOWN |
phonemacro 0:77036686489d 117 MAX31875_CFG_EXTENDED_FORMAT| MAX31875_CFG_CONV_RATE_0_25 |
phonemacro 0:77036686489d 118 MAX31875_CFG_RESOLUTION_10BIT | MAX31875_CFG_ONE_SHOT_START));
phonemacro 0:77036686489d 119 wait(MAX31875_WAIT_CONV_RATE_0_25);
phonemacro 0:77036686489d 120 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_TEMPERATURE);
phonemacro 0:77036686489d 121 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:77036686489d 122 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:77036686489d 123 }
phonemacro 0:77036686489d 124 temp_sensor.read_reg(&cfg, MAX31875_REG_CONFIGURATION);
phonemacro 0:77036686489d 125 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 0:77036686489d 126
phonemacro 0:77036686489d 127 printf("\r\n\r\n");
phonemacro 2:32c0d11d8c0d 128
phonemacro 0:77036686489d 129 #if 0
phonemacro 2:32c0d11d8c0d 130 temp_sensor.write_trip_low(-127.9375);
phonemacro 2:32c0d11d8c0d 131 wait(0.03);
phonemacro 0:77036686489d 132 temp_sensor.read_reg(&cfg, MAX31875_REG_CONFIGURATION);
phonemacro 2:32c0d11d8c0d 133 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_THYST_LOW_TRIP);
phonemacro 0:77036686489d 134 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:77036686489d 135 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:77036686489d 136
phonemacro 0:77036686489d 137 temp_sensor.write_trip_high(129.0625f);
phonemacro 2:32c0d11d8c0d 138 wait(0.03);
phonemacro 2:32c0d11d8c0d 139 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_TOS_HIGH_TRIP);
phonemacro 0:77036686489d 140 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:77036686489d 141 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:77036686489d 142 printf("\r\n\r\n");
phonemacro 0:77036686489d 143 #endif
phonemacro 1:c5ac6967b6bf 144
phonemacro 1:c5ac6967b6bf 145 /***************************************************************************
phonemacro 1:c5ac6967b6bf 146 * Call the C code version of the driver
phonemacro 1:c5ac6967b6bf 147 ***************************************************************************
phonemacro 1:c5ac6967b6bf 148 */
phonemacro 1:c5ac6967b6bf 149 #include "max31875_c.h"
phonemacro 2:32c0d11d8c0d 150 printf("C implementation of the code\r\n");
phonemacro 1:c5ac6967b6bf 151 max31875_init(MAX31875_I2C_SLAVE_ADR_R0);
phonemacro 1:c5ac6967b6bf 152 /* Configure for fault filter 1, comparator, continuous,
phonemacro 1:c5ac6967b6bf 153 * normal format, 8 sps, 12 bit resolution
phonemacro 1:c5ac6967b6bf 154 */
phonemacro 1:c5ac6967b6bf 155 max31875_write_cfg(uint16_t(MAX31875_CFG_FAULT_FILTER_1 |
phonemacro 1:c5ac6967b6bf 156 MAX31875_CFG_COMPARATOR_MODE | MAX31875_CFG_CONTINUOUS |
phonemacro 1:c5ac6967b6bf 157 MAX31875_CFG_NORMAL_FORMAT | MAX31875_CFG_CONV_RATE_8 |
phonemacro 1:c5ac6967b6bf 158 MAX31875_CFG_RESOLUTION_12BIT), i2cBus);
phonemacro 1:c5ac6967b6bf 159 for (i = 0; i < 10; i++) {
phonemacro 1:c5ac6967b6bf 160 wait(MAX31875_WAIT_CONV_RATE_8);
phonemacro 1:c5ac6967b6bf 161 temperature = max31875_read_reg_as_temperature(MAX31875_REG_TEMPERATURE,
phonemacro 1:c5ac6967b6bf 162 i2cBus);
phonemacro 1:c5ac6967b6bf 163 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:c5ac6967b6bf 164 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 1:c5ac6967b6bf 165 }
phonemacro 1:c5ac6967b6bf 166 max31875_read_reg(&cfg, MAX31875_REG_CONFIGURATION, i2cBus);
phonemacro 1:c5ac6967b6bf 167 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 1:c5ac6967b6bf 168
phonemacro 2:32c0d11d8c0d 169 #if 0
phonemacro 2:32c0d11d8c0d 170 max31875_write_trip_low(-63.9375, i2cBus);
phonemacro 2:32c0d11d8c0d 171 wait(0.03);
phonemacro 2:32c0d11d8c0d 172 temperature = max31875_read_reg_as_temperature(MAX31875_REG_THYST_LOW_TRIP, i2cBus);
phonemacro 2:32c0d11d8c0d 173 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 2:32c0d11d8c0d 174 temperature, max31875_celsius_to_fahrenheit(temperature));
phonemacro 2:32c0d11d8c0d 175
phonemacro 2:32c0d11d8c0d 176 max31875_write_trip_high(64.0625f, i2cBus);
phonemacro 2:32c0d11d8c0d 177 wait(0.03);
phonemacro 2:32c0d11d8c0d 178 temperature = max31875_read_reg_as_temperature(MAX31875_REG_TOS_HIGH_TRIP, i2cBus);
phonemacro 2:32c0d11d8c0d 179 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 2:32c0d11d8c0d 180 temperature, max31875_celsius_to_fahrenheit(temperature));
phonemacro 2:32c0d11d8c0d 181 #endif
phonemacro 2:32c0d11d8c0d 182
phonemacro 2:32c0d11d8c0d 183 printf("\r\n");
phonemacro 2:32c0d11d8c0d 184 for (i = 0; i < 2; i++) {
phonemacro 2:32c0d11d8c0d 185 max31875_write_cfg(uint16_t(MAX31875_CFG_FAULT_FILTER_4 |
phonemacro 2:32c0d11d8c0d 186 MAX31875_CFG_INTERRUPT_MODE | MAX31875_CFG_SHUTDOWN |
phonemacro 2:32c0d11d8c0d 187 MAX31875_CFG_EXTENDED_FORMAT| MAX31875_CFG_CONV_RATE_0_25 |
phonemacro 2:32c0d11d8c0d 188 MAX31875_CFG_RESOLUTION_10BIT | MAX31875_CFG_ONE_SHOT_START),
phonemacro 2:32c0d11d8c0d 189 i2cBus);
phonemacro 2:32c0d11d8c0d 190 wait(MAX31875_WAIT_CONV_RATE_0_25);
phonemacro 2:32c0d11d8c0d 191 temperature = max31875_read_reg_as_temperature(MAX31875_REG_TEMPERATURE,
phonemacro 2:32c0d11d8c0d 192 i2cBus);
phonemacro 2:32c0d11d8c0d 193 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 2:32c0d11d8c0d 194 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 2:32c0d11d8c0d 195 }
phonemacro 2:32c0d11d8c0d 196 max31875_read_reg(&cfg, MAX31875_REG_CONFIGURATION, i2cBus);
phonemacro 2:32c0d11d8c0d 197 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 2:32c0d11d8c0d 198
phonemacro 2:32c0d11d8c0d 199 #if 0
phonemacro 2:32c0d11d8c0d 200 temp_sensor.write_trip_low(-127.9375);
phonemacro 2:32c0d11d8c0d 201 max31875_write_trip_low(-127.9375, i2cBus);
phonemacro 2:32c0d11d8c0d 202 wait(0.03);
phonemacro 2:32c0d11d8c0d 203 temperature = max31875_read_reg_as_temperature(MAX31875_REG_THYST_LOW_TRIP, i2cBus);
phonemacro 2:32c0d11d8c0d 204 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 2:32c0d11d8c0d 205 temperature, max31875_celsius_to_fahrenheit(temperature));
phonemacro 2:32c0d11d8c0d 206
phonemacro 2:32c0d11d8c0d 207 max31875_write_trip_high(129.0625f, i2cBus);
phonemacro 2:32c0d11d8c0d 208 wait(0.03);
phonemacro 2:32c0d11d8c0d 209 temperature = max31875_read_reg_as_temperature(MAX31875_REG_TOS_HIGH_TRIP, i2cBus);
phonemacro 2:32c0d11d8c0d 210 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 2:32c0d11d8c0d 211 temperature, max31875_celsius_to_fahrenheit(temperature));
phonemacro 2:32c0d11d8c0d 212 #endif
phonemacro 2:32c0d11d8c0d 213 printf("\r\n\r\n\r\n");
phonemacro 2:32c0d11d8c0d 214
phonemacro 1:c5ac6967b6bf 215
phonemacro 0:77036686489d 216 while (true) { // Blink the green LED
phonemacro 0:77036686489d 217 gLED = !gLED;
phonemacro 0:77036686489d 218 wait(0.5);
phonemacro 0:77036686489d 219 }
phonemacro 0:77036686489d 220 }
phonemacro 0:77036686489d 221
phonemacro 0:77036686489d 222