MAX32620HSP (MAXREFDES100) RPC Example for Graphical User Interface

Dependencies:   USBDevice

Fork of HSP_Release by Jerry Bradshaw

This is an example program for the MAX32620HSP (MAXREFDES100 Health Sensor Platform). It demonstrates all the features of the platform and works with a companion graphical user interface (GUI) to help evaluate/configure/monitor the board. Go to the MAXREFDES100 product page and click on "design resources" to download the companion software. The GUI connects to the board through an RPC interface on a virtual serial port over the USB interface.

The RPC interface provides access to all the features of the board and is available to interface with other development environments such Matlab. This firmware provides realtime data streaming through the RPC interface over USB, and also provides the ability to log the data to flash for untethered battery operation. The data logging settings are configured through the GUI, and the GUI also provides the interface to download logged data.

Details on the RPC interface can be found here: HSP RPC Interface Documentation

Windows

With this program loaded, the MAX32620HSP will appear on your computer as a serial port. On Mac and Linux, this will happen by default. For Windows, you need to install a driver: HSP serial port windows driver

For more details about this platform and how to use it, see the MAXREFDES100 product page.

Committer:
jbradshaw
Date:
Tue Apr 25 10:47:10 2017 -0500
Revision:
3:8e9b9f5818aa
Parent:
1:9490836294ea
Removed Bulk Erasing, instead a small number of bytes are sampled from each and every page to determine if sector is "dirty", if so sector is erased
Prevents device from sleeping when the firmware detects a series of binary flash page RPC transfers, this increases flash page transfers by %450
when 200mS elapse with the last flash page transfer, normal sleep behaviour is resumed

Who changed what in which revision?

