AD7190

Dependencies:   mbed

Committer:
peng103617
Date:
Thu Aug 06 06:51:32 2020 +0000
Revision:
0:e74e2fd7a61e
AD7190

Who changed what in which revision?

UserRevisionLine numberNew contents of line
peng103617 0:e74e2fd7a61e 1 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 2 * @file AD7190.c
peng103617 0:e74e2fd7a61e 3 * @brief Implementation of AD7190 Driver.
peng103617 0:e74e2fd7a61e 4 * @author DNechita (Dan.Nechita@analog.com)
peng103617 0:e74e2fd7a61e 5 ********************************************************************************
peng103617 0:e74e2fd7a61e 6 * Copyright 2012(c) Analog Devices, Inc.
peng103617 0:e74e2fd7a61e 7 *
peng103617 0:e74e2fd7a61e 8 * All rights reserved.
peng103617 0:e74e2fd7a61e 9 *
peng103617 0:e74e2fd7a61e 10 * Redistribution and use in source and binary forms, with or without
peng103617 0:e74e2fd7a61e 11 * modification, are permitted provided that the following conditions are met:
peng103617 0:e74e2fd7a61e 12 * - Redistributions of source code must retain the above copyright
peng103617 0:e74e2fd7a61e 13 * notice, this list of conditions and the following disclaimer.
peng103617 0:e74e2fd7a61e 14 * - Redistributions in binary form must reproduce the above copyright
peng103617 0:e74e2fd7a61e 15 * notice, this list of conditions and the following disclaimer in
peng103617 0:e74e2fd7a61e 16 * the documentation and/or other materials provided with the
peng103617 0:e74e2fd7a61e 17 * distribution.
peng103617 0:e74e2fd7a61e 18 * - Neither the name of Analog Devices, Inc. nor the names of its
peng103617 0:e74e2fd7a61e 19 * contributors may be used to endorse or promote products derived
peng103617 0:e74e2fd7a61e 20 * from this software without specific prior written permission.
peng103617 0:e74e2fd7a61e 21 * - The use of this software may or may not infringe the patent rights
peng103617 0:e74e2fd7a61e 22 * of one or more patent holders. This license does not release you
peng103617 0:e74e2fd7a61e 23 * from the requirement that you obtain separate licenses from these
peng103617 0:e74e2fd7a61e 24 * patent holders to use this software.
peng103617 0:e74e2fd7a61e 25 * - Use of the software either in source or binary form, must be run
peng103617 0:e74e2fd7a61e 26 * on or directly connected to an Analog Devices Inc. component.
peng103617 0:e74e2fd7a61e 27 *
peng103617 0:e74e2fd7a61e 28 * THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
peng103617 0:e74e2fd7a61e 29 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
peng103617 0:e74e2fd7a61e 30 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
peng103617 0:e74e2fd7a61e 31 * IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
peng103617 0:e74e2fd7a61e 32 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
peng103617 0:e74e2fd7a61e 33 * LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
peng103617 0:e74e2fd7a61e 34 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
peng103617 0:e74e2fd7a61e 35 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
peng103617 0:e74e2fd7a61e 36 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
peng103617 0:e74e2fd7a61e 37 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
peng103617 0:e74e2fd7a61e 38 *
peng103617 0:e74e2fd7a61e 39 ********************************************************************************
peng103617 0:e74e2fd7a61e 40 * SVN Revision: 903
peng103617 0:e74e2fd7a61e 41 *******************************************************************************/
peng103617 0:e74e2fd7a61e 42
peng103617 0:e74e2fd7a61e 43 /******************************************************************************/
peng103617 0:e74e2fd7a61e 44 /***************************** Include Files **********************************/
peng103617 0:e74e2fd7a61e 45 /******************************************************************************/
peng103617 0:e74e2fd7a61e 46 #include "AD7190.h" // AD7190 definitions.
peng103617 0:e74e2fd7a61e 47 #include "TIME_AD.h" // TIME definitions.
peng103617 0:e74e2fd7a61e 48
peng103617 0:e74e2fd7a61e 49 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 50 * @brief Writes data into a register.
peng103617 0:e74e2fd7a61e 51 *
peng103617 0:e74e2fd7a61e 52 * @param registerAddress - Address of the register.
peng103617 0:e74e2fd7a61e 53 * @param registerValue - Data value to write.
peng103617 0:e74e2fd7a61e 54 * @param bytesNumber - Number of bytes to be written.
peng103617 0:e74e2fd7a61e 55 *
peng103617 0:e74e2fd7a61e 56 * @return none.
peng103617 0:e74e2fd7a61e 57 *******************************************************************************/
peng103617 0:e74e2fd7a61e 58 void AD7190_SetRegisterValue(unsigned char registerAddress,
peng103617 0:e74e2fd7a61e 59 unsigned long registerValue,
peng103617 0:e74e2fd7a61e 60 unsigned char bytesNumber)
peng103617 0:e74e2fd7a61e 61 {
peng103617 0:e74e2fd7a61e 62 unsigned char writeCommand[5] = {0, 0, 0, 0, 0};
peng103617 0:e74e2fd7a61e 63 unsigned char* dataPointer = (unsigned char*)&registerValue;
peng103617 0:e74e2fd7a61e 64 unsigned char bytesNr = bytesNumber;
peng103617 0:e74e2fd7a61e 65
peng103617 0:e74e2fd7a61e 66 writeCommand[0] = AD7190_COMM_WRITE |
peng103617 0:e74e2fd7a61e 67 AD7190_COMM_ADDR(registerAddress);
peng103617 0:e74e2fd7a61e 68 while(bytesNr > 0)
peng103617 0:e74e2fd7a61e 69 {
peng103617 0:e74e2fd7a61e 70 writeCommand[bytesNr] = *dataPointer;
peng103617 0:e74e2fd7a61e 71 dataPointer ++;
peng103617 0:e74e2fd7a61e 72 bytesNr --;
peng103617 0:e74e2fd7a61e 73 }
peng103617 0:e74e2fd7a61e 74 SPI_Write(writeCommand, bytesNumber + 1);
peng103617 0:e74e2fd7a61e 75 }
peng103617 0:e74e2fd7a61e 76
peng103617 0:e74e2fd7a61e 77 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 78 * @brief Reads the value of a register.
peng103617 0:e74e2fd7a61e 79 *
peng103617 0:e74e2fd7a61e 80 * @param registerAddress - Address of the register.
peng103617 0:e74e2fd7a61e 81 * @param bytesNumber - Number of bytes that will be read.
peng103617 0:e74e2fd7a61e 82 *
peng103617 0:e74e2fd7a61e 83 * @return buffer - Value of the register.
peng103617 0:e74e2fd7a61e 84 *******************************************************************************/
peng103617 0:e74e2fd7a61e 85 unsigned long AD7190_GetRegisterValue(unsigned char registerAddress,
peng103617 0:e74e2fd7a61e 86 unsigned char bytesNumber)
peng103617 0:e74e2fd7a61e 87 {
peng103617 0:e74e2fd7a61e 88 cs.write(0);
peng103617 0:e74e2fd7a61e 89 unsigned char registerWord[5] = {0, 0, 0, 0, 0};
peng103617 0:e74e2fd7a61e 90 unsigned long buffer = 0x0;
peng103617 0:e74e2fd7a61e 91 unsigned char i = 0;
peng103617 0:e74e2fd7a61e 92
peng103617 0:e74e2fd7a61e 93 registerWord[0] = AD7190_COMM_READ |
peng103617 0:e74e2fd7a61e 94 AD7190_COMM_ADDR(registerAddress);
peng103617 0:e74e2fd7a61e 95 SPI_Read(registerWord, bytesNumber + 1);
peng103617 0:e74e2fd7a61e 96 for(i = 1; i < bytesNumber + 1; i++)
peng103617 0:e74e2fd7a61e 97 {
peng103617 0:e74e2fd7a61e 98 buffer = (buffer << 8) + registerWord[i];
peng103617 0:e74e2fd7a61e 99 }
peng103617 0:e74e2fd7a61e 100 //cs.write(1);
peng103617 0:e74e2fd7a61e 101 return buffer;
peng103617 0:e74e2fd7a61e 102 }
peng103617 0:e74e2fd7a61e 103
peng103617 0:e74e2fd7a61e 104 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 105 * @brief Checks if the AD7190 part is present.
peng103617 0:e74e2fd7a61e 106 *
peng103617 0:e74e2fd7a61e 107 * @return status - Indicates if the part is present or not. 1 for ok , 0 for error
peng103617 0:e74e2fd7a61e 108 *******************************************************************************/
peng103617 0:e74e2fd7a61e 109 unsigned char AD7190_Init(unsigned int speed)
peng103617 0:e74e2fd7a61e 110 {
peng103617 0:e74e2fd7a61e 111 unsigned char status = 1;
peng103617 0:e74e2fd7a61e 112 unsigned char regVal = 0;
peng103617 0:e74e2fd7a61e 113
peng103617 0:e74e2fd7a61e 114
peng103617 0:e74e2fd7a61e 115 SPI_Init(0, (unsigned long) 1000*speed, 1, 0);
peng103617 0:e74e2fd7a61e 116
peng103617 0:e74e2fd7a61e 117 AD7190_Reset();
peng103617 0:e74e2fd7a61e 118 /* Allow at least 500 us before accessing any of the on-chip registers. */
peng103617 0:e74e2fd7a61e 119 TIME_DelayMs(1);
peng103617 0:e74e2fd7a61e 120 regVal = AD7190_GetRegisterValue(AD7190_REG_ID, 1);
peng103617 0:e74e2fd7a61e 121 if( (regVal & AD7190_ID_MASK) != ID_AD7190)
peng103617 0:e74e2fd7a61e 122 {
peng103617 0:e74e2fd7a61e 123 status = 0;
peng103617 0:e74e2fd7a61e 124 }
peng103617 0:e74e2fd7a61e 125 return status ;
peng103617 0:e74e2fd7a61e 126 }
peng103617 0:e74e2fd7a61e 127
peng103617 0:e74e2fd7a61e 128 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 129 * @brief Resets the device.
peng103617 0:e74e2fd7a61e 130 *
peng103617 0:e74e2fd7a61e 131 * @return none.
peng103617 0:e74e2fd7a61e 132 *******************************************************************************/
peng103617 0:e74e2fd7a61e 133 void AD7190_Reset(void)
peng103617 0:e74e2fd7a61e 134 {
peng103617 0:e74e2fd7a61e 135 unsigned char registerWord[7];
peng103617 0:e74e2fd7a61e 136
peng103617 0:e74e2fd7a61e 137 registerWord[0] = 0x01;
peng103617 0:e74e2fd7a61e 138 registerWord[1] = 0xFF;
peng103617 0:e74e2fd7a61e 139 registerWord[2] = 0xFF;
peng103617 0:e74e2fd7a61e 140 registerWord[3] = 0xFF;
peng103617 0:e74e2fd7a61e 141 registerWord[4] = 0xFF;
peng103617 0:e74e2fd7a61e 142 registerWord[5] = 0xFF;
peng103617 0:e74e2fd7a61e 143 registerWord[6] = 0xFF;
peng103617 0:e74e2fd7a61e 144 cs.write(1);
peng103617 0:e74e2fd7a61e 145 SPI_Write(registerWord, 7);
peng103617 0:e74e2fd7a61e 146 cs.write(0);
peng103617 0:e74e2fd7a61e 147 AD7190_WaitRdyGoLow();
peng103617 0:e74e2fd7a61e 148 }
peng103617 0:e74e2fd7a61e 149
peng103617 0:e74e2fd7a61e 150 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 151 * @brief Set device to idle or power-down.
peng103617 0:e74e2fd7a61e 152 *
peng103617 0:e74e2fd7a61e 153 * @param pwrMode - Selects idle mode or power-down mode.
peng103617 0:e74e2fd7a61e 154 * Example: 0 - power-down
peng103617 0:e74e2fd7a61e 155 * 1 - idle
peng103617 0:e74e2fd7a61e 156 *
peng103617 0:e74e2fd7a61e 157 * @return none.
peng103617 0:e74e2fd7a61e 158 *******************************************************************************/
peng103617 0:e74e2fd7a61e 159 void AD7190_SetPower(unsigned char pwrMode)
peng103617 0:e74e2fd7a61e 160 {
peng103617 0:e74e2fd7a61e 161 unsigned long oldPwrMode = 0x0;
peng103617 0:e74e2fd7a61e 162 unsigned long newPwrMode = 0x0;
peng103617 0:e74e2fd7a61e 163
peng103617 0:e74e2fd7a61e 164 oldPwrMode = AD7190_GetRegisterValue(AD7190_REG_MODE, 3);
peng103617 0:e74e2fd7a61e 165 oldPwrMode &= ~(AD7190_MODE_SEL(0x7));
peng103617 0:e74e2fd7a61e 166 newPwrMode = oldPwrMode |
peng103617 0:e74e2fd7a61e 167 AD7190_MODE_SEL((pwrMode * (AD7190_MODE_IDLE)) |
peng103617 0:e74e2fd7a61e 168 (!pwrMode * (AD7190_MODE_PWRDN)));
peng103617 0:e74e2fd7a61e 169 AD7190_SetRegisterValue(AD7190_REG_MODE, newPwrMode, 3);
peng103617 0:e74e2fd7a61e 170 }
peng103617 0:e74e2fd7a61e 171
peng103617 0:e74e2fd7a61e 172 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 173 * @brief Waits for RDY pin to go low.
peng103617 0:e74e2fd7a61e 174 * @comment timeOutCnt related to CPU clock
peng103617 0:e74e2fd7a61e 175 * @return none.
peng103617 0:e74e2fd7a61e 176 *******************************************************************************/
peng103617 0:e74e2fd7a61e 177 void AD7190_WaitRdyGoLow(void)
peng103617 0:e74e2fd7a61e 178 {
peng103617 0:e74e2fd7a61e 179 unsigned long timeOutCnt = 0x4FFFF;
peng103617 0:e74e2fd7a61e 180
peng103617 0:e74e2fd7a61e 181 while(ad_rdy.read()==1 && timeOutCnt--);
peng103617 0:e74e2fd7a61e 182 //wait_us(500);
peng103617 0:e74e2fd7a61e 183 }
peng103617 0:e74e2fd7a61e 184
peng103617 0:e74e2fd7a61e 185 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 186 * @brief Selects the channel to be enabled.
peng103617 0:e74e2fd7a61e 187 *
peng103617 0:e74e2fd7a61e 188 * @param channel - Selects a channel.
peng103617 0:e74e2fd7a61e 189 *
peng103617 0:e74e2fd7a61e 190 * @return none.
peng103617 0:e74e2fd7a61e 191 *******************************************************************************/
peng103617 0:e74e2fd7a61e 192 void AD7190_ChannelSelect(unsigned short channel)
peng103617 0:e74e2fd7a61e 193 {
peng103617 0:e74e2fd7a61e 194 unsigned long oldRegValue = 0x0;
peng103617 0:e74e2fd7a61e 195 unsigned long newRegValue = 0x0;
peng103617 0:e74e2fd7a61e 196
peng103617 0:e74e2fd7a61e 197 oldRegValue = AD7190_GetRegisterValue(AD7190_REG_CONF, 3);
peng103617 0:e74e2fd7a61e 198 oldRegValue &= ~(AD7190_CONF_CHAN(0xFF));
peng103617 0:e74e2fd7a61e 199 newRegValue = oldRegValue | AD7190_CONF_CHAN(1 << channel);
peng103617 0:e74e2fd7a61e 200 AD7190_SetRegisterValue(AD7190_REG_CONF, newRegValue, 3);
peng103617 0:e74e2fd7a61e 201 }
peng103617 0:e74e2fd7a61e 202
peng103617 0:e74e2fd7a61e 203 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 204 * @brief Performs the given calibration to the specified channel.
peng103617 0:e74e2fd7a61e 205 *
peng103617 0:e74e2fd7a61e 206 * @param mode - Calibration type.
peng103617 0:e74e2fd7a61e 207 * @param channel - Channel to be calibrated.
peng103617 0:e74e2fd7a61e 208 *
peng103617 0:e74e2fd7a61e 209 * @return none.
peng103617 0:e74e2fd7a61e 210 *******************************************************************************/
peng103617 0:e74e2fd7a61e 211 void AD7190_Calibrate(unsigned char mode, unsigned char channel)
peng103617 0:e74e2fd7a61e 212 {
peng103617 0:e74e2fd7a61e 213 unsigned long oldRegValue = 0x0;
peng103617 0:e74e2fd7a61e 214 unsigned long newRegValue = 0x0;
peng103617 0:e74e2fd7a61e 215
peng103617 0:e74e2fd7a61e 216 AD7190_ChannelSelect(channel);
peng103617 0:e74e2fd7a61e 217 oldRegValue = AD7190_GetRegisterValue(AD7190_REG_MODE, 3);
peng103617 0:e74e2fd7a61e 218 oldRegValue &= ~AD7190_MODE_SEL(0x7);
peng103617 0:e74e2fd7a61e 219 newRegValue = oldRegValue | AD7190_MODE_SEL(mode);
peng103617 0:e74e2fd7a61e 220 cs.write(0); //ADI_PART_CS_LOW;
peng103617 0:e74e2fd7a61e 221 AD7190_SetRegisterValue(AD7190_REG_MODE, newRegValue, 3); // CS is not modified.
peng103617 0:e74e2fd7a61e 222 AD7190_WaitRdyGoLow();
peng103617 0:e74e2fd7a61e 223 cs.write(1); //ADI_PART_CS_HIGH;
peng103617 0:e74e2fd7a61e 224 }
peng103617 0:e74e2fd7a61e 225
peng103617 0:e74e2fd7a61e 226 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 227 * @brief Selects the polarity of the conversion and the ADC input range.
peng103617 0:e74e2fd7a61e 228 *
peng103617 0:e74e2fd7a61e 229 * @param polarity - Polarity select bit.
peng103617 0:e74e2fd7a61e 230 Example: 0 - bipolar operation is selected.
peng103617 0:e74e2fd7a61e 231 1 - unipolar operation is selected.
peng103617 0:e74e2fd7a61e 232 * @param range - Gain select bits. These bits are written by the user to select
peng103617 0:e74e2fd7a61e 233 the ADC input range.
peng103617 0:e74e2fd7a61e 234 *
peng103617 0:e74e2fd7a61e 235 * @return none.
peng103617 0:e74e2fd7a61e 236 *******************************************************************************/
peng103617 0:e74e2fd7a61e 237 void AD7190_RangeSetup(unsigned char polarity, unsigned char range)
peng103617 0:e74e2fd7a61e 238 {
peng103617 0:e74e2fd7a61e 239 unsigned long oldRegValue = 0x0;
peng103617 0:e74e2fd7a61e 240 unsigned long newRegValue = 0x0;
peng103617 0:e74e2fd7a61e 241
peng103617 0:e74e2fd7a61e 242 oldRegValue = AD7190_GetRegisterValue(AD7190_REG_CONF,3);
peng103617 0:e74e2fd7a61e 243 oldRegValue &= ~(AD7190_CONF_UNIPOLAR |
peng103617 0:e74e2fd7a61e 244 AD7190_CONF_GAIN(0x7));
peng103617 0:e74e2fd7a61e 245 newRegValue = oldRegValue |
peng103617 0:e74e2fd7a61e 246 (polarity * AD7190_CONF_UNIPOLAR) |
peng103617 0:e74e2fd7a61e 247 AD7190_CONF_GAIN(range);
peng103617 0:e74e2fd7a61e 248 AD7190_SetRegisterValue(AD7190_REG_CONF, newRegValue, 3);
peng103617 0:e74e2fd7a61e 249 }
peng103617 0:e74e2fd7a61e 250
peng103617 0:e74e2fd7a61e 251 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 252 * @brief Returns the result of a single conversion.
peng103617 0:e74e2fd7a61e 253 *
peng103617 0:e74e2fd7a61e 254 * @return regData - Result of a single analog-to-digital conversion.
peng103617 0:e74e2fd7a61e 255 *******************************************************************************/
peng103617 0:e74e2fd7a61e 256 unsigned long AD7190_SingleConversion(void)
peng103617 0:e74e2fd7a61e 257 {
peng103617 0:e74e2fd7a61e 258 unsigned long command = 0x0;
peng103617 0:e74e2fd7a61e 259 unsigned long regData = 0x0;
peng103617 0:e74e2fd7a61e 260
peng103617 0:e74e2fd7a61e 261 command = AD7190_MODE_SEL(AD7190_MODE_SINGLE) |
peng103617 0:e74e2fd7a61e 262 AD7190_MODE_CLKSRC(AD7190_CLK_INT) |
peng103617 0:e74e2fd7a61e 263 AD7190_MODE_RATE(0x060);
peng103617 0:e74e2fd7a61e 264 cs.write(0); //ADI_PART_CS_LOW;
peng103617 0:e74e2fd7a61e 265 AD7190_SetRegisterValue(AD7190_REG_MODE, command, 3); // CS is not modified.
peng103617 0:e74e2fd7a61e 266 AD7190_WaitRdyGoLow();
peng103617 0:e74e2fd7a61e 267 //wait_us(500);
peng103617 0:e74e2fd7a61e 268 regData = AD7190_GetRegisterValue(AD7190_REG_DATA, 3);
peng103617 0:e74e2fd7a61e 269 cs.write(1); //ADI_PART_CS_HIGH;
peng103617 0:e74e2fd7a61e 270
peng103617 0:e74e2fd7a61e 271 return regData;
peng103617 0:e74e2fd7a61e 272 }
peng103617 0:e74e2fd7a61e 273
peng103617 0:e74e2fd7a61e 274 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 275 * @brief Returns the average of several conversion results.
peng103617 0:e74e2fd7a61e 276 *
peng103617 0:e74e2fd7a61e 277 * @return samplesAverage - The average of the conversion results.
peng103617 0:e74e2fd7a61e 278 *******************************************************************************/
peng103617 0:e74e2fd7a61e 279 unsigned long AD7190_ContinuousReadAvg(unsigned char sampleNumber)
peng103617 0:e74e2fd7a61e 280 {
peng103617 0:e74e2fd7a61e 281 unsigned long samplesAverage = 0x0;
peng103617 0:e74e2fd7a61e 282 unsigned char count = 0x0;
peng103617 0:e74e2fd7a61e 283 unsigned long command = 0x0;
peng103617 0:e74e2fd7a61e 284
peng103617 0:e74e2fd7a61e 285 command = AD7190_MODE_SEL(AD7190_MODE_CONT) |
peng103617 0:e74e2fd7a61e 286 AD7190_MODE_CLKSRC(AD7190_CLK_INT) |
peng103617 0:e74e2fd7a61e 287 AD7190_MODE_RATE(0x060);
peng103617 0:e74e2fd7a61e 288 cs.write(0); //ADI_PART_CS_LOW;
peng103617 0:e74e2fd7a61e 289 AD7190_SetRegisterValue(AD7190_REG_MODE, command, 3); // CS is not modified.
peng103617 0:e74e2fd7a61e 290 for(count = 0;count < sampleNumber;count ++)
peng103617 0:e74e2fd7a61e 291 {
peng103617 0:e74e2fd7a61e 292 AD7190_WaitRdyGoLow();
peng103617 0:e74e2fd7a61e 293 samplesAverage += AD7190_GetRegisterValue(AD7190_REG_DATA, 3); // CS is not modified.
peng103617 0:e74e2fd7a61e 294 }
peng103617 0:e74e2fd7a61e 295 cs.write(1); //ADI_PART_CS_HIGH;
peng103617 0:e74e2fd7a61e 296 samplesAverage = samplesAverage / sampleNumber;
peng103617 0:e74e2fd7a61e 297
peng103617 0:e74e2fd7a61e 298 return samplesAverage ;
peng103617 0:e74e2fd7a61e 299 }
peng103617 0:e74e2fd7a61e 300
peng103617 0:e74e2fd7a61e 301 /***************************************************************************//**
peng103617 0:e74e2fd7a61e 302 * @brief Read data from temperature sensor and converts it to Celsius degrees.
peng103617 0:e74e2fd7a61e 303 *
peng103617 0:e74e2fd7a61e 304 * @return temperature - Celsius degrees.
peng103617 0:e74e2fd7a61e 305 *******************************************************************************/
peng103617 0:e74e2fd7a61e 306 unsigned long AD7190_TemperatureRead(void)
peng103617 0:e74e2fd7a61e 307 {
peng103617 0:e74e2fd7a61e 308 unsigned char temperature = 0x0;
peng103617 0:e74e2fd7a61e 309 unsigned long dataReg = 0x0;
peng103617 0:e74e2fd7a61e 310 AD7190_RangeSetup(0, AD7190_CONF_GAIN_1);
peng103617 0:e74e2fd7a61e 311 AD7190_ChannelSelect(AD7190_CH_TEMP_SENSOR);
peng103617 0:e74e2fd7a61e 312 dataReg = AD7190_SingleConversion();
peng103617 0:e74e2fd7a61e 313 dataReg -= 0x800000;
peng103617 0:e74e2fd7a61e 314 dataReg /= 2815; // Kelvin Temperature
peng103617 0:e74e2fd7a61e 315 dataReg -= 273; //Celsius Temperature
peng103617 0:e74e2fd7a61e 316 temperature = (unsigned long) dataReg;
peng103617 0:e74e2fd7a61e 317
peng103617 0:e74e2fd7a61e 318 return temperature;
peng103617 0:e74e2fd7a61e 319 }