Maxim Integrated / Mbed OS MAX31875_Temperature_Sensor_Small_WLP

Dependencies:   MAX31875_Temperature_Sensor_Low_Power max32630fthr USBDevice

Committer:
phonemacro
Date:
Mon Feb 04 23:39:11 2019 +0000
Revision:
1:c5ac6967b6bf
Parent:
0:77036686489d
Child:
2:32c0d11d8c0d
added c version of the driver.

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 1:c5ac6967b6bf 51 * @version 1.0000.0001
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 0:77036686489d 85 for (i = 0; i < 10; i++) {
phonemacro 0:77036686489d 86 wait(MAX31875_WAIT_CONV_RATE_8);
phonemacro 0:77036686489d 87 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_TEMPERATURE);
phonemacro 0:77036686489d 88 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:77036686489d 89 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:77036686489d 90 }
phonemacro 0:77036686489d 91 temp_sensor.read_reg(&cfg, MAX31875_REG_CONFIGURATION);
phonemacro 0:77036686489d 92 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 0:77036686489d 93
phonemacro 0:77036686489d 94 printf("\r\n");
phonemacro 0:77036686489d 95
phonemacro 0:77036686489d 96
phonemacro 0:77036686489d 97 /* Configure for fault filter 4, interrupt, shutdown,
phonemacro 0:77036686489d 98 * extended format, 0.25 sps, 10 bit resolution, start one-shot
phonemacro 0:77036686489d 99 */
phonemacro 0:77036686489d 100 for (i = 0; i < 5; i++) {
phonemacro 0:77036686489d 101 temp_sensor.write_cfg(uint16_t(MAX31875_CFG_FAULT_FILTER_4 |
phonemacro 0:77036686489d 102 MAX31875_CFG_INTERRUPT_MODE | MAX31875_CFG_SHUTDOWN |
phonemacro 0:77036686489d 103 MAX31875_CFG_EXTENDED_FORMAT| MAX31875_CFG_CONV_RATE_0_25 |
phonemacro 0:77036686489d 104 MAX31875_CFG_RESOLUTION_10BIT | MAX31875_CFG_ONE_SHOT_START));
phonemacro 0:77036686489d 105 wait(MAX31875_WAIT_CONV_RATE_0_25);
phonemacro 0:77036686489d 106 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_TEMPERATURE);
phonemacro 0:77036686489d 107 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:77036686489d 108 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:77036686489d 109 }
phonemacro 0:77036686489d 110 temp_sensor.read_reg(&cfg, MAX31875_REG_CONFIGURATION);
phonemacro 0:77036686489d 111 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 0:77036686489d 112
phonemacro 0:77036686489d 113 printf("\r\n\r\n");
phonemacro 0:77036686489d 114 #if 0
phonemacro 0:77036686489d 115 temp_sensor.write_trip_low(3.0625f);
phonemacro 0:77036686489d 116 temp_sensor.read_reg(&cfg, MAX31875_REG_CONFIGURATION);
phonemacro 0:77036686489d 117 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_THYST);
phonemacro 0:77036686489d 118 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:77036686489d 119 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:77036686489d 120
phonemacro 0:77036686489d 121 temp_sensor.write_trip_high(129.0625f);
phonemacro 0:77036686489d 122 temperature = temp_sensor.read_reg_as_temperature(MAX31875_REG_TOS);
phonemacro 0:77036686489d 123 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:77036686489d 124 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:77036686489d 125 printf("\r\n\r\n");
phonemacro 0:77036686489d 126 #endif
phonemacro 1:c5ac6967b6bf 127
phonemacro 1:c5ac6967b6bf 128 /***************************************************************************
phonemacro 1:c5ac6967b6bf 129 * Call the C code version of the driver
phonemacro 1:c5ac6967b6bf 130 ***************************************************************************
phonemacro 1:c5ac6967b6bf 131 */
phonemacro 1:c5ac6967b6bf 132 #include "max31875_c.h"
phonemacro 1:c5ac6967b6bf 133 max31875_init(MAX31875_I2C_SLAVE_ADR_R0);
phonemacro 1:c5ac6967b6bf 134 /* Configure for fault filter 1, comparator, continuous,
phonemacro 1:c5ac6967b6bf 135 * normal format, 8 sps, 12 bit resolution
phonemacro 1:c5ac6967b6bf 136 */
phonemacro 1:c5ac6967b6bf 137 max31875_write_cfg(uint16_t(MAX31875_CFG_FAULT_FILTER_1 |
phonemacro 1:c5ac6967b6bf 138 MAX31875_CFG_COMPARATOR_MODE | MAX31875_CFG_CONTINUOUS |
phonemacro 1:c5ac6967b6bf 139 MAX31875_CFG_NORMAL_FORMAT | MAX31875_CFG_CONV_RATE_8 |
phonemacro 1:c5ac6967b6bf 140 MAX31875_CFG_RESOLUTION_12BIT), i2cBus);
phonemacro 1:c5ac6967b6bf 141 for (i = 0; i < 10; i++) {
phonemacro 1:c5ac6967b6bf 142 wait(MAX31875_WAIT_CONV_RATE_8);
phonemacro 1:c5ac6967b6bf 143 temperature = max31875_read_reg_as_temperature(MAX31875_REG_TEMPERATURE,
phonemacro 1:c5ac6967b6bf 144 i2cBus);
phonemacro 1:c5ac6967b6bf 145 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:c5ac6967b6bf 146 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 1:c5ac6967b6bf 147 }
phonemacro 1:c5ac6967b6bf 148 max31875_read_reg(&cfg, MAX31875_REG_CONFIGURATION, i2cBus);
phonemacro 1:c5ac6967b6bf 149 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 1:c5ac6967b6bf 150
phonemacro 1:c5ac6967b6bf 151
phonemacro 0:77036686489d 152 while (true) { // Blink the green LED
phonemacro 0:77036686489d 153 gLED = !gLED;
phonemacro 0:77036686489d 154 wait(0.5);
phonemacro 0:77036686489d 155 }
phonemacro 0:77036686489d 156 }
phonemacro 0:77036686489d 157
phonemacro 0:77036686489d 158