TI HDC1000 Temperature and Humidity Sensor

Dependents:   test_HDC1000

Committer:
Rhyme
Date:
Tue Apr 18 02:44:57 2017 +0000
Revision:
2:f574cd898cba
Parent:
1:f2c04c5b28ab
Documentation writing started

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Rhyme 0:1db0d0071723 1 #include "mbed.h"
Rhyme 0:1db0d0071723 2 #include "HDC1000.h"
Rhyme 0:1db0d0071723 3
Rhyme 0:1db0d0071723 4 #define REG_TEMPERATURE 0x00
Rhyme 0:1db0d0071723 5 #define REG_HUMIDITY 0x01
Rhyme 0:1db0d0071723 6 #define REG_CONFIGURATION 0x02
Rhyme 0:1db0d0071723 7 #define REG_ID_FIRST_WORD 0xFB
Rhyme 0:1db0d0071723 8 #define REG_ID_SECOND_WORD 0xFC
Rhyme 0:1db0d0071723 9 #define REG_ID_LAST_BYTE 0xFD
Rhyme 0:1db0d0071723 10 #define REG_MANUFACTURE_ID 0xFE
Rhyme 0:1db0d0071723 11 #define REG_DEVICE_ID 0xFF
Rhyme 0:1db0d0071723 12
Rhyme 0:1db0d0071723 13 /* Bit field of Configuration register */
Rhyme 0:1db0d0071723 14 /* bit[15] RST Sowtware Rest Bit 0: Normal 1: Reset
Rhyme 0:1db0d0071723 15 * bit[14:13] (Reserved) must be 00
Rhyme 0:1db0d0071723 16 * bit[12] MODE 0:Aquire Temp/Hum separately(16bit each) 1:Aquire both Temp/Hum same time (32bit)
Rhyme 0:1db0d0071723 17 * bit[11] BTST Battery Test(?) 0:VDD > 2.8V 1:VDD < 2.8V
Rhyme 0:1db0d0071723 18 * bit[10] TRES Temperature Resolution 0:14bit 1:11bit
Rhyme 0:1db0d0071723 19 * bit[9:8] HRES Humidity Resolution 00:14bit 01:11bit 10:8bit
Rhyme 0:1db0d0071723 20 * bit[7:0] (Reserved) must be 00000000
Rhyme 0:1db0d0071723 21 */
Rhyme 0:1db0d0071723 22 #define BIT_RESET 0x8000
Rhyme 0:1db0d0071723 23 #define BIT_MODE 0x1000
Rhyme 0:1db0d0071723 24 #define BIT_BTST 0x0800
Rhyme 0:1db0d0071723 25 #define BIT_TRES 0x0400
Rhyme 0:1db0d0071723 26 #define BIT_HRES14 0x0000
Rhyme 0:1db0d0071723 27 #define BIT_HRES11 0x0100
Rhyme 0:1db0d0071723 28 #define BIT_HRES08 0x0200
Rhyme 0:1db0d0071723 29
Rhyme 2:f574cd898cba 30 #if USE_READY_PIN
Rhyme 0:1db0d0071723 31 HDC1000::HDC1000(PinName sda, PinName scl, PinName rdy, int addr) : m_i2c(sda, scl), m_rdy(rdy), m_addr(addr<<1) {
Rhyme 2:f574cd898cba 32 #else
Rhyme 2:f574cd898cba 33 HDC1000::HDC1000(PinName sda, PinName scl, int addr) : m_i2c(sda, scl), m_addr(addr<<1) {
Rhyme 2:f574cd898cba 34 #endif
Rhyme 0:1db0d0071723 35 // activate the peripheral
Rhyme 0:1db0d0071723 36 }
Rhyme 0:1db0d0071723 37
Rhyme 0:1db0d0071723 38 HDC1000::~HDC1000(void)
Rhyme 0:1db0d0071723 39 {
Rhyme 0:1db0d0071723 40 }
Rhyme 0:1db0d0071723 41
Rhyme 0:1db0d0071723 42 void HDC1000::reset(void)
Rhyme 0:1db0d0071723 43 {
Rhyme 0:1db0d0071723 44 uint16_t conf = 0x8000 ;
Rhyme 0:1db0d0071723 45 setConfig(conf) ;
Rhyme 0:1db0d0071723 46 }
Rhyme 0:1db0d0071723 47
Rhyme 1:f2c04c5b28ab 48 float HDC1000::u2f_temp(uint16_t utemp)
Rhyme 1:f2c04c5b28ab 49 {
Rhyme 1:f2c04c5b28ab 50 float ftemp ;
Rhyme 1:f2c04c5b28ab 51
Rhyme 1:f2c04c5b28ab 52 utemp = (utemp >> 2) & 0x3FFF ;
Rhyme 1:f2c04c5b28ab 53 // note: the data sheet suggests to use 0x10000 for denominator
Rhyme 1:f2c04c5b28ab 54 // but to allow 100% I chose 0xFFFF instead, I may be wrong
Rhyme 1:f2c04c5b28ab 55 ftemp = ((float)(utemp)/ (float)0x3FFF)*165.0 - 40.0 ;
Rhyme 1:f2c04c5b28ab 56 return( ftemp ) ;
Rhyme 1:f2c04c5b28ab 57 }
Rhyme 1:f2c04c5b28ab 58
Rhyme 1:f2c04c5b28ab 59 float HDC1000::u2f_hume(uint16_t uhume)
Rhyme 1:f2c04c5b28ab 60 {
Rhyme 1:f2c04c5b28ab 61 float fhume ;
Rhyme 1:f2c04c5b28ab 62 uhume = (uhume>>2) & 0x3FFF ;
Rhyme 1:f2c04c5b28ab 63
Rhyme 1:f2c04c5b28ab 64 // note: the data sheet suggests to use 0x10000 for denominator
Rhyme 1:f2c04c5b28ab 65 // but to allow 100% I chose 0xFFFF instead, I may be wrong
Rhyme 1:f2c04c5b28ab 66 fhume = ((float)(uhume) / (float)0x3FFF) * 100.0 ;
Rhyme 1:f2c04c5b28ab 67 return( fhume ) ;
Rhyme 1:f2c04c5b28ab 68 }
Rhyme 1:f2c04c5b28ab 69
Rhyme 0:1db0d0071723 70 float HDC1000::readTemperature(void)
Rhyme 0:1db0d0071723 71 {
Rhyme 0:1db0d0071723 72 uint16_t utemp, uhum ;
Rhyme 0:1db0d0071723 73 int mode ;
Rhyme 0:1db0d0071723 74 float ftemp ;
Rhyme 0:1db0d0071723 75
Rhyme 0:1db0d0071723 76 mode = getMode() ;
Rhyme 0:1db0d0071723 77 switch(mode) {
Rhyme 0:1db0d0071723 78 case 0: /* temp or hum can be acquired */
Rhyme 0:1db0d0071723 79 utemp = getTemperature() ;
Rhyme 0:1db0d0071723 80 break ;
Rhyme 0:1db0d0071723 81 case 1: /* temp and hum can be acquired */
Rhyme 0:1db0d0071723 82 getData(&utemp, &uhum) ;
Rhyme 0:1db0d0071723 83 break ;
Rhyme 0:1db0d0071723 84 default:
Rhyme 0:1db0d0071723 85 printf("Error: unexpected mode %d\n",mode) ;
Rhyme 0:1db0d0071723 86 break ;
Rhyme 0:1db0d0071723 87 }
Rhyme 1:f2c04c5b28ab 88
Rhyme 2:f574cd898cba 89 // printf("utemp = 0x%04X ", utemp) ;
Rhyme 1:f2c04c5b28ab 90 ftemp = u2f_temp(utemp) ;
Rhyme 0:1db0d0071723 91 return( ftemp ) ;
Rhyme 0:1db0d0071723 92 }
Rhyme 0:1db0d0071723 93
Rhyme 0:1db0d0071723 94 float HDC1000::readHumidity(void)
Rhyme 0:1db0d0071723 95 {
Rhyme 0:1db0d0071723 96 uint16_t utemp, uhume ;
Rhyme 0:1db0d0071723 97 int mode ;
Rhyme 1:f2c04c5b28ab 98 float fhume ;
Rhyme 0:1db0d0071723 99
Rhyme 0:1db0d0071723 100 mode = getMode() ;
Rhyme 0:1db0d0071723 101 switch(mode) {
Rhyme 0:1db0d0071723 102 case 0: /* temp or hum can be acquired */
Rhyme 0:1db0d0071723 103 uhume = getHumidity() ;
Rhyme 0:1db0d0071723 104 break ;
Rhyme 0:1db0d0071723 105 case 1: /* temp and hum can be acquired */
Rhyme 0:1db0d0071723 106 getData(&utemp, &uhume) ;
Rhyme 0:1db0d0071723 107 break ;
Rhyme 0:1db0d0071723 108 default:
Rhyme 0:1db0d0071723 109 printf("Error: unexpected mode %d\n",mode) ;
Rhyme 0:1db0d0071723 110 break ;
Rhyme 0:1db0d0071723 111 }
Rhyme 1:f2c04c5b28ab 112
Rhyme 2:f574cd898cba 113 // printf("uhume = 0x%04X\n", uhume) ;
Rhyme 1:f2c04c5b28ab 114 fhume = u2f_hume(uhume) ;
Rhyme 1:f2c04c5b28ab 115 return( fhume ) ;
Rhyme 0:1db0d0071723 116 }
Rhyme 0:1db0d0071723 117
Rhyme 0:1db0d0071723 118 void HDC1000::readData(float *ftemp, float *fhume)
Rhyme 0:1db0d0071723 119 {
Rhyme 0:1db0d0071723 120 uint16_t utemp, uhume ;
Rhyme 0:1db0d0071723 121 getData(&utemp, &uhume) ;
Rhyme 2:f574cd898cba 122 // printf("utemp: 0x%04X, uhume: 0x%04X\n", utemp, uhume) ;
Rhyme 1:f2c04c5b28ab 123 *ftemp = u2f_temp(utemp) ;
Rhyme 1:f2c04c5b28ab 124 *fhume = u2f_hume(uhume) ;
Rhyme 0:1db0d0071723 125 }
Rhyme 2:f574cd898cba 126
Rhyme 0:1db0d0071723 127 /* for mode 0 */
Rhyme 0:1db0d0071723 128 uint16_t HDC1000::getTemperature(void)
Rhyme 0:1db0d0071723 129 {
Rhyme 0:1db0d0071723 130 uint16_t temp ;
Rhyme 0:1db0d0071723 131 uint8_t data[2] ;
Rhyme 2:f574cd898cba 132 #if USE_READY_PIN
Rhyme 0:1db0d0071723 133 float delay ;
Rhyme 2:f574cd898cba 134 #endif
Rhyme 0:1db0d0071723 135 data[0] = REG_TEMPERATURE ;
Rhyme 0:1db0d0071723 136 data[1] = (m_addr << 1) | 0x01 ;
Rhyme 0:1db0d0071723 137 m_i2c.write(m_addr, (const char*)data, 2, true);
Rhyme 2:f574cd898cba 138
Rhyme 2:f574cd898cba 139 #if USE_READY_PIN
Rhyme 0:1db0d0071723 140 while(m_rdy == 1) { } /* wait for rdy */
Rhyme 2:f574cd898cba 141 #else
Rhyme 2:f574cd898cba 142 delay = getTDelay() ;
Rhyme 2:f574cd898cba 143 printf("Temp Delay = %.2f\n", delay) ;
Rhyme 2:f574cd898cba 144 wait_us(1000 * delay) ;
Rhyme 2:f574cd898cba 145 #endif
Rhyme 0:1db0d0071723 146
Rhyme 0:1db0d0071723 147 m_i2c.read(m_addr, (char *)data, 2);
Rhyme 0:1db0d0071723 148 temp = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 149 return( temp ) ;
Rhyme 0:1db0d0071723 150 }
Rhyme 0:1db0d0071723 151
Rhyme 0:1db0d0071723 152 uint16_t HDC1000::getHumidity(void)
Rhyme 0:1db0d0071723 153 {
Rhyme 0:1db0d0071723 154 uint16_t hume ;
Rhyme 0:1db0d0071723 155 uint8_t data[2] ;
Rhyme 2:f574cd898cba 156 #if USE_READY_PIN
Rhyme 0:1db0d0071723 157 float delay ;
Rhyme 2:f574cd898cba 158 #endif
Rhyme 2:f574cd898cba 159
Rhyme 0:1db0d0071723 160 data[0] = REG_HUMIDITY ;
Rhyme 0:1db0d0071723 161 data[1] = (m_addr << 1) | 0x01 ;
Rhyme 0:1db0d0071723 162 m_i2c.write(m_addr, (const char*)data, 2, true);
Rhyme 0:1db0d0071723 163
Rhyme 2:f574cd898cba 164 #if USE_READY_PIN
Rhyme 0:1db0d0071723 165 while(m_rdy == 1) { } /* wait for rdy */
Rhyme 2:f574cd898cba 166 #else
Rhyme 2:f574cd898cba 167 delay = getHDelay() ;
Rhyme 2:f574cd898cba 168 printf("Hume Delay = %.2f\n", delay) ;
Rhyme 2:f574cd898cba 169 wait_us(1000 * delay) ;
Rhyme 2:f574cd898cba 170 #endif
Rhyme 0:1db0d0071723 171
Rhyme 0:1db0d0071723 172 m_i2c.read(m_addr, (char *)data, 2);
Rhyme 0:1db0d0071723 173 hume = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 174 return( hume ) ;
Rhyme 0:1db0d0071723 175 }
Rhyme 0:1db0d0071723 176
Rhyme 0:1db0d0071723 177 /* for mode 1 */
Rhyme 0:1db0d0071723 178 void HDC1000::getData(uint16_t *temp, uint16_t *hume)
Rhyme 0:1db0d0071723 179 {
Rhyme 0:1db0d0071723 180 uint8_t data[4] = { 0, 0, 0, 0 } ;
Rhyme 0:1db0d0071723 181 int mode ;
Rhyme 2:f574cd898cba 182 #if USE_READY_PIN
Rhyme 2:f574cd898cba 183 float delay ;
Rhyme 2:f574cd898cba 184 #endif
Rhyme 0:1db0d0071723 185
Rhyme 0:1db0d0071723 186 mode = getMode() ;
Rhyme 0:1db0d0071723 187 if (mode == 0) {
Rhyme 0:1db0d0071723 188 *temp = getTemperature() ;
Rhyme 0:1db0d0071723 189 *hume = getHumidity() ;
Rhyme 0:1db0d0071723 190 } else { /* mode == 1 */
Rhyme 0:1db0d0071723 191 data[0] = REG_TEMPERATURE ;
Rhyme 0:1db0d0071723 192 data[1] = (m_addr << 1) | 0x01 ;
Rhyme 0:1db0d0071723 193 m_i2c.write(m_addr,(const char *)data, 2, false);
Rhyme 2:f574cd898cba 194 #if USE_READY_PIN
Rhyme 0:1db0d0071723 195 while(m_rdy == 1) { } /* wait for rdy */
Rhyme 2:f574cd898cba 196 #else
Rhyme 2:f574cd898cba 197 delay = getTDelay() + getHDelay() ;
Rhyme 2:f574cd898cba 198 printf("Delay = %.2f ms\n", delay) ;
Rhyme 2:f574cd898cba 199 wait( delay / 1000.0 ) ;
Rhyme 2:f574cd898cba 200 #endif
Rhyme 0:1db0d0071723 201 m_i2c.read(m_addr, (char *)data, 4);
Rhyme 0:1db0d0071723 202 *temp = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 203 *hume = (data[2] << 8) | data[3] ;
Rhyme 0:1db0d0071723 204 }
Rhyme 0:1db0d0071723 205 }
Rhyme 0:1db0d0071723 206
Rhyme 0:1db0d0071723 207 void HDC1000::setConfig(uint16_t conf)
Rhyme 0:1db0d0071723 208 {
Rhyme 0:1db0d0071723 209 uint8_t data[3] ;
Rhyme 0:1db0d0071723 210 data[0] = REG_CONFIGURATION ;
Rhyme 0:1db0d0071723 211 data[1] = (conf >> 8) & 0xFF ;
Rhyme 0:1db0d0071723 212 data[2] = conf & 0xFF ;
Rhyme 0:1db0d0071723 213 writeRegs(data, 3) ;
Rhyme 0:1db0d0071723 214 }
Rhyme 0:1db0d0071723 215
Rhyme 0:1db0d0071723 216 uint16_t HDC1000::getConfig(void)
Rhyme 0:1db0d0071723 217 {
Rhyme 0:1db0d0071723 218 uint8_t data[2] ;
Rhyme 0:1db0d0071723 219 uint16_t conf ;
Rhyme 0:1db0d0071723 220 readRegs(REG_CONFIGURATION, data, 2) ;
Rhyme 0:1db0d0071723 221 conf = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 222 return( conf ) ;
Rhyme 0:1db0d0071723 223 }
Rhyme 0:1db0d0071723 224
Rhyme 0:1db0d0071723 225 void HDC1000::setMode(int mode)
Rhyme 0:1db0d0071723 226 {
Rhyme 0:1db0d0071723 227 uint16_t conf ;
Rhyme 0:1db0d0071723 228 conf = getConfig() ;
Rhyme 0:1db0d0071723 229 if (mode) {
Rhyme 0:1db0d0071723 230 conf |= BIT_MODE ;
Rhyme 0:1db0d0071723 231 } else {
Rhyme 0:1db0d0071723 232 conf ^= BIT_MODE ;
Rhyme 0:1db0d0071723 233 }
Rhyme 0:1db0d0071723 234 setConfig( conf ) ;
Rhyme 0:1db0d0071723 235 }
Rhyme 0:1db0d0071723 236
Rhyme 0:1db0d0071723 237 int HDC1000::getMode(void)
Rhyme 0:1db0d0071723 238 {
Rhyme 0:1db0d0071723 239 uint16_t conf ;
Rhyme 0:1db0d0071723 240 int mode ;
Rhyme 0:1db0d0071723 241 conf = getConfig() ;
Rhyme 0:1db0d0071723 242 if (conf & BIT_MODE) {
Rhyme 0:1db0d0071723 243 mode = 1 ;
Rhyme 0:1db0d0071723 244 } else {
Rhyme 0:1db0d0071723 245 mode = 0 ;
Rhyme 0:1db0d0071723 246 }
Rhyme 0:1db0d0071723 247 return( mode ) ;
Rhyme 0:1db0d0071723 248 }
Rhyme 0:1db0d0071723 249
Rhyme 0:1db0d0071723 250 void HDC1000::setTres(int tres)
Rhyme 0:1db0d0071723 251 {
Rhyme 0:1db0d0071723 252 uint16_t conf ;
Rhyme 0:1db0d0071723 253 conf = getConfig() ;
Rhyme 0:1db0d0071723 254 if (tres) {
Rhyme 0:1db0d0071723 255 conf |= BIT_TRES ;
Rhyme 0:1db0d0071723 256 } else {
Rhyme 0:1db0d0071723 257 conf ^= BIT_TRES ;
Rhyme 0:1db0d0071723 258 }
Rhyme 0:1db0d0071723 259 }
Rhyme 0:1db0d0071723 260
Rhyme 0:1db0d0071723 261 int HDC1000::getTres(void)
Rhyme 0:1db0d0071723 262 {
Rhyme 0:1db0d0071723 263 uint16_t conf ;
Rhyme 0:1db0d0071723 264 int tres ;
Rhyme 0:1db0d0071723 265 conf = getConfig() ;
Rhyme 0:1db0d0071723 266 if (conf & BIT_TRES) {
Rhyme 0:1db0d0071723 267 tres = 1 ;
Rhyme 0:1db0d0071723 268 } else {
Rhyme 0:1db0d0071723 269 tres = 0 ;
Rhyme 0:1db0d0071723 270 }
Rhyme 0:1db0d0071723 271 return( tres ) ;
Rhyme 0:1db0d0071723 272 }
Rhyme 0:1db0d0071723 273
Rhyme 0:1db0d0071723 274 void HDC1000::setHres(int hres)
Rhyme 0:1db0d0071723 275 {
Rhyme 0:1db0d0071723 276 uint16_t conf ;
Rhyme 0:1db0d0071723 277 conf = getConfig() ;
Rhyme 0:1db0d0071723 278 conf ^= (BIT_HRES11 | BIT_HRES08) ;
Rhyme 0:1db0d0071723 279 conf |= ((hres & 0x03) << 8) ;
Rhyme 0:1db0d0071723 280 }
Rhyme 0:1db0d0071723 281
Rhyme 0:1db0d0071723 282 int HDC1000::getHres(void)
Rhyme 0:1db0d0071723 283 {
Rhyme 0:1db0d0071723 284 uint16_t conf ;
Rhyme 0:1db0d0071723 285 int hres ;
Rhyme 0:1db0d0071723 286 conf = getConfig() ;
Rhyme 0:1db0d0071723 287 hres = (conf >> 8)&0x03 ;
Rhyme 0:1db0d0071723 288 return( hres ) ;
Rhyme 0:1db0d0071723 289 }
Rhyme 0:1db0d0071723 290
Rhyme 0:1db0d0071723 291 void HDC1000::getSerialID(uint8_t data[])
Rhyme 0:1db0d0071723 292 {
Rhyme 0:1db0d0071723 293 uint8_t udata[2] ;
Rhyme 0:1db0d0071723 294 readRegs(REG_ID_FIRST_WORD, &data[0], 2) ;
Rhyme 0:1db0d0071723 295 readRegs(REG_ID_SECOND_WORD, &data[2], 2) ;
Rhyme 0:1db0d0071723 296 readRegs(REG_ID_LAST_BYTE, udata, 2) ;
Rhyme 0:1db0d0071723 297 data[4] = udata[0] ;
Rhyme 0:1db0d0071723 298 }
Rhyme 0:1db0d0071723 299
Rhyme 0:1db0d0071723 300 uint16_t HDC1000::getManufactureID(void) /* 0x5449 : Texas Instruments */
Rhyme 0:1db0d0071723 301 {
Rhyme 0:1db0d0071723 302 uint8_t data[2] ;
Rhyme 0:1db0d0071723 303 uint16_t id ;
Rhyme 0:1db0d0071723 304 readRegs(REG_MANUFACTURE_ID, data, 2) ;
Rhyme 0:1db0d0071723 305 id = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 306 return( id ) ;
Rhyme 0:1db0d0071723 307 }
Rhyme 0:1db0d0071723 308
Rhyme 0:1db0d0071723 309 uint16_t HDC1000::getDeviceID(void) /* 0x1000 */
Rhyme 0:1db0d0071723 310 {
Rhyme 0:1db0d0071723 311 uint8_t data[2] ;
Rhyme 0:1db0d0071723 312 uint16_t id ;
Rhyme 0:1db0d0071723 313 readRegs(REG_DEVICE_ID, data, 2) ;
Rhyme 0:1db0d0071723 314 id = (data[0] << 8) | data[1] ;
Rhyme 0:1db0d0071723 315 return( id ) ;
Rhyme 0:1db0d0071723 316 }
Rhyme 0:1db0d0071723 317
Rhyme 0:1db0d0071723 318 float HDC1000::getTDelay(void)
Rhyme 0:1db0d0071723 319 {
Rhyme 0:1db0d0071723 320 int tres ;
Rhyme 0:1db0d0071723 321 float tdelay ;
Rhyme 0:1db0d0071723 322
Rhyme 0:1db0d0071723 323 tres = getTres() ;
Rhyme 0:1db0d0071723 324 switch(tres) {
Rhyme 0:1db0d0071723 325 case 0: /* 14bit */
Rhyme 0:1db0d0071723 326 tdelay = 6.35 ;
Rhyme 0:1db0d0071723 327 break ;
Rhyme 0:1db0d0071723 328 case 1: /* 11bit */
Rhyme 0:1db0d0071723 329 tdelay = 3.65 ;
Rhyme 0:1db0d0071723 330 break ;
Rhyme 0:1db0d0071723 331 default:
Rhyme 0:1db0d0071723 332 tdelay = 6.35 ;
Rhyme 0:1db0d0071723 333 break ;
Rhyme 0:1db0d0071723 334 }
Rhyme 0:1db0d0071723 335 return(tdelay) ;
Rhyme 0:1db0d0071723 336 }
Rhyme 0:1db0d0071723 337
Rhyme 0:1db0d0071723 338 float HDC1000::getHDelay(void)
Rhyme 0:1db0d0071723 339 {
Rhyme 0:1db0d0071723 340 int hres ;
Rhyme 0:1db0d0071723 341 float hdelay ;
Rhyme 0:1db0d0071723 342
Rhyme 0:1db0d0071723 343 hres = getHres() ;
Rhyme 0:1db0d0071723 344 switch(hres) {
Rhyme 0:1db0d0071723 345 case 0: /* 14bit */
Rhyme 0:1db0d0071723 346 hdelay = 6.5 ;
Rhyme 0:1db0d0071723 347 break ;
Rhyme 0:1db0d0071723 348 case 1: /* 11bit */
Rhyme 0:1db0d0071723 349 hdelay = 3.85 ;
Rhyme 0:1db0d0071723 350 break ;
Rhyme 0:1db0d0071723 351 case 2: /* 8bit */
Rhyme 0:1db0d0071723 352 hdelay = 2.5 ;
Rhyme 0:1db0d0071723 353 break ;
Rhyme 0:1db0d0071723 354 default:
Rhyme 0:1db0d0071723 355 hdelay = 6.5 ; /* let's use the longest value */
Rhyme 0:1db0d0071723 356 break ;
Rhyme 0:1db0d0071723 357 }
Rhyme 0:1db0d0071723 358 return(hdelay) ;
Rhyme 0:1db0d0071723 359 }
Rhyme 0:1db0d0071723 360
Rhyme 0:1db0d0071723 361 float HDC1000::getDelay(void)
Rhyme 0:1db0d0071723 362 {
Rhyme 0:1db0d0071723 363 float tdelay, hdelay ;
Rhyme 0:1db0d0071723 364 tdelay = getTDelay() ;
Rhyme 0:1db0d0071723 365 hdelay = getHDelay() ;
Rhyme 0:1db0d0071723 366 return( tdelay + hdelay ) ;
Rhyme 0:1db0d0071723 367 }
Rhyme 0:1db0d0071723 368
Rhyme 0:1db0d0071723 369 void HDC1000::readRegs(int addr, uint8_t * data, int len) {
Rhyme 0:1db0d0071723 370 char t[1] = {addr};
Rhyme 0:1db0d0071723 371 m_i2c.write(m_addr, t, 1, true);
Rhyme 0:1db0d0071723 372 m_i2c.read(m_addr, (char *)data, len) ;
Rhyme 0:1db0d0071723 373 }
Rhyme 0:1db0d0071723 374
Rhyme 0:1db0d0071723 375 void HDC1000::writeRegs(uint8_t * data, int len) {
Rhyme 0:1db0d0071723 376 m_i2c.write(m_addr, (char *)data, len);
Rhyme 0:1db0d0071723 377 }