Linduino  1.3.0
Linear Technology Arduino-Compatible Demonstration Board
LTC2497.h
Go to the documentation of this file.
1 /*!
2 LTC2497: 16-Bit, 16-Channel Delta Sigma ADCs with Easy Drive Input Current Cancellation.
3 
4 @verbatim
5 
6 The LTC2497 is a 16-channel (eight differential), 16-bit, No Latency Delta
7 Sigma TM ADC with Easy Drive technology and a 2-wire, I2C interface. The
8 patented sampling scheme eliminates dynamic input current errors and the
9 shortcomings of on-chip buffering through automatic cancellation of
10 differential input current. This allows large external source impedances
11 and rail-to-rail input signals to be directly digitized while maintaining
12 exceptional DC accuracy.
13 
14 I2C DATA FORMAT (MSB FIRST):
15 
16 Data In:
17 Byte #1 Byte #2
18 
19 START SA6 SA5 SA4 SA3 SA2 SA1 SA0 W SACK 1 0 EN SGL ODD A2 A1 A0 NACK Stop
20 
21 Data Out:
22 Byte #1 Byte #2
23  MSB
24 Start SA6 SA5 SA4 SA3 SA2 SA1 SA0 R SACK SGN D15 D14 D13 D12 D11 D10 D9 MACK
25 
26 Byte #3 Byte #4
27  LSB
28 D8 D7 D6 D5 D4 D3 D2 D1 MACK D0 X X X X X X X MNACK STOP
29 
30 START : I2C Start
31 Repeat Start: I2c Repeat Start
32 STOP : I2C Stop
33 SAx : I2C Address
34 SACK : I2C Slave Generated Acknowledge (Active Low)
35 MACK : I2C Master Generated Acknowledge (Active Low)
36 MNACK : I2c Master Generated Not Acknowledge
37 W : I2C Write (0)
38 R : I2C Read (1)
39 Cx : Command Code
40 Dx : Data Bits
41 X : Don't care
42 EN : Enable Bit
43 SGL : Single Ended Bit
44 ODD : Polarity Bit
45 SGN : Sign Bit
46 
47 
48 Example Code:
49 Read differential with CH0 as positive and CH1 as negative:
50 
51  uint8_t ack;
52  int32_t adc_code = 0;
53  float adc_voltage;
54  adc_command = LTC24XX_MULTI_CH_P0_N1;
55  ack |= LTC2497_read(i2c_address, adc_command, &adc_code);
56  adc_voltage = LTC2497_code_to_voltage(adc_code, LTC2497_vref);
57 
58 @endverbatim
59 
60 http://www.linear.com/product/LTC2497
61 
62 http://www.linear.com/product/LTC2497#demoboards
63 
64 
65 Copyright 2018(c) Analog Devices, Inc.
66 
67 All rights reserved.
68 
69 Redistribution and use in source and binary forms, with or without
70 modification, are permitted provided that the following conditions are met:
71  - Redistributions of source code must retain the above copyright
72  notice, this list of conditions and the following disclaimer.
73  - Redistributions in binary form must reproduce the above copyright
74  notice, this list of conditions and the following disclaimer in
75  the documentation and/or other materials provided with the
76  distribution.
77  - Neither the name of Analog Devices, Inc. nor the names of its
78  contributors may be used to endorse or promote products derived
79  from this software without specific prior written permission.
80  - The use of this software may or may not infringe the patent rights
81  of one or more patent holders. This license does not release you
82  from the requirement that you obtain separate licenses from these
83  patent holders to use this software.
84  - Use of the software either in source or binary form, must be run
85  on or directly connected to an Analog Devices Inc. component.
86 
87 THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
88 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
89 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
90 IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
91 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
92 LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
93 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
94 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
95 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
96 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
97 */
98 
99 /*! @file
100  @ingroup LTC2497
101  Header for LTC2497: 16-Bit, 16-Channel Delta Sigma ADCs with Easy Drive Input Current Cancellation
102 */
103 
104 #ifndef LTC2497_H
105 #define LTC2497_H
106 
107 /*! @name I2C_Addresses
108 @{ */
109 
110 //! I2C address of the LTC2497.
111 //! Configured by tying the ADR0, ADR1, and ADR2 pins high or low. See Table 1 of datasheet.
112 //! Uncomment LTC2497_I2C_ADDRESS to match demo board configuration.
113 // Address assignment
114 // LTC2497 I2C Address // AD2 AD1 AD0
115 // #define LTC2497_I2C_ADDRESS 0x14 // Low Low Low
116 // #define LTC2497_I2C_ADDRESS 0x16 // Low Low High
117 // #define LTC2497_I2C_ADDRESS 0x15 // Low Low Float
118 // #define LTC2497_I2C_ADDRESS 0x26 // Low High Low
119 // #define LTC2497_I2C_ADDRESS 0x34 // Low High High
120 // #define LTC2497_I2C_ADDRESS 0x27 // Low High Float
121 // #define LTC2497_I2C_ADDRESS 0x17 // Low Float Low
122 // #define LTC2497_I2C_ADDRESS 0x25 // Low Float High
123 // #define LTC2497_I2C_ADDRESS 0x24 // Low Float Float
124 // #define LTC2497_I2C_ADDRESS 0x56 // High Low Low
125 // #define LTC2497_I2C_ADDRESS 0x64 // High Low High
126 // #define LTC2497_I2C_ADDRESS 0x57 // High Low Float
127 // #define LTC2497_I2C_ADDRESS 0x74 // High High Low
128 #define LTC2497_I2C_ADDRESS 0x76 // High High High
129 // #define LTC2497_I2C_ADDRESS 0x75 // High High Float
130 // #define LTC2497_I2C_ADDRESS 0x65 // High Float Low
131 // #define LTC2497_I2C_ADDRESS 0x67 // High Float High
132 // #define LTC2497_I2C_ADDRESS 0x66 // High Float Float
133 // #define LTC2497_I2C_ADDRESS 0x35 // Float Low Low
134 // #define LTC2497_I2C_ADDRESS 0x37 // Float Low High
135 // #define LTC2497_I2C_ADDRESS 0x36 // Float Low Float
136 // #define LTC2497_I2C_ADDRESS 0x47 // Float High Low
137 // #define LTC2497_I2C_ADDRESS 0x55 // Float High High
138 // #define LTC2497_I2C_ADDRESS 0x54 // Float High Float
139 // #define LTC2497_I2C_ADDRESS 0x44 // Float Float Low
140 // #define LTC2497_I2C_ADDRESS 0x46 // Float Float High
141 // #define LTC2497_I2C_ADDRESS 0x45 // Float Float Float
142 
143 //! LTC2497 Global I2C Address.
144 #define LTC2497_I2C_GLOBAL_ADDRESS 0x77 // Global Address
145 /*! @} */
146 
147 
148 //! Reads from LTC2497.
149 //! @return 1 if no acknowledge, 0 if acknowledge
150 uint8_t LTC2497_read(uint8_t i2c_address, //!< I2C address (7-bit format) for part
151  uint8_t adc_command, //!< Byte command written to LTC2497
152  int32_t *adc_code, //!< 4 byte conversion code read from LTC2497
153  uint16_t timeout //!< Timeout (in milliseconds)
154  );
155 
156 //! Calculates the voltage corresponding to an ADC code, given the reference (in volts)
157 //! @return Returns voltage calculated from ADC code.
158 float LTC2497_code_to_voltage(int32_t adc_code, //!< Code read from ADC
159  float vref //!< VRef (in volts)
160  );
161 
162 #endif // LTC2497_H
uint8_t i2c_address
static uint8_t adc_command
Definition: DC2071AA.ino:111
long timeout
float LTC2497_code_to_voltage(int32_t adc_code, float vref)
Calculates the voltage corresponding to an ADC code, given the reference (in volts) ...
Definition: LTC2497.cpp:85
uint8_t LTC2497_read(uint8_t i2c_address, uint8_t adc_command, int32_t *adc_code, uint16_t timeout)
Reads from LTC2497.
Definition: LTC2497.cpp:79
static uint32_t adc_code
Definition: DC2071AA.ino:113