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 09:40:04 2019 +0000
Revision:
3:d1beaf95d945
Parent:
2:aa39032bf778
Child:
4:d3171636a86b
updates

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 1:72ad3ee71812 72 printf("DS1775 DS75 Digital Thermometer and Thermostat example source code.\r\n");
phonemacro 0:252077cb2ac5 73 printf("\r\n");
phonemacro 0:252077cb2ac5 74
phonemacro 1:72ad3ee71812 75 DS1775 temp_sensor(i2cBus, DS1775_I2C_SLAVE_ADR_R0);
phonemacro 0:252077cb2ac5 76 i2cBus.frequency(400000);
phonemacro 0:252077cb2ac5 77
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 2:aa39032bf778 81 temp_sensor.write_cfg(uint16_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 1:72ad3ee71812 86 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_TEMPERATURE);
phonemacro 0:252077cb2ac5 87 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 88 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 89 }
phonemacro 1:72ad3ee71812 90 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_TOS_HIGH_TRIP);
phonemacro 0:252077cb2ac5 91 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 92 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 2:aa39032bf778 93 temp_sensor.read_cfg_reg(&cfg);
phonemacro 2:aa39032bf778 94 printf("Configuration Register = 0x%02Xh \r\n", cfg);
phonemacro 2:aa39032bf778 95
phonemacro 0:252077cb2ac5 96 #if 0
phonemacro 0:252077cb2ac5 97 temp_sensor.write_trip_low(-63.9375);
phonemacro 0:252077cb2ac5 98 wait(0.03);
phonemacro 1:72ad3ee71812 99 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_THYST_LOW_TRIP);
phonemacro 0:252077cb2ac5 100 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 101 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 102
phonemacro 0:252077cb2ac5 103 temp_sensor.write_trip_high(64.0625f);
phonemacro 0:252077cb2ac5 104 wait(0.03);
phonemacro 1:72ad3ee71812 105 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_TOS_HIGH_TRIP);
phonemacro 0:252077cb2ac5 106 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 107 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 108 printf("\r\n\r\n");
phonemacro 0:252077cb2ac5 109 #endif
phonemacro 0:252077cb2ac5 110
phonemacro 0:252077cb2ac5 111 printf("\r\n");
phonemacro 0:252077cb2ac5 112
phonemacro 2:aa39032bf778 113
phonemacro 2:aa39032bf778 114 temp_sensor.read_cfg_reg(&cfg);
phonemacro 2:aa39032bf778 115 printf("Configuration Register = 0x%02Xh \r\n", cfg);
phonemacro 2:aa39032bf778 116 for (i = 0; i < 8; i++) {
phonemacro 2:aa39032bf778 117 /* Configure for 12 bit resolution, fault filter 2,
phonemacro 2:aa39032bf778 118 active low, interrupt, continous,
phonemacro 2:aa39032bf778 119 */
phonemacro 2:aa39032bf778 120 temp_sensor.write_cfg(uint16_t(DS1775_CFG_RESOLUTION_12BIT |
phonemacro 2:aa39032bf778 121 DS1775_CFG_FAULT_FILTER_6 | DS1775_CFG_OS_POLARITY_ACT_LOW |
phonemacro 2:aa39032bf778 122 DS1775_CFG_INTERRUPT_MODE | DS1775_CFG_CONTINUOUS));
phonemacro 2:aa39032bf778 123 wait(DS1775_WAIT_CONV_TIME_9BIT);
phonemacro 1:72ad3ee71812 124 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_TEMPERATURE);
phonemacro 0:252077cb2ac5 125 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 126 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 2:aa39032bf778 127 temp_sensor.write_cfg(uint16_t(DS1775_CFG_RESOLUTION_12BIT |
phonemacro 2:aa39032bf778 128 DS1775_CFG_FAULT_FILTER_6 | DS1775_CFG_OS_POLARITY_ACT_LOW |
phonemacro 2:aa39032bf778 129 DS1775_CFG_INTERRUPT_MODE | DS1775_CFG_SHUTDOWN));
phonemacro 2:aa39032bf778 130 wait(2); /* leave it in shutdown mode for a while */
phonemacro 0:252077cb2ac5 131 }
phonemacro 2:aa39032bf778 132 temp_sensor.read_cfg_reg(&cfg);
phonemacro 2:aa39032bf778 133 printf("Configuration Register = 0x%02Xh \r\n", cfg);
phonemacro 0:252077cb2ac5 134
phonemacro 0:252077cb2ac5 135 printf("\r\n\r\n");
phonemacro 0:252077cb2ac5 136
phonemacro 2:aa39032bf778 137
phonemacro 3:d1beaf95d945 138 #if 1
phonemacro 3:d1beaf95d945 139 temp_sensor.write_trip_low(-55.0f);
phonemacro 0:252077cb2ac5 140 wait(0.03);
phonemacro 1:72ad3ee71812 141 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_THYST_LOW_TRIP);
phonemacro 0:252077cb2ac5 142 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 143 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 144
phonemacro 3:d1beaf95d945 145 temp_sensor.write_trip_high(125.0f);
phonemacro 0:252077cb2ac5 146 wait(0.03);
phonemacro 1:72ad3ee71812 147 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_TOS_HIGH_TRIP);
phonemacro 0:252077cb2ac5 148 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 149 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 150 printf("\r\n\r\n");
phonemacro 0:252077cb2ac5 151 #endif
phonemacro 3:d1beaf95d945 152 #if 0
phonemacro 0:252077cb2ac5 153
phonemacro 0:252077cb2ac5 154 /***************************************************************************
phonemacro 0:252077cb2ac5 155 * Call the C code version of the driver
phonemacro 0:252077cb2ac5 156 ***************************************************************************
phonemacro 0:252077cb2ac5 157 */
phonemacro 1:72ad3ee71812 158 #include "ds1775_c.h"
phonemacro 0:252077cb2ac5 159 printf("C implementation of the code\r\n");
phonemacro 1:72ad3ee71812 160 ds1775_init(DS1775_I2C_SLAVE_ADR_R0);
phonemacro 0:252077cb2ac5 161 /* Configure for fault filter 1, comparator, continuous,
phonemacro 0:252077cb2ac5 162 * normal format, 8 sps, 12 bit resolution
phonemacro 0:252077cb2ac5 163 */
phonemacro 1:72ad3ee71812 164 ds1775_write_cfg(uint16_t(DS1775_CFG_FAULT_FILTER_1 |
phonemacro 1:72ad3ee71812 165 DS1775_CFG_COMPARATOR_MODE | DS1775_CFG_CONTINUOUS |
phonemacro 1:72ad3ee71812 166 DS1775_CFG_NORMAL_FORMAT | DS1775_CFG_CONV_RATE_8 |
phonemacro 1:72ad3ee71812 167 DS1775_CFG_RESOLUTION_12BIT), i2cBus);
phonemacro 0:252077cb2ac5 168 for (i = 0; i < 10; i++) {
phonemacro 1:72ad3ee71812 169 wait(DS1775_WAIT_CONV_RATE_8);
phonemacro 1:72ad3ee71812 170 temperature = ds1775_read_reg_as_temperature(DS1775_REG_TEMPERATURE,
phonemacro 0:252077cb2ac5 171 i2cBus);
phonemacro 0:252077cb2ac5 172 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 173 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 174 }
phonemacro 1:72ad3ee71812 175 ds1775_read_reg(&cfg, DS1775_REG_CONFIGURATION, i2cBus);
phonemacro 0:252077cb2ac5 176 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 0:252077cb2ac5 177
phonemacro 0:252077cb2ac5 178 #if 0
phonemacro 1:72ad3ee71812 179 ds1775_write_trip_low(-63.9375, i2cBus);
phonemacro 0:252077cb2ac5 180 wait(0.03);
phonemacro 1:72ad3ee71812 181 temperature = ds1775_read_reg_as_temperature(DS1775_REG_THYST_LOW_TRIP, i2cBus);
phonemacro 0:252077cb2ac5 182 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:72ad3ee71812 183 temperature, ds1775_celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 184
phonemacro 1:72ad3ee71812 185 ds1775_write_trip_high(64.0625f, i2cBus);
phonemacro 0:252077cb2ac5 186 wait(0.03);
phonemacro 1:72ad3ee71812 187 temperature = ds1775_read_reg_as_temperature(DS1775_REG_TOS_HIGH_TRIP, i2cBus);
phonemacro 0:252077cb2ac5 188 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:72ad3ee71812 189 temperature, ds1775_celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 190 #endif
phonemacro 0:252077cb2ac5 191
phonemacro 0:252077cb2ac5 192 printf("\r\n");
phonemacro 0:252077cb2ac5 193 for (i = 0; i < 2; i++) {
phonemacro 1:72ad3ee71812 194 ds1775_write_cfg(uint16_t(DS1775_CFG_FAULT_FILTER_4 |
phonemacro 1:72ad3ee71812 195 DS1775_CFG_INTERRUPT_MODE | DS1775_CFG_SHUTDOWN |
phonemacro 1:72ad3ee71812 196 DS1775_CFG_EXTENDED_FORMAT| DS1775_CFG_CONV_RATE_0_25 |
phonemacro 1:72ad3ee71812 197 DS1775_CFG_RESOLUTION_10BIT | DS1775_CFG_ONE_SHOT_START),
phonemacro 0:252077cb2ac5 198 i2cBus);
phonemacro 1:72ad3ee71812 199 wait(DS1775_WAIT_CONV_RATE_0_25);
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 0:252077cb2ac5 204 }
phonemacro 1:72ad3ee71812 205 ds1775_read_reg(&cfg, DS1775_REG_CONFIGURATION, i2cBus);
phonemacro 0:252077cb2ac5 206 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 0:252077cb2ac5 207
phonemacro 0:252077cb2ac5 208 #if 0
phonemacro 0:252077cb2ac5 209 temp_sensor.write_trip_low(-127.9375);
phonemacro 1:72ad3ee71812 210 ds1775_write_trip_low(-127.9375, i2cBus);
phonemacro 0:252077cb2ac5 211 wait(0.03);
phonemacro 1:72ad3ee71812 212 temperature = ds1775_read_reg_as_temperature(DS1775_REG_THYST_LOW_TRIP, i2cBus);
phonemacro 0:252077cb2ac5 213 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:72ad3ee71812 214 temperature, ds1775_celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 215
phonemacro 1:72ad3ee71812 216 ds1775_write_trip_high(129.0625f, i2cBus);
phonemacro 0:252077cb2ac5 217 wait(0.03);
phonemacro 1:72ad3ee71812 218 temperature = ds1775_read_reg_as_temperature(DS1775_REG_TOS_HIGH_TRIP, i2cBus);
phonemacro 0:252077cb2ac5 219 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:72ad3ee71812 220 temperature, ds1775_celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 221 #endif
phonemacro 0:252077cb2ac5 222 #endif
phonemacro 0:252077cb2ac5 223 printf("\r\n\r\n\r\n");
phonemacro 0:252077cb2ac5 224
phonemacro 0:252077cb2ac5 225
phonemacro 0:252077cb2ac5 226 while (true) { // Blink the green LED
phonemacro 0:252077cb2ac5 227 gLED = !gLED;
phonemacro 0:252077cb2ac5 228 wait(0.5);
phonemacro 0:252077cb2ac5 229 }
phonemacro 0:252077cb2ac5 230 }
phonemacro 0:252077cb2ac5 231
phonemacro 0:252077cb2ac5 232