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