Fixed some I2C items to work on STM Nucleo F446RE

Committer:
dmwahl
Date:
Thu Aug 08 15:36:58 2019 +0000
Revision:
1:4fbdf7768530
Parent:
0:f33e95899738
Rewrote I2C related items from ykita's original code. Not sure if the original was tested or not, but I was getting compile errors for Nucleo boards.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ykita 0:f33e95899738 1 /* mbed MCP9600 Library, for the MCP9600 Thermocouple EMF to temperature Converter
ykita 0:f33e95899738 2 * Copyright (c) 2018, Yoshiteru Kita, ULVAC-PHI, INC.
ykita 0:f33e95899738 3 *
ykita 0:f33e95899738 4 * Permission is hereby granted, free of charge, to any person obtaining a copy
ykita 0:f33e95899738 5 * of this software and associated documentation files (the "Software"), to deal
ykita 0:f33e95899738 6 * in the Software without restriction, including without limitation the rights
ykita 0:f33e95899738 7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
ykita 0:f33e95899738 8 * copies of the Software, and to permit persons to whom the Software is
ykita 0:f33e95899738 9 * furnished to do so, subject to the following conditions:
ykita 0:f33e95899738 10 *
ykita 0:f33e95899738 11 * The above copyright notice and this permission notice shall be included in
ykita 0:f33e95899738 12 * all copies or substantial portions of the Software.
ykita 0:f33e95899738 13 *
ykita 0:f33e95899738 14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
ykita 0:f33e95899738 15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
ykita 0:f33e95899738 16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
ykita 0:f33e95899738 17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
ykita 0:f33e95899738 18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
ykita 0:f33e95899738 19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
ykita 0:f33e95899738 20 * THE SOFTWARE.
dmwahl 1:4fbdf7768530 21
dmwahl 1:4fbdf7768530 22 * Modified by David Wahl to work with STM Nucleo boards (tested on Nucleo F446RE). Rewrote I2C related items.
ykita 0:f33e95899738 23 */
dmwahl 1:4fbdf7768530 24
dmwahl 1:4fbdf7768530 25 #include "MCP9600.h"
dmwahl 1:4fbdf7768530 26 #include "mbed.h"
dmwahl 1:4fbdf7768530 27
ykita 0:f33e95899738 28 // Constructor with I2C instance and I2C Device Address of MCP9600
dmwahl 1:4fbdf7768530 29 MCP9600::MCP9600(I2C &i2c, int i2cAddress) : i2c(i2c), mi2cAddress(i2cAddress << 1)
dmwahl 1:4fbdf7768530 30 {
dmwahl 1:4fbdf7768530 31 //Mcp9600Addr = addr;
ykita 0:f33e95899738 32 }
ykita 0:f33e95899738 33
ykita 0:f33e95899738 34 // Destructor
dmwahl 1:4fbdf7768530 35 MCP9600::~MCP9600()
dmwahl 1:4fbdf7768530 36 {
ykita 0:f33e95899738 37 }
ykita 0:f33e95899738 38
ykita 0:f33e95899738 39 // Set I2C Device Address of MCP9600
dmwahl 1:4fbdf7768530 40 //void MCP9600::setAddress(char addr)
dmwahl 1:4fbdf7768530 41 //{
dmwahl 1:4fbdf7768530 42 // Mcp9600Addr = addr;
dmwahl 1:4fbdf7768530 43 //}
ykita 0:f33e95899738 44
ykita 0:f33e95899738 45 // Get I2C Device Address of this instance
dmwahl 1:4fbdf7768530 46 char MCP9600::getAddress(void)
dmwahl 1:4fbdf7768530 47 {
dmwahl 1:4fbdf7768530 48 return (mi2cAddress >> 1); // Return 7-bit address
ykita 0:f33e95899738 49 }
ykita 0:f33e95899738 50
ykita 0:f33e95899738 51 // Read Temperature from Temperature Register
ykita 0:f33e95899738 52 // tempRegister 0:TH / 1:Tdelta / 2: TC
ykita 0:f33e95899738 53 // Return value: temperature in float value (degree C)
ykita 0:f33e95899738 54 float MCP9600::readTempRegister( char tempRegister )
ykita 0:f33e95899738 55 {
ykita 0:f33e95899738 56 char data[2];
ykita 0:f33e95899738 57 float float_val;
ykita 0:f33e95899738 58
dmwahl 1:4fbdf7768530 59 i2c.write( mi2cAddress, &tempRegister, 1, 1);
dmwahl 1:4fbdf7768530 60
ykita 0:f33e95899738 61 // Read temp (data[0] for MSB, data[1] for LSB)
dmwahl 1:4fbdf7768530 62 i2c.read( mi2cAddress, &data[0], 1, 1 );
dmwahl 1:4fbdf7768530 63 i2c.read( mi2cAddress, &data[1], 1, 0 );
dmwahl 1:4fbdf7768530 64
ykita 0:f33e95899738 65 // Convert to real value
ykita 0:f33e95899738 66 if ((data[0] & 0x80) == 0x80) { // TH < 0
ykita 0:f33e95899738 67 data[0] = data[0] & 0x7F; // Clear Sign
ykita 0:f33e95899738 68 float_val = 2032.0f - (data[0] * 16.0f);
ykita 0:f33e95899738 69 float_val = float_val + (15.9375f - data[1] / 16.0f);
ykita 0:f33e95899738 70 float_val = float_val * (-1.0f);
dmwahl 1:4fbdf7768530 71 } else { // TH >= 0
ykita 0:f33e95899738 72 float_val = (data[0] * 16.0 + data[1] / 16.0);
ykita 0:f33e95899738 73 }
ykita 0:f33e95899738 74 return(float_val);
ykita 0:f33e95899738 75 }
ykita 0:f33e95899738 76
ykita 0:f33e95899738 77
ykita 0:f33e95899738 78 long MCP9600::readADCRegister(void)
ykita 0:f33e95899738 79 {
ykita 0:f33e95899738 80 char data[3];
ykita 0:f33e95899738 81 char adcRegister;
ykita 0:f33e95899738 82 long long_val;
ykita 0:f33e95899738 83
ykita 0:f33e95899738 84 adcRegister = 0x03;
dmwahl 1:4fbdf7768530 85 i2c.write( mi2cAddress, &adcRegister, 1, 1);
dmwahl 1:4fbdf7768530 86
ykita 0:f33e95899738 87 // Read ADC Register (data[0] for MSB, data[2] for LSB)
dmwahl 1:4fbdf7768530 88 i2c.read( mi2cAddress, &data[0], 1, 1 );
dmwahl 1:4fbdf7768530 89 i2c.read( mi2cAddress, &data[1], 1, 1 );
dmwahl 1:4fbdf7768530 90 i2c.read( mi2cAddress, &data[2], 1, 0 );
dmwahl 1:4fbdf7768530 91
ykita 0:f33e95899738 92 // Convert to long value
ykita 0:f33e95899738 93 long_val = data[0];
ykita 0:f33e95899738 94 long_val = long_val << 8;
ykita 0:f33e95899738 95 long_val = long_val + data[1];
ykita 0:f33e95899738 96 long_val = long_val << 8;
ykita 0:f33e95899738 97 long_val = long_val + data[2];
ykita 0:f33e95899738 98
ykita 0:f33e95899738 99 return(long_val);
ykita 0:f33e95899738 100 }
ykita 0:f33e95899738 101
ykita 0:f33e95899738 102
ykita 0:f33e95899738 103 char MCP9600::writeStatusRegister( char statRegister )
ykita 0:f33e95899738 104 {
ykita 0:f33e95899738 105 char data[2];
dmwahl 1:4fbdf7768530 106
ykita 0:f33e95899738 107 data[0] = 0x04;
ykita 0:f33e95899738 108 data[1] = statRegister;
dmwahl 1:4fbdf7768530 109
dmwahl 1:4fbdf7768530 110 i2c.write( mi2cAddress, data, 2, 1);
dmwahl 1:4fbdf7768530 111
ykita 0:f33e95899738 112 // Readbeck Status Register
dmwahl 1:4fbdf7768530 113 i2c.read( mi2cAddress, &data[0], 1, 0 );
ykita 0:f33e95899738 114
dmwahl 1:4fbdf7768530 115 return(data[0]);
ykita 0:f33e95899738 116 }
ykita 0:f33e95899738 117
ykita 0:f33e95899738 118
ykita 0:f33e95899738 119 char MCP9600::readStatusRegister( void )
ykita 0:f33e95899738 120 {
ykita 0:f33e95899738 121 char data;
ykita 0:f33e95899738 122
ykita 0:f33e95899738 123 data = 0x04;
dmwahl 1:4fbdf7768530 124 i2c.write( mi2cAddress, &data, 1, 0);
dmwahl 1:4fbdf7768530 125
ykita 0:f33e95899738 126 // Read Status Register
dmwahl 1:4fbdf7768530 127 i2c.read( mi2cAddress, &data, 1, 0 );
dmwahl 1:4fbdf7768530 128
ykita 0:f33e95899738 129 return(data);
dmwahl 1:4fbdf7768530 130
ykita 0:f33e95899738 131 }
ykita 0:f33e95899738 132
ykita 0:f33e95899738 133
ykita 0:f33e95899738 134 char MCP9600::writeSensorConfigRegister( char cnfgRegister )
ykita 0:f33e95899738 135 {
ykita 0:f33e95899738 136 char data[2];
dmwahl 1:4fbdf7768530 137
ykita 0:f33e95899738 138 data[0] = 0x05;
ykita 0:f33e95899738 139 data[1] = cnfgRegister;
dmwahl 1:4fbdf7768530 140
dmwahl 1:4fbdf7768530 141 i2c.write( mi2cAddress, data, 2, 1);
ykita 0:f33e95899738 142
ykita 0:f33e95899738 143 // Readback Sensor Configuration Register
dmwahl 1:4fbdf7768530 144 i2c.read( mi2cAddress, &data[0], 1, 0 );
ykita 0:f33e95899738 145
dmwahl 1:4fbdf7768530 146 return(data[0]);
ykita 0:f33e95899738 147 }
ykita 0:f33e95899738 148
ykita 0:f33e95899738 149
ykita 0:f33e95899738 150 char MCP9600::readSensorConfigRegister( void )
ykita 0:f33e95899738 151 {
ykita 0:f33e95899738 152 char data;
dmwahl 1:4fbdf7768530 153
ykita 0:f33e95899738 154 data = 0x05; // Device ID / Revision Register
dmwahl 1:4fbdf7768530 155 i2c.write( mi2cAddress, &data, 1, 1);
dmwahl 1:4fbdf7768530 156
dmwahl 1:4fbdf7768530 157 i2c.read( mi2cAddress, &data, 1, 0 );
dmwahl 1:4fbdf7768530 158
ykita 0:f33e95899738 159 return (data);
ykita 0:f33e95899738 160 }
ykita 0:f33e95899738 161
ykita 0:f33e95899738 162
ykita 0:f33e95899738 163 char MCP9600::writeDeviceConfigRegister( char cnfgRegister )
ykita 0:f33e95899738 164 {
ykita 0:f33e95899738 165 char data[2];
dmwahl 1:4fbdf7768530 166
ykita 0:f33e95899738 167 data[0] = 0x06;
ykita 0:f33e95899738 168 data[1] = cnfgRegister;
ykita 0:f33e95899738 169
dmwahl 1:4fbdf7768530 170
dmwahl 1:4fbdf7768530 171 i2c.write( mi2cAddress, data, 2, 1);
dmwahl 1:4fbdf7768530 172
ykita 0:f33e95899738 173 // Readback Device Configuration Register
dmwahl 1:4fbdf7768530 174 i2c.read( mi2cAddress, &data[0], 1, 0 );
ykita 0:f33e95899738 175
dmwahl 1:4fbdf7768530 176 return(data[0]);
ykita 0:f33e95899738 177 }
ykita 0:f33e95899738 178
ykita 0:f33e95899738 179
ykita 0:f33e95899738 180 char MCP9600::readDeviceConfigRegister( void )
ykita 0:f33e95899738 181 {
ykita 0:f33e95899738 182 char data;
ykita 0:f33e95899738 183
ykita 0:f33e95899738 184 data = 0x06;
dmwahl 1:4fbdf7768530 185 i2c.write( mi2cAddress, &data, 1, 1);
dmwahl 1:4fbdf7768530 186
ykita 0:f33e95899738 187 // Read Device Configuration Register
dmwahl 1:4fbdf7768530 188 i2c.read( mi2cAddress, &data, 1, 0 );
dmwahl 1:4fbdf7768530 189
ykita 0:f33e95899738 190 return(data);
dmwahl 1:4fbdf7768530 191
ykita 0:f33e95899738 192 }
ykita 0:f33e95899738 193
ykita 0:f33e95899738 194
ykita 0:f33e95899738 195 char MCP9600::writeAlertConfigRegister(char alertCH, char alertConfig)
ykita 0:f33e95899738 196 {
ykita 0:f33e95899738 197 // alertCH: Channel Number to set the configuration (1 to 4)
ykita 0:f33e95899738 198 // atertConfig:
ykita 0:f33e95899738 199 // bit7: Clear Interruput (1 to clear)
ykita 0:f33e95899738 200 // bit6: Not Used (0)
ykita 0:f33e95899738 201 // bit5: Not Used (0)
ykita 0:f33e95899738 202 // bit4: Alert for TH(0) or TC(1)
ykita 0:f33e95899738 203 // bit3: Alert for Rising(0) or Falling(1)
ykita 0:f33e95899738 204 // bit2: Active level (1:Active High / 0:Active Low)
ykita 0:f33e95899738 205 // bit1: Alert Mode (1: Intrrupt Mode / 0:Comparator Mode)
ykita 0:f33e95899738 206 // bit0: Alert Enable (1: Enable / 0: Disable)
ykita 0:f33e95899738 207 char data[2];
ykita 0:f33e95899738 208
ykita 0:f33e95899738 209 if ((alertCH > 0) && (alertCH < 5)) {
dmwahl 1:4fbdf7768530 210 data[0] = 0x07 + alertCH; // Alert Configuration Register
ykita 0:f33e95899738 211 data[1] = alertConfig; // Alert Configuration data
dmwahl 1:4fbdf7768530 212 i2c.write( mi2cAddress, data, 2, 1);
ykita 0:f33e95899738 213
ykita 0:f33e95899738 214 // Read register
dmwahl 1:4fbdf7768530 215 i2c.read( mi2cAddress, &data[0], 1, 0 );
dmwahl 1:4fbdf7768530 216 }
ykita 0:f33e95899738 217 return (data[0]);
ykita 0:f33e95899738 218 }
ykita 0:f33e95899738 219
ykita 0:f33e95899738 220
ykita 0:f33e95899738 221 char MCP9600::readAlertConfigRegister(char alertCH)
ykita 0:f33e95899738 222 {
ykita 0:f33e95899738 223 char data;
dmwahl 1:4fbdf7768530 224
ykita 0:f33e95899738 225 if ((alertCH > 0) && (alertCH < 5)) {
ykita 0:f33e95899738 226 data = 0x07 + alertCH; // Alert Configuration Register
dmwahl 1:4fbdf7768530 227 i2c.write( mi2cAddress, &data, 1, 1);
ykita 0:f33e95899738 228
dmwahl 1:4fbdf7768530 229 i2c.read( mi2cAddress, &data, 1, 0 );
dmwahl 1:4fbdf7768530 230 }
ykita 0:f33e95899738 231 return (data);
ykita 0:f33e95899738 232 }
ykita 0:f33e95899738 233
ykita 0:f33e95899738 234
ykita 0:f33e95899738 235 char MCP9600::writeAlertHisterisisRegister(char alertCH, char alertHist)
ykita 0:f33e95899738 236 {
ykita 0:f33e95899738 237 // alertCH: Channel Number to set the configuration (1 to 4)
ykita 0:f33e95899738 238 // atertHist:
ykita 0:f33e95899738 239 // bit7: 128 C
ykita 0:f33e95899738 240 // bit6: 64 C
ykita 0:f33e95899738 241 // bit5: 32 C
ykita 0:f33e95899738 242 // bit4: 16 C
ykita 0:f33e95899738 243 // bit3: 8 C
ykita 0:f33e95899738 244 // bit2: 4 C
ykita 0:f33e95899738 245 // bit1: 2 C
ykita 0:f33e95899738 246 // bit0: 1 C
ykita 0:f33e95899738 247 char data[2];
ykita 0:f33e95899738 248
ykita 0:f33e95899738 249 if ((alertCH > 0) && (alertCH < 5)) {
dmwahl 1:4fbdf7768530 250 data[0] = 0x0B + alertCH; // Alert Histerisis Register
ykita 0:f33e95899738 251 data[1] = alertHist; // Alert Histerisis data
dmwahl 1:4fbdf7768530 252 i2c.write( mi2cAddress, data, 2, 1);
ykita 0:f33e95899738 253
ykita 0:f33e95899738 254 // Read register
dmwahl 1:4fbdf7768530 255 i2c.read( mi2cAddress, &data[0], 1, 0 );
dmwahl 1:4fbdf7768530 256 }
ykita 0:f33e95899738 257 return (data[0]);
ykita 0:f33e95899738 258 }
ykita 0:f33e95899738 259
ykita 0:f33e95899738 260
ykita 0:f33e95899738 261 char MCP9600::readAlertHisterisisRegister(char alertCH)
ykita 0:f33e95899738 262 {
ykita 0:f33e95899738 263 char data;
dmwahl 1:4fbdf7768530 264
ykita 0:f33e95899738 265 if ((alertCH > 0) && (alertCH < 5)) {
ykita 0:f33e95899738 266 data = 0x0B + alertCH; // Alert Histerisis Register
dmwahl 1:4fbdf7768530 267 i2c.write( mi2cAddress, &data, 1, 1);
ykita 0:f33e95899738 268
dmwahl 1:4fbdf7768530 269 i2c.read( mi2cAddress, &data, 1, 0 );
dmwahl 1:4fbdf7768530 270 }
ykita 0:f33e95899738 271 return (data);
ykita 0:f33e95899738 272 }
ykita 0:f33e95899738 273
ykita 0:f33e95899738 274
ykita 0:f33e95899738 275 float MCP9600::writeAlertLimit_MCP9600(char alertCH, float alertLimit_val)
ykita 0:f33e95899738 276 {
ykita 0:f33e95899738 277 // alertCH: Channel Number to set the Histerisis (1 to 4)
ykita 0:f33e95899738 278 // atertLimitMSB
ykita 0:f33e95899738 279 // bit7: Sign (1:Negative / 0:Positive)
ykita 0:f33e95899738 280 // bit 6-0: Limit Value (x16)
ykita 0:f33e95899738 281 // atertLimitLSB
ykita 0:f33e95899738 282 // bit 7-2: Limit Value ( Div. 16)
ykita 0:f33e95899738 283 // bit 1-0: Not Used
dmwahl 1:4fbdf7768530 284
ykita 0:f33e95899738 285 char data[3];
ykita 0:f33e95899738 286 float float_val;
ykita 0:f33e95899738 287 char alertLimitMSB;
ykita 0:f33e95899738 288 char alertLimitLSB;
dmwahl 1:4fbdf7768530 289
ykita 0:f33e95899738 290 // Convert to 2 bytes
ykita 0:f33e95899738 291 if (alertLimit_val >= 0.0f) {
ykita 0:f33e95899738 292 alertLimitMSB = alertLimit_val / 16.0f;
ykita 0:f33e95899738 293 alertLimit_val = alertLimit_val - alertLimitMSB * 16.0f;
ykita 0:f33e95899738 294 alertLimitLSB = alertLimit_val * 16.0f;
dmwahl 1:4fbdf7768530 295 } else {
ykita 0:f33e95899738 296 alertLimit_val = alertLimit_val * (-1.0f);
ykita 0:f33e95899738 297 data[0] = alertLimit_val / 16.0f;
ykita 0:f33e95899738 298 alertLimitMSB = 1+ (2032.0f - alertLimit_val) / 16.0f;
ykita 0:f33e95899738 299 alertLimit_val = alertLimit_val - data[0] * 16.0f;
ykita 0:f33e95899738 300 alertLimit_val = 15.75f - alertLimit_val;
ykita 0:f33e95899738 301 alertLimitLSB = alertLimit_val * 16.0f;
ykita 0:f33e95899738 302 alertLimitMSB = alertLimitMSB | 0x80; // Set Sign Flag
ykita 0:f33e95899738 303 }
dmwahl 1:4fbdf7768530 304
dmwahl 1:4fbdf7768530 305 data[0] = 0x0F + alertCH; // Alert Limit Value Register
ykita 0:f33e95899738 306 data[1] = alertLimitMSB; // Alert Limit Value (MSB)
ykita 0:f33e95899738 307 data[2] = alertLimitLSB; // Alert Limit Value (LSB)
dmwahl 1:4fbdf7768530 308 i2c.write( mi2cAddress, data, 3, 1 );
ykita 0:f33e95899738 309
ykita 0:f33e95899738 310 // Read Register
dmwahl 1:4fbdf7768530 311 i2c.read( mi2cAddress, &data[1], 1, 1 );
dmwahl 1:4fbdf7768530 312 i2c.read( mi2cAddress, &data[0], 1, 0 );
ykita 0:f33e95899738 313
ykita 0:f33e95899738 314 // Convert to real value
ykita 0:f33e95899738 315 if ((data[1] & 0x80) == 0x80) { // Limit Value < 0
ykita 0:f33e95899738 316 data[1] = data[1] & 0x7F; // Clear Sign
ykita 0:f33e95899738 317 float_val = 2032.0f - (data[1] * 16.0f);
ykita 0:f33e95899738 318 float_val = float_val + (15.75f - data[0] / 16.0f);
ykita 0:f33e95899738 319 float_val = (-1.0f) * float_val;
dmwahl 1:4fbdf7768530 320 } else { // Limit Value >= 0
ykita 0:f33e95899738 321 float_val = (data[1] * 16.0 + data[0] / 16.0);
ykita 0:f33e95899738 322 }
ykita 0:f33e95899738 323 return(float_val);
ykita 0:f33e95899738 324 }
ykita 0:f33e95899738 325
ykita 0:f33e95899738 326
ykita 0:f33e95899738 327 float MCP9600::readAlertLimit_MCP9600(char alertCH)
ykita 0:f33e95899738 328 {
ykita 0:f33e95899738 329 char data[2];
ykita 0:f33e95899738 330 float float_val;
ykita 0:f33e95899738 331
dmwahl 1:4fbdf7768530 332 data[0] = 0x0F + alertCH; // Alert Limit Value Register
dmwahl 1:4fbdf7768530 333 i2c.write( mi2cAddress, &data[0], 1, 1);
dmwahl 1:4fbdf7768530 334
ykita 0:f33e95899738 335 // Read register
dmwahl 1:4fbdf7768530 336 i2c.read( mi2cAddress, &data[1], 1, 1 );
dmwahl 1:4fbdf7768530 337 i2c.read( mi2cAddress, &data[0], 1, 0 );
dmwahl 1:4fbdf7768530 338
ykita 0:f33e95899738 339 // Convert to real value
ykita 0:f33e95899738 340 if ((data[1] & 0x80) == 0x80) { // Limit Value < 0
ykita 0:f33e95899738 341 data[1] = data[1] & 0x7F; // Clear Sign
ykita 0:f33e95899738 342 float_val = 2032.0 - (data[1] * 16.0);
ykita 0:f33e95899738 343 float_val = float_val - (15.75 - data[0] / 16.0);
dmwahl 1:4fbdf7768530 344 } else { // Limit Value >= 0
ykita 0:f33e95899738 345 float_val = (data[1] * 16.0 + data[0] / 16.0);
ykita 0:f33e95899738 346 }
ykita 0:f33e95899738 347 return(float_val);
ykita 0:f33e95899738 348 }
ykita 0:f33e95899738 349
ykita 0:f33e95899738 350
ykita 0:f33e95899738 351 char MCP9600::readIDRevisionRegister(void)
ykita 0:f33e95899738 352 {
ykita 0:f33e95899738 353 char data;
dmwahl 1:4fbdf7768530 354
ykita 0:f33e95899738 355 data = 0x20; // Device ID / Revision Register
dmwahl 1:4fbdf7768530 356 i2c.write( mi2cAddress, &data, 1, 1);
dmwahl 1:4fbdf7768530 357
dmwahl 1:4fbdf7768530 358 i2c.read( mi2cAddress, &data, 1, 0 );
dmwahl 1:4fbdf7768530 359
ykita 0:f33e95899738 360 return (data);
ykita 0:f33e95899738 361 }