UserRevisionLine numberNew contents of line
jbradshaw 0:e4a10ed6eb92 1 /*******************************************************************************
jbradshaw 0:e4a10ed6eb92 2 * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved.
jbradshaw 0:e4a10ed6eb92 3 *
jbradshaw 0:e4a10ed6eb92 4 * Permission is hereby granted, free of charge, to any person obtaining a
jbradshaw 0:e4a10ed6eb92 5 * copy of this software and associated documentation files (the "Software"),
jbradshaw 0:e4a10ed6eb92 6 * to deal in the Software without restriction, including without limitation
jbradshaw 0:e4a10ed6eb92 7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
jbradshaw 0:e4a10ed6eb92 8 * and/or sell copies of the Software, and to permit persons to whom the
jbradshaw 0:e4a10ed6eb92 9 * Software is furnished to do so, subject to the following conditions:
jbradshaw 0:e4a10ed6eb92 10 *
jbradshaw 0:e4a10ed6eb92 11 * The above copyright notice and this permission notice shall be included
jbradshaw 0:e4a10ed6eb92 12 * in all copies or substantial portions of the Software.
jbradshaw 0:e4a10ed6eb92 13 *
jbradshaw 0:e4a10ed6eb92 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
jbradshaw 0:e4a10ed6eb92 15 * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
jbradshaw 0:e4a10ed6eb92 16 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
jbradshaw 0:e4a10ed6eb92 17 * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES
jbradshaw 0:e4a10ed6eb92 18 * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
jbradshaw 0:e4a10ed6eb92 19 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
jbradshaw 0:e4a10ed6eb92 20 * OTHER DEALINGS IN THE SOFTWARE.
jbradshaw 0:e4a10ed6eb92 21 *
jbradshaw 0:e4a10ed6eb92 22 * Except as contained in this notice, the name of Maxim Integrated
jbradshaw 0:e4a10ed6eb92 23 * Products, Inc. shall not be used except as stated in the Maxim Integrated
jbradshaw 0:e4a10ed6eb92 24 * Products, Inc. Branding Policy.
jbradshaw 0:e4a10ed6eb92 25 *
jbradshaw 0:e4a10ed6eb92 26 * The mere transfer of this software does not imply any licenses
jbradshaw 0:e4a10ed6eb92 27 * of trade secrets, proprietary technology, copyrights, patents,
jbradshaw 0:e4a10ed6eb92 28 * trademarks, maskwork rights, or any other form of intellectual
jbradshaw 0:e4a10ed6eb92 29 * property whatsoever. Maxim Integrated Products, Inc. retains all
jbradshaw 0:e4a10ed6eb92 30 * ownership rights.
jbradshaw 0:e4a10ed6eb92 31 *******************************************************************************
jbradshaw 0:e4a10ed6eb92 32 */
jbradshaw 0:e4a10ed6eb92 33 #include "mbed.h"
jbradshaw 0:e4a10ed6eb92 34 #include "BMP280.h"
jbradshaw 0:e4a10ed6eb92 35
jbradshaw 0:e4a10ed6eb92 36 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 37 BMP280::BMP280(PinName sda, PinName scl, int slaveAddress) :
jbradshaw 0:e4a10ed6eb92 38 slaveAddress(slaveAddress) {
jbradshaw 1:9490836294ea 39
jbradshaw 0:e4a10ed6eb92 40 i2c = new I2C(sda, scl);
jbradshaw 0:e4a10ed6eb92 41 isOwner = true;
jbradshaw 0:e4a10ed6eb92 42 }
jbradshaw 1:9490836294ea 43
jbradshaw 0:e4a10ed6eb92 44 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 45 BMP280::BMP280(I2C *i2c, int slaveAddress) :
jbradshaw 0:e4a10ed6eb92 46 slaveAddress(slaveAddress) {
jbradshaw 1:9490836294ea 47
jbradshaw 0:e4a10ed6eb92 48 this->i2c = i2c;
jbradshaw 0:e4a10ed6eb92 49 isOwner = false;
jbradshaw 0:e4a10ed6eb92 50
jbradshaw 0:e4a10ed6eb92 51 i2c->frequency(100000);
jbradshaw 0:e4a10ed6eb92 52 loggingEnabled = 0;
jbradshaw 0:e4a10ed6eb92 53 loggingSampleRate = 5;
jbradshaw 0:e4a10ed6eb92 54 }
jbradshaw 1:9490836294ea 55
jbradshaw 0:e4a10ed6eb92 56 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 57 BMP280::~BMP280(void) {
jbradshaw 1:9490836294ea 58
jbradshaw 0:e4a10ed6eb92 59 if (isOwner == true) {
jbradshaw 0:e4a10ed6eb92 60 delete i2c;
jbradshaw 0:e4a10ed6eb92 61 }
jbradshaw 0:e4a10ed6eb92 62 }
jbradshaw 0:e4a10ed6eb92 63
jbradshaw 0:e4a10ed6eb92 64 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 65 int BMP280::init(BMP280::bmp280_osrs_P_t Osrs_p, BMP280::bmp280_osrs_T_t Osrs_t,
jbradshaw 0:e4a10ed6eb92 66 BMP280::bmp280_FILT_t Filter, BMP280::bmp280_MODE_t Mode,
jbradshaw 1:9490836294ea 67 BMP280::bmp280_TSB_t T_sb) {
jbradshaw 0:e4a10ed6eb92 68
jbradshaw 0:e4a10ed6eb92 69 char raw_Tn[6];
jbradshaw 0:e4a10ed6eb92 70 char raw_Pn[20];
jbradshaw 1:9490836294ea 71
jbradshaw 1:9490836294ea 72 bmp280_ctrl_meas_t ctrl_meas;
jbradshaw 1:9490836294ea 73 bmp280_config_t config;
jbradshaw 0:e4a10ed6eb92 74
jbradshaw 1:9490836294ea 75 ///
jbradshaw 1:9490836294ea 76 /// Read all the temp coeffecients from the BMP280 memory. It will be used in
jbradshaw 1:9490836294ea 77 /// calculation
jbradshaw 1:9490836294ea 78 ///
jbradshaw 1:9490836294ea 79 if (reg_read(BMP280_CALIB00, raw_Tn, 6) != 0) {
jbradshaw 0:e4a10ed6eb92 80 return -1;
jbradshaw 0:e4a10ed6eb92 81 }
jbradshaw 0:e4a10ed6eb92 82
jbradshaw 0:e4a10ed6eb92 83 dig_T1 = (((uint16_t)raw_Tn[1]) << 8) | raw_Tn[0];
jbradshaw 0:e4a10ed6eb92 84 dig_T2 = (((int16_t)raw_Tn[3]) << 8) | raw_Tn[2];
jbradshaw 0:e4a10ed6eb92 85 dig_T3 = (((int16_t)raw_Tn[5]) << 8) | raw_Tn[4];
jbradshaw 0:e4a10ed6eb92 86
jbradshaw 1:9490836294ea 87 ///
jbradshaw 1:9490836294ea 88 /// Read all the press coeffecients from the BMP280 memory. It will be used in
jbradshaw 1:9490836294ea 89 /// calculation
jbradshaw 1:9490836294ea 90 ///
jbradshaw 1:9490836294ea 91 if (reg_read((BMP280_REG_map_t)(BMP280_CALIB00+6) /*reg*/, raw_Pn, 20) != 0) {
jbradshaw 0:e4a10ed6eb92 92 return -1;
jbradshaw 0:e4a10ed6eb92 93 }
jbradshaw 0:e4a10ed6eb92 94
jbradshaw 0:e4a10ed6eb92 95 dig_P1 = (((uint16_t)raw_Pn[1]) << 8) | raw_Pn[0];
jbradshaw 0:e4a10ed6eb92 96 dig_P2 = (((int16_t)raw_Pn[3]) << 8) | raw_Pn[2];
jbradshaw 0:e4a10ed6eb92 97 dig_P3 = (((int16_t)raw_Pn[5]) << 8) | raw_Pn[4];
jbradshaw 0:e4a10ed6eb92 98 dig_P4 = (((int16_t)raw_Pn[7]) << 8) | raw_Pn[6];
jbradshaw 0:e4a10ed6eb92 99 dig_P5 = (((int16_t)raw_Pn[9]) << 8) | raw_Pn[8];
jbradshaw 0:e4a10ed6eb92 100 dig_P6 = (((int16_t)raw_Pn[11]) << 8) | raw_Pn[10];
jbradshaw 0:e4a10ed6eb92 101 dig_P7 = (((int16_t)raw_Pn[13]) << 8) | raw_Pn[12];
jbradshaw 0:e4a10ed6eb92 102 dig_P8 = (((int16_t)raw_Pn[15]) << 8) | raw_Pn[14];
jbradshaw 0:e4a10ed6eb92 103 dig_P9 = (((int16_t)raw_Pn[17]) << 8) | raw_Pn[16];
jbradshaw 0:e4a10ed6eb92 104
jbradshaw 0:e4a10ed6eb92 105
jbradshaw 0:e4a10ed6eb92 106 wait(1.0 / 10.0);
jbradshaw 0:e4a10ed6eb92 107
jbradshaw 0:e4a10ed6eb92 108 /****/
jbradshaw 1:9490836294ea 109 if (reg_read(BMP280_CTRL_MEAS, &ctrl_meas.all, 1) != 0) {
jbradshaw 0:e4a10ed6eb92 110 return -1;
jbradshaw 0:e4a10ed6eb92 111 }
jbradshaw 0:e4a10ed6eb92 112
jbradshaw 1:9490836294ea 113 ctrl_meas.bit.osrs_p = Osrs_p;
jbradshaw 1:9490836294ea 114 ctrl_meas.bit.osrs_t = Osrs_t;
jbradshaw 0:e4a10ed6eb92 115
jbradshaw 1:9490836294ea 116 ctrl_meas.bit.mode = Mode;
jbradshaw 0:e4a10ed6eb92 117
jbradshaw 1:9490836294ea 118 if (reg_write(BMP280_CTRL_MEAS, ctrl_meas.all) != 0) {
jbradshaw 0:e4a10ed6eb92 119 return -1;
jbradshaw 0:e4a10ed6eb92 120 }
jbradshaw 0:e4a10ed6eb92 121
jbradshaw 0:e4a10ed6eb92 122 /****/
jbradshaw 0:e4a10ed6eb92 123
jbradshaw 1:9490836294ea 124 if (reg_read(BMP280_CONFIG, &config.all, 1) != 0) {
jbradshaw 0:e4a10ed6eb92 125 return -1;
jbradshaw 0:e4a10ed6eb92 126 }
jbradshaw 0:e4a10ed6eb92 127
jbradshaw 1:9490836294ea 128 config.bit.filter = Filter;
jbradshaw 0:e4a10ed6eb92 129
jbradshaw 0:e4a10ed6eb92 130 if (Mode == 0b11) {
jbradshaw 1:9490836294ea 131 config.bit.t_sb = T_sb;
jbradshaw 0:e4a10ed6eb92 132 }
jbradshaw 0:e4a10ed6eb92 133
jbradshaw 1:9490836294ea 134 if (reg_write(BMP280_CONFIG, config.all) != 0) {
jbradshaw 0:e4a10ed6eb92 135 return -1;
jbradshaw 0:e4a10ed6eb92 136 }
jbradshaw 0:e4a10ed6eb92 137
jbradshaw 0:e4a10ed6eb92 138 return 0;
jbradshaw 0:e4a10ed6eb92 139 }
jbradshaw 0:e4a10ed6eb92 140
jbradshaw 0:e4a10ed6eb92 141 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 142 float BMP280::ToFahrenheit(float temperature) {
jbradshaw 1:9490836294ea 143
jbradshaw 1:9490836294ea 144 return temperature * (9 / 5.0f) + 32;
jbradshaw 0:e4a10ed6eb92 145 }
jbradshaw 0:e4a10ed6eb92 146
jbradshaw 0:e4a10ed6eb92 147 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 148 int BMP280::ReadCompDataRaw2(char *bmp280_rawData) {
jbradshaw 1:9490836294ea 149
jbradshaw 0:e4a10ed6eb92 150 int i;
jbradshaw 0:e4a10ed6eb92 151 char data[6];
jbradshaw 0:e4a10ed6eb92 152 float temp;
jbradshaw 0:e4a10ed6eb92 153 float pressure;
jbradshaw 0:e4a10ed6eb92 154 int iPressure;
jbradshaw 0:e4a10ed6eb92 155 char str[32];
jbradshaw 0:e4a10ed6eb92 156 ReadCompDataRaw(data);
jbradshaw 0:e4a10ed6eb92 157 ToFloat(data, &temp, &pressure);
jbradshaw 0:e4a10ed6eb92 158 iPressure = (int)pressure;
jbradshaw 0:e4a10ed6eb92 159 sprintf(str, "%d ", iPressure);
jbradshaw 0:e4a10ed6eb92 160 for (i = 0; i < 6; i++) {
jbradshaw 0:e4a10ed6eb92 161 bmp280_rawData[i] = str[i];
jbradshaw 0:e4a10ed6eb92 162 }
jbradshaw 0:e4a10ed6eb92 163 return 0;
jbradshaw 0:e4a10ed6eb92 164 }
jbradshaw 0:e4a10ed6eb92 165
jbradshaw 0:e4a10ed6eb92 166 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 167 int BMP280::ReadCompDataRaw(char *bmp280_rawData) {
jbradshaw 0:e4a10ed6eb92 168
jbradshaw 1:9490836294ea 169 if (reg_read(BMP280_PRESS_MSB, bmp280_rawData, 6) != 0) {
jbradshaw 0:e4a10ed6eb92 170 return -1;
jbradshaw 0:e4a10ed6eb92 171 }
jbradshaw 0:e4a10ed6eb92 172 return 0;
jbradshaw 0:e4a10ed6eb92 173 }
jbradshaw 0:e4a10ed6eb92 174
jbradshaw 0:e4a10ed6eb92 175 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 176 void BMP280::ToFloat(char *bmp280_rawData, float *Temp_degC, float *Press_Pa) {
jbradshaw 1:9490836294ea 177
jbradshaw 0:e4a10ed6eb92 178 bmp280_rawPress = (uint32_t)(bmp280_rawData[0] << 12) |
jbradshaw 0:e4a10ed6eb92 179 (bmp280_rawData[1] << 4) | (bmp280_rawData[2] >> 4);
jbradshaw 0:e4a10ed6eb92 180
jbradshaw 0:e4a10ed6eb92 181 bmp280_rawTemp = (uint32_t)(bmp280_rawData[3] << 12) |
jbradshaw 0:e4a10ed6eb92 182 (bmp280_rawData[4] << 4) | (bmp280_rawData[5] >> 4);
jbradshaw 0:e4a10ed6eb92 183
jbradshaw 0:e4a10ed6eb92 184 *Temp_degC = compensate_T_float(bmp280_rawTemp);
jbradshaw 0:e4a10ed6eb92 185 *Press_Pa = compensate_P_float(bmp280_rawPress);
jbradshaw 0:e4a10ed6eb92 186 }
jbradshaw 0:e4a10ed6eb92 187
jbradshaw 0:e4a10ed6eb92 188 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 189 int BMP280::ReadCompData(float *Temp_degC, float *Press_Pa) {
jbradshaw 1:9490836294ea 190
jbradshaw 0:e4a10ed6eb92 191 char bmp280_rawData[6];
jbradshaw 0:e4a10ed6eb92 192
jbradshaw 0:e4a10ed6eb92 193 if (ReadCompDataRaw(bmp280_rawData) != 0) {
jbradshaw 0:e4a10ed6eb92 194 return -1;
jbradshaw 0:e4a10ed6eb92 195 }
jbradshaw 0:e4a10ed6eb92 196 ToFloat(bmp280_rawData, Temp_degC, Press_Pa);
jbradshaw 0:e4a10ed6eb92 197 return 0;
jbradshaw 0:e4a10ed6eb92 198 }
jbradshaw 0:e4a10ed6eb92 199
jbradshaw 0:e4a10ed6eb92 200 //******************************************************************************
jbradshaw 1:9490836294ea 201 int BMP280::reg_write(BMP280_REG_map_t reg, char value) {
jbradshaw 1:9490836294ea 202
jbradshaw 0:e4a10ed6eb92 203 int result;
jbradshaw 0:e4a10ed6eb92 204 char cmdData[2] = {(char)reg, value};
jbradshaw 0:e4a10ed6eb92 205 result = i2c->write(slaveAddress, cmdData, 2);
jbradshaw 1:9490836294ea 206 if (result != 0) {
jbradshaw 0:e4a10ed6eb92 207 return -1;
jbradshaw 1:9490836294ea 208 }
jbradshaw 0:e4a10ed6eb92 209 return 0;
jbradshaw 0:e4a10ed6eb92 210 }
jbradshaw 0:e4a10ed6eb92 211
jbradshaw 0:e4a10ed6eb92 212 //******************************************************************************
jbradshaw 1:9490836294ea 213 int BMP280::reg_read(BMP280_REG_map_t reg, char *value, char number) {
jbradshaw 1:9490836294ea 214
jbradshaw 0:e4a10ed6eb92 215 int result;
jbradshaw 0:e4a10ed6eb92 216 char cmdData[1] = {(char)reg};
jbradshaw 0:e4a10ed6eb92 217
jbradshaw 0:e4a10ed6eb92 218 result = i2c->write(slaveAddress, cmdData, 1);
jbradshaw 1:9490836294ea 219 if (result != 0) {
jbradshaw 0:e4a10ed6eb92 220 return -1;
jbradshaw 1:9490836294ea 221 }
jbradshaw 0:e4a10ed6eb92 222 result = i2c->read(slaveAddress, value, number);
jbradshaw 1:9490836294ea 223 if (result != 0) {
jbradshaw 0:e4a10ed6eb92 224 return -1;
jbradshaw 1:9490836294ea 225 }
jbradshaw 0:e4a10ed6eb92 226 return 0;
jbradshaw 0:e4a10ed6eb92 227 }
jbradshaw 0:e4a10ed6eb92 228
jbradshaw 0:e4a10ed6eb92 229 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 230 int BMP280::Sleep(void) {
jbradshaw 1:9490836294ea 231
jbradshaw 1:9490836294ea 232 bmp280_ctrl_meas_t ctrl_meas;
jbradshaw 0:e4a10ed6eb92 233
jbradshaw 1:9490836294ea 234 if (reg_read(BMP280_CTRL_MEAS, &ctrl_meas.all, 1) != 0) {
jbradshaw 0:e4a10ed6eb92 235 return -1;
jbradshaw 0:e4a10ed6eb92 236 }
jbradshaw 1:9490836294ea 237 ctrl_meas.bit.mode = 0b00; // put everything to sleep mode...
jbradshaw 0:e4a10ed6eb92 238
jbradshaw 1:9490836294ea 239 if (reg_write(BMP280_CTRL_MEAS, ctrl_meas.all) != 0) {
jbradshaw 0:e4a10ed6eb92 240 return -1;
jbradshaw 0:e4a10ed6eb92 241 }
jbradshaw 0:e4a10ed6eb92 242 return 0;
jbradshaw 0:e4a10ed6eb92 243 }
jbradshaw 0:e4a10ed6eb92 244
jbradshaw 0:e4a10ed6eb92 245 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 246 void BMP280::Reset(void) {
jbradshaw 1:9490836294ea 247
jbradshaw 0:e4a10ed6eb92 248 reg_write(BMP280_RESET, 0xB6); // Initiate a Soft Reset
jbradshaw 0:e4a10ed6eb92 249 }
jbradshaw 0:e4a10ed6eb92 250
jbradshaw 0:e4a10ed6eb92 251 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 252 int BMP280::Detect(void) {
jbradshaw 1:9490836294ea 253
jbradshaw 0:e4a10ed6eb92 254 if (reg_read(BMP280_ID, &bmp280_id, 1) != 0) {
jbradshaw 0:e4a10ed6eb92 255 return -1;
jbradshaw 0:e4a10ed6eb92 256 }
jbradshaw 0:e4a10ed6eb92 257
jbradshaw 0:e4a10ed6eb92 258 if (bmp280_id == 0x58) {
jbradshaw 0:e4a10ed6eb92 259 return 1;
jbradshaw 0:e4a10ed6eb92 260 }
jbradshaw 0:e4a10ed6eb92 261 return 0;
jbradshaw 0:e4a10ed6eb92 262 }
jbradshaw 0:e4a10ed6eb92 263
jbradshaw 0:e4a10ed6eb92 264 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 265 int BMP280::ReadId(void) {
jbradshaw 1:9490836294ea 266
jbradshaw 0:e4a10ed6eb92 267 if (reg_read(BMP280_ID, &bmp280_id, 1) != 0) {
jbradshaw 0:e4a10ed6eb92 268 return -1;
jbradshaw 0:e4a10ed6eb92 269 }
jbradshaw 0:e4a10ed6eb92 270 return bmp280_id;
jbradshaw 0:e4a10ed6eb92 271 }
jbradshaw 0:e4a10ed6eb92 272
jbradshaw 0:e4a10ed6eb92 273 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 274 float BMP280::compensate_T_float(int32_t adc_T) {
jbradshaw 1:9490836294ea 275
jbradshaw 0:e4a10ed6eb92 276 float var1, var2, T;
jbradshaw 0:e4a10ed6eb92 277 var1 =
jbradshaw 1:9490836294ea 278 (((float)adc_T) / 16384.0f - ((float)dig_T1) / 1024.0f) * ((float)dig_T2);
jbradshaw 0:e4a10ed6eb92 279
jbradshaw 1:9490836294ea 280 var2 = ((((float)adc_T) / 131072.0f - ((float)dig_T1) / 8192.0f) *
jbradshaw 1:9490836294ea 281 (((float)adc_T) / 131072.0f - ((float)dig_T1) / 8192.0f)) *
jbradshaw 0:e4a10ed6eb92 282 ((float)dig_T3);
jbradshaw 0:e4a10ed6eb92 283
jbradshaw 0:e4a10ed6eb92 284 t_fine = (int32_t)(var1 + var2);
jbradshaw 0:e4a10ed6eb92 285
jbradshaw 1:9490836294ea 286 T = (var1 + var2) / 5120.0f;
jbradshaw 0:e4a10ed6eb92 287
jbradshaw 0:e4a10ed6eb92 288 return T;
jbradshaw 0:e4a10ed6eb92 289 }
jbradshaw 0:e4a10ed6eb92 290
jbradshaw 0:e4a10ed6eb92 291 //******************************************************************************
jbradshaw 0:e4a10ed6eb92 292 float BMP280::compensate_P_float(int32_t adc_P) {
jbradshaw 1:9490836294ea 293
jbradshaw 0:e4a10ed6eb92 294 float var1, var2, p;
jbradshaw 1:9490836294ea 295 var1 = ((float)t_fine / 2.0f) - 64000.0f;
jbradshaw 1:9490836294ea 296 var2 = var1 * var1 * ((float)dig_P6) / 32768.0f;
jbradshaw 1:9490836294ea 297 var2 = var2 + var1 * ((float)dig_P5) * 2.0f;
jbradshaw 1:9490836294ea 298 var2 = (var2 / 4.0f) + (((float)dig_P4) * 65536.0f);
jbradshaw 1:9490836294ea 299 var1 = (((float)dig_P3) * var1 * var1 / 524288.0f + ((float)dig_P2) * var1) / 524288.0f;
jbradshaw 1:9490836294ea 300 var1 = (1.0f + var1 / 32768.0f) * ((float)dig_P1);
jbradshaw 1:9490836294ea 301 if (var1 == 0.0f) {
jbradshaw 0:e4a10ed6eb92 302 return 0; // avoid exception caused by division by zero
jbradshaw 0:e4a10ed6eb92 303 }
jbradshaw 1:9490836294ea 304 p = 1048576.0f - (float)adc_P;
jbradshaw 1:9490836294ea 305 p = (p - (var2 / 4096.0f)) * 6250.0f / var1;
jbradshaw 1:9490836294ea 306 var1 = ((float)dig_P9) * p * p / 2147483648.0f;
jbradshaw 1:9490836294ea 307 var2 = p * ((float)dig_P8) / 32768.0f;
jbradshaw 1:9490836294ea 308 p = p + (var1 + var2 + ((float)dig_P7)) / 16.0f;
jbradshaw 0:e4a10ed6eb92 309 return p;
jbradshaw 0:e4a10ed6eb92 310 }