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 08:59:53 2019 +0000
Revision:
2:aa39032bf778
Parent:
1:72ad3ee71812
Child:
3:d1beaf95d945
updated

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 0:252077cb2ac5 137 #if 0
phonemacro 2:aa39032bf778 138
phonemacro 2:aa39032bf778 139 #if 0
phonemacro 0:252077cb2ac5 140 temp_sensor.write_trip_low(-127.9375);
phonemacro 0:252077cb2ac5 141 wait(0.03);
phonemacro 1:72ad3ee71812 142 temp_sensor.read_reg(&cfg, DS1775_REG_CONFIGURATION);
phonemacro 1:72ad3ee71812 143 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_THYST_LOW_TRIP);
phonemacro 0:252077cb2ac5 144 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 145 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 146
phonemacro 0:252077cb2ac5 147 temp_sensor.write_trip_high(129.0625f);
phonemacro 0:252077cb2ac5 148 wait(0.03);
phonemacro 1:72ad3ee71812 149 temperature = temp_sensor.read_reg_as_temperature(DS1775_REG_TOS_HIGH_TRIP);
phonemacro 0:252077cb2ac5 150 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 151 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 152 printf("\r\n\r\n");
phonemacro 0:252077cb2ac5 153 #endif
phonemacro 0:252077cb2ac5 154
phonemacro 0:252077cb2ac5 155 /***************************************************************************
phonemacro 0:252077cb2ac5 156 * Call the C code version of the driver
phonemacro 0:252077cb2ac5 157 ***************************************************************************
phonemacro 0:252077cb2ac5 158 */
phonemacro 1:72ad3ee71812 159 #include "ds1775_c.h"
phonemacro 0:252077cb2ac5 160 printf("C implementation of the code\r\n");
phonemacro 1:72ad3ee71812 161 ds1775_init(DS1775_I2C_SLAVE_ADR_R0);
phonemacro 0:252077cb2ac5 162 /* Configure for fault filter 1, comparator, continuous,
phonemacro 0:252077cb2ac5 163 * normal format, 8 sps, 12 bit resolution
phonemacro 0:252077cb2ac5 164 */
phonemacro 1:72ad3ee71812 165 ds1775_write_cfg(uint16_t(DS1775_CFG_FAULT_FILTER_1 |
phonemacro 1:72ad3ee71812 166 DS1775_CFG_COMPARATOR_MODE | DS1775_CFG_CONTINUOUS |
phonemacro 1:72ad3ee71812 167 DS1775_CFG_NORMAL_FORMAT | DS1775_CFG_CONV_RATE_8 |
phonemacro 1:72ad3ee71812 168 DS1775_CFG_RESOLUTION_12BIT), i2cBus);
phonemacro 0:252077cb2ac5 169 for (i = 0; i < 10; i++) {
phonemacro 1:72ad3ee71812 170 wait(DS1775_WAIT_CONV_RATE_8);
phonemacro 1:72ad3ee71812 171 temperature = ds1775_read_reg_as_temperature(DS1775_REG_TEMPERATURE,
phonemacro 0:252077cb2ac5 172 i2cBus);
phonemacro 0:252077cb2ac5 173 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 174 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 175 }
phonemacro 1:72ad3ee71812 176 ds1775_read_reg(&cfg, DS1775_REG_CONFIGURATION, i2cBus);
phonemacro 0:252077cb2ac5 177 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 0:252077cb2ac5 178
phonemacro 0:252077cb2ac5 179 #if 0
phonemacro 1:72ad3ee71812 180 ds1775_write_trip_low(-63.9375, i2cBus);
phonemacro 0:252077cb2ac5 181 wait(0.03);
phonemacro 1:72ad3ee71812 182 temperature = ds1775_read_reg_as_temperature(DS1775_REG_THYST_LOW_TRIP, i2cBus);
phonemacro 0:252077cb2ac5 183 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:72ad3ee71812 184 temperature, ds1775_celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 185
phonemacro 1:72ad3ee71812 186 ds1775_write_trip_high(64.0625f, i2cBus);
phonemacro 0:252077cb2ac5 187 wait(0.03);
phonemacro 1:72ad3ee71812 188 temperature = ds1775_read_reg_as_temperature(DS1775_REG_TOS_HIGH_TRIP, i2cBus);
phonemacro 0:252077cb2ac5 189 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:72ad3ee71812 190 temperature, ds1775_celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 191 #endif
phonemacro 0:252077cb2ac5 192
phonemacro 0:252077cb2ac5 193 printf("\r\n");
phonemacro 0:252077cb2ac5 194 for (i = 0; i < 2; i++) {
phonemacro 1:72ad3ee71812 195 ds1775_write_cfg(uint16_t(DS1775_CFG_FAULT_FILTER_4 |
phonemacro 1:72ad3ee71812 196 DS1775_CFG_INTERRUPT_MODE | DS1775_CFG_SHUTDOWN |
phonemacro 1:72ad3ee71812 197 DS1775_CFG_EXTENDED_FORMAT| DS1775_CFG_CONV_RATE_0_25 |
phonemacro 1:72ad3ee71812 198 DS1775_CFG_RESOLUTION_10BIT | DS1775_CFG_ONE_SHOT_START),
phonemacro 0:252077cb2ac5 199 i2cBus);
phonemacro 1:72ad3ee71812 200 wait(DS1775_WAIT_CONV_RATE_0_25);
phonemacro 1:72ad3ee71812 201 temperature = ds1775_read_reg_as_temperature(DS1775_REG_TEMPERATURE,
phonemacro 0:252077cb2ac5 202 i2cBus);
phonemacro 0:252077cb2ac5 203 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 204 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 205 }
phonemacro 1:72ad3ee71812 206 ds1775_read_reg(&cfg, DS1775_REG_CONFIGURATION, i2cBus);
phonemacro 0:252077cb2ac5 207 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 0:252077cb2ac5 208
phonemacro 0:252077cb2ac5 209 #if 0
phonemacro 0:252077cb2ac5 210 temp_sensor.write_trip_low(-127.9375);
phonemacro 1:72ad3ee71812 211 ds1775_write_trip_low(-127.9375, i2cBus);
phonemacro 0:252077cb2ac5 212 wait(0.03);
phonemacro 1:72ad3ee71812 213 temperature = ds1775_read_reg_as_temperature(DS1775_REG_THYST_LOW_TRIP, i2cBus);
phonemacro 0:252077cb2ac5 214 printf("Thyst Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:72ad3ee71812 215 temperature, ds1775_celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 216
phonemacro 1:72ad3ee71812 217 ds1775_write_trip_high(129.0625f, i2cBus);
phonemacro 0:252077cb2ac5 218 wait(0.03);
phonemacro 1:72ad3ee71812 219 temperature = ds1775_read_reg_as_temperature(DS1775_REG_TOS_HIGH_TRIP, i2cBus);
phonemacro 0:252077cb2ac5 220 printf("TOS Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 1:72ad3ee71812 221 temperature, ds1775_celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 222 #endif
phonemacro 0:252077cb2ac5 223 #endif
phonemacro 0:252077cb2ac5 224 printf("\r\n\r\n\r\n");
phonemacro 0:252077cb2ac5 225
phonemacro 0:252077cb2ac5 226
phonemacro 0:252077cb2ac5 227 while (true) { // Blink the green LED
phonemacro 0:252077cb2ac5 228 gLED = !gLED;
phonemacro 0:252077cb2ac5 229 wait(0.5);
phonemacro 0:252077cb2ac5 230 }
phonemacro 0:252077cb2ac5 231 }
phonemacro 0:252077cb2ac5 232
phonemacro 0:252077cb2ac5 233