David Jung / Mbed OS DS1775_Digital_Thermostat_Temperature

Dependencies:   max32630fthr DS1775_Digitial_Thermometer_Thermostat USBDevice

Committer:
phonemacro
Date:
Sun Apr 07 09:55:34 2019 +0000
Revision:
4:d3171636a86b
Parent:
3:d1beaf95d945
Child:
5:af38bfffd6d3
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 4:d3171636a86b 77 #if 0
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 4:d3171636a86b 138 #if 0
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 4:d3171636a86b 152 #endif
phonemacro 0:252077cb2ac5 153 /***************************************************************************
phonemacro 0:252077cb2ac5 154 * Call the C code version of the driver
phonemacro 0:252077cb2ac5 155 ***************************************************************************
phonemacro 0:252077cb2ac5 156 */
phonemacro 1:72ad3ee71812 157 #include "ds1775_c.h"
phonemacro 0:252077cb2ac5 158 printf("C implementation of the code\r\n");
phonemacro 1:72ad3ee71812 159 ds1775_init(DS1775_I2C_SLAVE_ADR_R0);
phonemacro 4:d3171636a86b 160 /* Configure for 9 bit resolution, fault filter 1,
phonemacro 4:d3171636a86b 161 active low, comparator, continuous,
phonemacro 0:252077cb2ac5 162 */
phonemacro 4:d3171636a86b 163 ds1775_write_cfg_reg(uint8_t(DS1775_CFG_RESOLUTION_9BIT |
phonemacro 4:d3171636a86b 164 DS1775_CFG_FAULT_FILTER_6 | DS1775_CFG_OS_POLARITY_ACT_LOW |
phonemacro 4:d3171636a86b 165 DS1775_CFG_COMPARATOR_MODE | DS1775_CFG_CONTINUOUS), i2cBus);
phonemacro 0:252077cb2ac5 166 for (i = 0; i < 10; i++) {
phonemacro 4:d3171636a86b 167 wait(DS1775_WAIT_CONV_TIME_9BIT);
phonemacro 1:72ad3ee71812 168 temperature = ds1775_read_reg_as_temperature(DS1775_REG_TEMPERATURE,
phonemacro 0:252077cb2ac5 169 i2cBus);
phonemacro 0:252077cb2ac5 170 printf("Temperature = %3.4f Celsius, %3.4f Fahrenheit\r\n",
phonemacro 0:252077cb2ac5 171 temperature, temp_sensor.celsius_to_fahrenheit(temperature));
phonemacro 0:252077cb2ac5 172 }
phonemacro 4:d3171636a86b 173
phonemacro 4:d3171636a86b 174 ds1775_read_cfg_reg(&cfg, i2cBus);
phonemacro 0:252077cb2ac5 175 printf("Configuration Register = 0x%04Xh \r\n", cfg);
phonemacro 4:d3171636a86b 176 #if 0
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