Sample host software for the Maxim Integrated DS1775, DS75 Digital Thermometer Thermostat IC hosted on the MAX32630FTHR. The DS1775 is suitable for PCs, cell phones, and other thermally sensitive systems.

Dependencies:   max32630fthr DS1775_Digitial_Thermometer_Thermostat USBDevice

Committer:
phonemacro
Date:
Sun Apr 07 11:01:25 2019 +0000
Revision:
5:af38bfffd6d3
Parent:
4:d3171636a86b
Child:
8:2b1ab5937e95
updated c code

Who changed what in which revision?

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