LTC2308 - Low Noise, 500ksps, 8-Channel, 12-Bit ADC
Features
- 12-Bit Resolution
- 500ksps Sampling Rate
- Low Noise: SINAD = 73.3dB
- Guaranteed No Missing Codes
- Single 5V Supply
- Auto-Shutdown Scales Supply Current with Sample Rate
- Low Power:
17.5mW at 500ksps
0.9mW Nap Mode
35µW Sleep Mode - Internal Reference
- Internal 8-Channel Multiplexer
- Internal Conversion Clock
- SPI/MICROWIRETM Compatible Serial Interface
- Unipolar or Bipolar Input Ranges (Software Selectable)
- Separate Output Supply OVDD (2.7V to 5.25V)
- 24-Pin 4mm × 4mm QFN Package
AEC-Q100 data available for specific packages
Typical Application
Description
The LTC2308 is a low noise, 500ksps, 8-channel, 12-bit ADC with an SPI/MICROWIRE compatible serial interface. This ADC includes an internal reference and a fully differential sample-and-hold circuit to reduce common-mode noise. The internal conversion clock allows the external serial output data clock (SCK) to operate at any frequency up to 40MHz.
The LTC2308 operates from a single 5V supply and draws just 3.5mA at a sample rate of 500ksps. The auto-shutdown feature reduces the supply current to 200µA at a sample rate of 1ksps.
The LTC2308 is packaged in a small 24-pin 4mm x 4mm QFN. The internal 2.5V reference and 8-channel multiplexer further reduce PCB board space requirements.
The low power consumption and small size make the LTC2308 ideal for battery operated and portable applications, while the 4-wire SPI compatible serial interface makes this ADC a good match for isolated or remote data acquisition systems.
Packaging
CAD Symbols and Footprints: The downloadable Zip file below contains the schematic symbol and PCB footprints.
For complete and up to date package information and drawings, please refer to our packaging page
| Part Number | Package | Code | Temp | Package Drawing |
RoHS |
|---|---|---|---|---|---|
| LTC2308CUF#PBF | 4x4 QFN-24 | UF | C | 05-08-1697 | Yes |
| LTC2308CUF#TRPBF | 4x4 QFN-24 | UF | C | 05-08-1697 | Yes |
| LTC2308IUF#PBF | 4x4 QFN-24 | UF | I | 05-08-1697 | Yes |
| LTC2308IUF#TRPBF | 4x4 QFN-24 | UF | I | 05-08-1697 | Yes |
Order Info
- Part numbers ending in PBF are lead free. Solder plated terminal finish (SnPb) versions are non-standard and special terms and conditions and pricing applies if available. Please contact LTC marketing for information.
- Part numbers containing TR or TRM are shipped in tape and reel or 500 unit mini tape and reel, respectively
- Please refer to our general ordering information or the product datasheet for more details
Package Variations and Pricing
| Part Number | Package | Temp | Price (1-99) |
Price (1k)* |
RoHS | |
|---|---|---|---|---|---|---|
| LTC2308CUF#PBF | 4x4 QFN-24 | C | $5.27 | $2.95 | Yes | |
| LTC2308CUF#TRPBF | 4x4 QFN-24 | C | $5.33 | $3.01 | Yes | |
| LTC2308IUF#PBF | 4x4 QFN-24 | I | $6.32 | $3.54 | Yes | |
| LTC2308IUF#TRPBF | 4x4 QFN-24 | I | $6.38 | $3.60 | Yes | |
| Buy Now • Request Samples | ||||||
Demo Boards
Linear Technology offers many demo boards free of charge to qualified customers. Contact your local sales office or distributor to inquire about a demo board. Certain demo boards are also available for sale via credit card on this website. Demo boards are for evaluation purposes only. It remains the customer’s responsibility to verify proper and reliable operation in the actual end application.| Part Number | Description | Price | Documentation |
|---|---|---|---|
| DC1186A | LTC2308: 12-bit, 8-channel SAR ADC with SPI I/F, (req DC590 for DC, DC890 for AC apps) | $50.00 | |
| Buy Now | |||
Companion Boards
| Part Number | Description | Price | Documentation |
|---|---|---|---|
| DC2026C | Linduino One Isolated USB Demo Board: An Arduino- and QuikEval-Compatible Code Development Platform | $75.00 | |
| DC590B | Isolated USB Serial Controller for Linear Technology QuikEval-Compatible Demo Boards | $50.00 | |
| DC890B | USB Data Acquisition Controller, for PScope Evaluation Kits (up to 250Mbps, CMOS/LVDS) | $300.00 | |
| Buy Now | |||
Designed for Automotive and Transportation Applications
AEC-Q100 data is available for these specific part numbers. Please contact your local sales representative for more information regarding reliability reports or to inquire about parts that are not included. For more information, view our Automotive and Transportation page
| Part Number | Package | Temp | Price (1-99) |
Price (1k)* |
RoHS | |
|---|---|---|---|---|---|---|
| LTC2308IUF#PBF | 4x4 QFN-24 | I | $6.32 | $3.54 | Yes | |
| LTC2308IUF#TRPBF | 4x4 QFN-24 | I | $6.38 | $3.60 | Yes | |
| Buy Now • Request Samples | ||||||
Applications
- High Speed Data Acquisition
- Industrial Process Control
- Motor Control
- Accelerometer Measurements
- Battery Operated Instruments
- Isolated and/or Remote Data Acquisition
People Who Viewed This Product Also Viewed
- LTC6655 - 0.25ppm Noise, Low Drift Precision References
- LTM2883 - SPI/Digital or I2C μModule Isolator with Adjustable ±12.5V and 5V Regulated Power
- LT3080 - Adjustable 1.1A Single Resistor Low Dropout Regulator
- LT4363 - High Voltage Surge Stopper with Current Limit
- LTM2881 - Complete Isolated RS485/RS422 μModule Transceiver + Power
- LT1763 - 500mA, Low Noise, LDO Micropower Regulators
- LT4320/LT4320-1 - Ideal Diode Bridge Controller
- LT8614 - 42V, 4A Synchronous Step-Down Silent Switcher with 2.5μA Quiescent Current
- LTC6102 - Precision Zero Drift Current Sense Amplifier
- LT1761 - 100mA, Low Noise, LDO Micropower Regulators in TSOT-23
Product Notifications
Please login to your MyLinear account for notifications of datasheet updates, new document releases and LTspice model announcements for your favorite products. If you do not have a MyLinear account you may Sign Up Now.
Forgot your password? Click here.
Need help? Email mylinear@linear.com with questions and comments.
Design Tools
Linduino
Linduino is an Arduino compatible platform for developing and distributing firmware libraries and code for SPI and I²C-compatible integrated circuits. The Linduino One board interfaces to more than 300 QuikEval demonstration cards, supporting a variety of product types including analog-to-digital converters (ADCs), digital-to-analog converters (DACs), power monitors, and more. Firmware libraries for individual devices are written in C and designed to be portable to a wide variety of processors and microcontrollers. Each library has a demonstration program that can be uploaded to the Linduino One platform to allow the circuit and software to be quickly and easily verified.
Code
Linduino is Linear Technology's Arduino compatible system for developing and distributing firmware libraries and example code for Linear Technology’s integrated circuits. The code below can be downloaded or copied and pasted into your project. Please visit the Linduino Home Page for demo board, manual and setup information.
This part is Code Supported: There is example code available for this part. The code below may rely on other drivers available in the full library.
Download LTC2308 - DC1186A.INO File
/*!
Linear Technology DC1186A Demonstration Board.
LTC2308: 12-Bit, 8-Channel 500ksps SAR ADC with SPI Interface.
@verbatim
NOTES
Setup:
Set the terminal baud rate to 115200 and select the newline terminator. Equipment
required is a voltage source (preferably low-noise) and a precision voltmeter. No
external power supply is required. Ensure all jumpers on the demo board are
installed in their default positions from the factory. Refer to Demo Manual
DC1186A.
How to test Single-Ended mode:
Bipolar Mode:
The voltage source should be connected to one of the inputs CH0,...CH7. Ensure the input is
within its specified absolute input voltage range. (It is easiest
to tie the voltage source negative terminal to COM.) Ensure the voltage
source is set within the range of 0V to +4.096V.
(Swapping input voltages results in a reversed polarity reading.)
Unipolar Mode:
The voltage source should be connected to one of the inputs CH0,...CH7. Ensure the input is
within its specified absolute input voltage range. (It is easiest
to tie the voltage source negative terminal to COM.) Ensure the voltage
source is set within the range of 0V to +4.096V.
How to test Differential Mode:
Bipolar Mode:
The voltage source should be connected between paired channels. Ensure both
inputs are within their specified absolute input voltage range. (It is easiest
to tie the voltage source negative terminal to COM or GND.) Ensure the voltage
source is set within the range of 0 to +4.096V (differential voltage range).
(Swapping input voltages results in a reversed polarity reading.)
Unipolar Mode:
The voltage source should be connected between paired channels. (It is easiest
to tie the voltage source negative terminal to COM or GND.) Ensure both inputs
are within their specified absolute input voltage range. (It is easiest to tie
the voltage source negative terminal to COM or GND.) Ensure the voltage source
is set within the range of 0 to +4.096V (differential voltage range).
USER INPUT DATA FORMAT:
decimal : 1024
hex : 0x400
octal : 02000 (leading 0 "zero")
binary : B10000000000
float : 1024.0
@endverbatim
http://www.linear.com/product/LTC2308
http://www.linear.com/product/LTC2308#demoboards
REVISION HISTORY
$Revision: 3018 $
$Date: 2014-12-01 15:53:20 -0800 (Mon, 01 Dec 2014) $
Copyright (c) 2013, Linear Technology Corp.(LTC)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of Linear Technology Corp.
The Linear Technology Linduino is not affiliated with the official Arduino team.
However, the Linduino is only possible because of the Arduino team's commitment
to the open-source community. Please, visit http://www.arduino.cc and
http://store.arduino.cc , and consider a purchase that will help fund their
ongoing work.
*/
/*! @file
@ingroup LTC2308
*/
#include <Arduino.h>
#include <stdint.h>
#include "Linduino.h"
#include "LT_SPI.h"
#include "UserInterface.h"
#include "LT_I2C.h"
#include "QuikEval_EEPROM.h"
#include "LTC2308.h"
#include <SPI.h>
#include <Wire.h>
// Function Declaration
void print_title(); // Print the title block
void print_prompt(); // Prompt the user for an input command
uint8_t print_user_command_differential(); // Display selected differential channels
uint8_t print_user_command_single_ended(); // Display selected single ended channels
void print_channel_selection(uint8_t menu);
void menu_1_read_input(); // Read channels
void menu_2_select_single_ended_differential(); // Sets LTC2308 to Single-Ended or Differential
void menu_3_select_uni_bipolar(); // Sets LTC2308 to Bipolar or Unipolar
void menu_4_sleep();
// Global variables
static uint8_t uni_bipolar = LTC2308_UNIPOLAR_MODE; //!< Default set for unipolar mode
static uint8_t single_ended_differential = LTC2308_SINGLE_ENDED_MODE; //!< LTC2308 Unipolar or Bipolar mode selection
static uint8_t LTC2308_bits = 12; //!< Resolution (12 bits)
static float LTC2308_vref = 4.096;
// Constants
//! Lookup table to build the command for single-ended mode, input with respect to GND
const uint8_t BUILD_COMMAND_SINGLE_ENDED[8] = {LTC2308_CH0, LTC2308_CH1, LTC2308_CH2, LTC2308_CH3,
LTC2308_CH4, LTC2308_CH5, LTC2308_CH6, LTC2308_CH7
}; //!< Builds the command for single-ended mode, input with respect to GND
//! Lookup table to build the command for differential mode with the selected uni/bipolar mode
const uint8_t BUILD_COMMAND_DIFF[8] = {LTC2308_P0_N1, LTC2308_P2_N3, LTC2308_P4_N5, LTC2308_P6_N7,
LTC2308_P1_N0, LTC2308_P3_N2, LTC2308_P5_N4, LTC2308_P7_N6
}; //!< Build the command for differential mode
//! Initialize Linduino
void setup()
{
uint16_t adc_code;
quikeval_SPI_init(); // Configure the spi port for 4MHz SCK
quikeval_SPI_connect(); // Connect SPI to main data port
Serial.begin(115200); // Initialize the serial port to the PC
print_title();
print_prompt();
}
//! Repeats Linduino loop
void loop()
{
uint16_t user_command;
if (Serial.available()) // Check for user input
{
user_command = read_int(); // Read the user command
if (user_command != 'm')
Serial.println(user_command); // Prints the user command to com port
Serial.flush();
switch (user_command)
{
case 1:
menu_1_read_input();
break;
case 2:
menu_2_select_single_ended_differential();
break;
case 3:
menu_3_select_uni_bipolar();
break;
case 4:
menu_4_sleep();
break;
default:
Serial.println(F("Invalid Option"));
break;
}
Serial.println();
Serial.println(F("*************************"));
print_prompt();
}
}
// Function Definitions
//! Read channels
void menu_1_read_input()
{
uint8_t user_command;
uint16_t adc_command; // The LTC2308 command byte
uint16_t adc_code = 0; // The LTC2308 code
uint16_t display_code;
uint8_t x, y, startcount, endcount;
float adc_voltage;
if (uni_bipolar == LTC2308_UNIPOLAR_MODE)
{
if (single_ended_differential == LTC2308_SINGLE_ENDED_MODE)
{
Serial.println(F(" Read Input in Single-Ended, Unipolar mode:"));
Serial.println(F(" Note that in Unipolar mode, input voltages less than zero are reported as 0.0V"));
user_command = print_user_command_single_ended();
}
else
{
Serial.println(F(" Read Input in Differential, Unipolar mode:"));
Serial.println(F(" Note that in Unipolar mode, input voltages less than zero are reported as 0.0V"));
user_command = print_user_command_differential();
}
}
else
{
if (single_ended_differential == LTC2308_SINGLE_ENDED_MODE)
{
Serial.println(F(" Read Input in Single-Ended, Bipolar mode:"));
user_command = print_user_command_single_ended();
}
else
{
Serial.println(F(" Read Input in Differential, Bipolar mode:"));
user_command = print_user_command_differential();
}
}
if (user_command == 8) //read all channels
{
startcount = 0;
endcount = 7;
}
else
{
startcount = user_command;
endcount = user_command;
}
if(single_ended_differential == LTC2308_SINGLE_ENDED_MODE) //read single-ended
{
adc_command = BUILD_COMMAND_SINGLE_ENDED[0] | uni_bipolar;
LTC2308_read(LTC2308_CS, adc_command, &adc_code); // Throws out last reading and starts CH0 conversion
for (x = startcount; x <= endcount; x++)
{
adc_command = BUILD_COMMAND_SINGLE_ENDED[x % 8] | uni_bipolar; // Send channel config for the NEXT conversion to take place
LTC2308_read(LTC2308_CS, adc_command, &adc_code); // Throws out last reading and starts CH0 conversion
LTC2308_read(LTC2308_CS, adc_command, &adc_code); // Throws out last reading and starts CH0 conversion
display_code = adc_code >> (16 - LTC2308_bits);
display_code = display_code & 0xFFF;
Serial.print(F(" Received Code: b"));
Serial.println(display_code, BIN);
adc_voltage = LTC2308_code_to_voltage(adc_code, LTC2308_vref, uni_bipolar);
Serial.print(F(" Voltage read on "));
Serial.print(F("Ch"));
Serial.print(x);
Serial.print(F(": "));
Serial.print(adc_voltage, 4);
Serial.println(F("V"));
Serial.println();
}
}
else //read differential
{
adc_command = BUILD_COMMAND_SINGLE_ENDED[0] | uni_bipolar;
LTC2308_read(LTC2308_CS, adc_command, &adc_code); // Throws out last reading and starts CH0 conversion
for (x = startcount; x <= endcount; x++)
{
adc_command = BUILD_COMMAND_DIFF[x % 8] | uni_bipolar; // Send channel config for the NEXT conversion to take place
LTC2308_read(LTC2308_CS, adc_command, &adc_code); // Throws out last reading and starts CH0 conversion
LTC2308_read(LTC2308_CS, adc_command, &adc_code); // Read previous channel conversion (x-1) and start next one (x)
display_code = adc_code >> (16 - LTC2308_bits);
display_code = display_code & 0xFFF;
Serial.print(F(" Received Code: b"));
Serial.println(display_code, BIN);
adc_voltage = LTC2308_code_to_voltage(adc_code, LTC2308_vref, uni_bipolar);
Serial.print(F(" Voltage read between Chs "));
print_channel_selection(x + y);
Serial.print(adc_voltage, 4);
Serial.println(F("V"));
Serial.println();
}
}
}
//! Sets LTC2308 to Single-Ended or Differential
void menu_2_select_single_ended_differential()
{
uint8_t user_command;
Serial.println(F("\n 0 = Single-Ended"));
Serial.println(F(" 1 = Differential"));
Serial.print(F(" Enter a Command: "));
user_command = read_int(); // Read user input for uni_bipolar
Serial.println(user_command);
switch (user_command)
{
case 0:
Serial.println(F(" Single-Ended mode selected"));
single_ended_differential = LTC2308_SINGLE_ENDED_MODE;
break;
case 1:
Serial.println(F(" Differential mode selected"));
single_ended_differential = LTC2308_DIFFERENTIAL_MODE;
break;
default:
{
Serial.println(" Invalid Option");
return;
}
break;
}
}
//! Select unipolar (0-REFCOMP) or bipolar (+/- 0.5 x REFCOMP) mode
//! @return void
void menu_3_select_uni_bipolar()
{
uint8_t user_command;
Serial.println(F("\n 0 = Bipolar"));
Serial.println(F(" 1 = Unipolar"));
Serial.print(F(" Enter a Command: "));
user_command = read_int(); // Read user input for uni_bipolar
Serial.println(user_command);
switch (user_command)
{
case 0:
Serial.println(F(" Bipolar mode selected"));
uni_bipolar = LTC2308_BIPOLAR_MODE;
break;
case 1:
Serial.println(F(" Unipolar mode selected"));
uni_bipolar = LTC2308_UNIPOLAR_MODE;
break;
default:
Serial.println(" Invalid Option");
return;
break;
}
}
//! Put LTC2308 to sleep (low power)
//! @return void
void menu_4_sleep()
{
// Sleep Mode
uint16_t user_command;
uint16_t adc_code = 0; // The LTC2308 code
LTC2308_read(LTC2308_CS, LTC2308_SLEEP_MODE, &adc_code); // Build ADC command for sleep mode
Serial.println();
Serial.print(F(" ADC Command: B"));
Serial.println(LTC2308_SLEEP_MODE, BIN);
Serial.println(F(" LTC2308 Is Now In Sleep Mode"));
Serial.println(F(" Enter RETURN to exit Sleep Mode"));
user_command = read_int();
LTC2308_read(LTC2308_CS, LTC2308_NORMAL_MODE, &adc_code); // Exit Sleep Mode
}//! Prints the title block when program first starts.
void print_title()
{
Serial.println();
Serial.println(F("*****************************************************************"));
Serial.println(F("* DC1186A Demonstration Program *"));
Serial.println(F("* *"));
Serial.println(F("* This program demonstrates how to send data and receive data *"));
Serial.println(F("* from the LTC2308 12-bit ADC. *"));
Serial.println(F("* *"));
Serial.println(F("* Set the baud rate to 115200 and select the newline terminator.*"));
Serial.println(F("* *"));
Serial.println(F("*****************************************************************"));
}
//! Prints main menu.
void print_prompt()
{
Serial.println(F("1-Read ADC Input "));
Serial.println(F("2-Select Single-Ended / Differential measurement (default is Single_Ended)"));
Serial.println(F("3-Select Unipolar / Bipolar measurement (default is Unipolar)"));
Serial.println(F("4-Select Sleep Mode"));
Serial.println();
Serial.print(F("Enter a command: "));
}
//! Display selected differential channels. Displaying single-ended channels is
//! straightforward; not so with differential because the inputs can take either polarity.
uint8_t print_user_command_differential()
{
uint8_t user_command;
Serial.println(F(" *************************"));
Serial.println(F(" 0 = 0P-1N"));
Serial.println(F(" 1 = 2P-3N"));
Serial.println(F(" 2 = 4P-5N"));
Serial.println(F(" 3 = 6P-7N"));
Serial.println(F(" 4 = 1P-0N"));
Serial.println(F(" 5 = 3P-2N"));
Serial.println(F(" 6 = 5P_4N"));
Serial.println(F(" 7 = 7P = 6N"));
Serial.println(F(" 8 = ALL Even_P-Odd_N"));
Serial.println(F(" m = Main Menu"));
Serial.println();
Serial.print(F(" Enter a Command: "));
user_command = read_int(); // Read the menu command
Serial.println(user_command);
if (user_command == 'm')
return(0);
switch (user_command) //check for invalid selection
{
case 0:
Serial.println(F(" 0P-1N selected"));
break;
case 1:
Serial.println(F(" 2P-3N selected"));
break;
case 2:
Serial.println(F(" 4P-5N selected"));
break;
case 3:
Serial.println(F(" 6P-7N selected"));
break;
case 4:
Serial.println(F(" 1P-0N selected"));
break;
case 5:
Serial.println(F(" 3P-2N selected"));
break;
case 6:
Serial.println(F(" 5P-4N selected"));
break;
case 7:
Serial.println(F(" 7P-6N selected"));
break;
case 8:
Serial.println(F(" ALL Even_P-Odd_N selected"));
break;
default:
Serial.println(F(" Invalid Option"));
break;
}
return(user_command);
}
//! Display selected differential channels. Displaying single-ended channels is
//! straightforward; not so with differential because the inputs can take either polarity.
void print_channel_selection(uint8_t menu)
{
switch (menu)
{
case 0:
Serial.print(F(" 0P-1N:"));
break;
case 1:
Serial.print(F(" 2P-3N:"));
break;
case 2:
Serial.print(F(" 4P-5N:"));
break;
case 3:
Serial.print(F(" 6P-7N:"));
break;
case 4:
Serial.print(F(" 1P-0N:"));
break;
case 5:
Serial.print(F(" 3P-2N:"));
break;
case 6:
Serial.print(F(" 5P-4N:"));
break;
case 7:
Serial.print(F(" 7P-6N:"));
break;
}
}
//! Display selected single-ended channel.
uint8_t print_user_command_single_ended()
{
uint8_t user_command;
Serial.println(F(" *************************"));
Serial.println(F(" 0 = CH0"));
Serial.println(F(" 1 = CH1"));
Serial.println(F(" 2 = CH2"));
Serial.println(F(" 3 = CH3"));
Serial.println(F(" 4 = CH4"));
Serial.println(F(" 5 = CH5"));
Serial.println(F(" 6 = CH6"));
Serial.println(F(" 7 = CH7"));
Serial.println(F(" 8 = ALL"));
Serial.println(F(" m = Main Menu"));
Serial.println();
Serial.print(F(" Enter a Command: "));
user_command = read_int(); // Read the single-ended menu command
Serial.println(user_command);
if (user_command == 'm')
return(0);
switch (user_command) //check for invalid selection
{
case 0:
Serial.println(F(" CH0 selected"));
break;
case 1:
Serial.println(F(" CH1 selected"));
break;
case 2:
Serial.println(F(" CH2 selected"));
break;
case 3:
Serial.println(F(" CH3 selected"));
break;
case 4:
Serial.println(F(" CH4 selected"));
break;
case 5:
Serial.println(F(" CH5 selected"));
break;
case 6:
Serial.println(F(" CH6 selected"));
break;
case 7:
Serial.println(F(" CH7 selected"));
break;
case 8:
Serial.println(F(" All selected"));
break;
default:
Serial.println(F(" Invalid Option"));
break;
}
return(user_command);
}
Download LTC2308 - Linduino Header File
/*!
LTC2308: 16-bit 8-channel 100ksps ADC
@verbatim
The LTC2308 is an 8-channel 12-bit A/D converter with
with serial I/O, and an internal reference. The ADCs typically draw only 1.3mA
from a single 5V supply. The 8-channel input multiplexer can be configured for
either single-ended or differential inputs and unipolar or bipolar conversions
(or combinations thereof). The automatic nap and sleep modes benefit power
sensitive applications.
The LTC2308's DC performance is outstanding with a +/-2LSB INL specification and
no missing codes over temperature. The signal-to-noise ratio (SNR) for the
LTC2308 is typically 89dB, with the internal reference.
SPI DATA FORMAT (MSB First):
Byte #1 Byte #2
Data Out : D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
Data In : SD OS S1 S0 UNI GAIN NAP SLP X X X X X X X X
SD : Single/Differential Bit
OS : ODD/Sign Bit
Sx : Address Select Bit
UNI : Unipolar/Bipolar Bit
GAIN : Input Span Bit
NAP : Nap Mode Bit
SLP : Sleep Mode Bit
Dx : Data Bits
X : Don't care
Example Code:
Read Channel 0 in Single-Ended Unipolar mode when input is with respect to GND
adc_command = LTC2308_CH0 | LTC2308_UNIPOLAR_MODE | LTC2308_LOW_GAIN_MODE | LTC2308_NORMAL_MODE; // Single-ended, CH0, unipolar, low gain, normal mode.
LTC2308_read(LTC2308_CS, adc_command, &adc_code); // Throws out last reading
LTC2308_read(LTC2308_CS, adc_command, &adc_code); // Obtains the current reading and stores to adc_code variable
// Convert adc_code to voltage
adc_voltage = LTC2308_unipolar_code_to_voltage(adc_code, LTC2308_lsb, LTC2308_offset_unipolar_code);
@endverbatim
http://www.linear.com/product/LTC2308
http://www.linear.com/product/LTC2308#demoboards
REVISION HISTORY
$Revision: 3018 $
$Date: 2014-12-01 15:53:20 -0800 (Mon, 01 Dec 2014) $
Copyright (c) 2013, Linear Technology Corp.(LTC)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of Linear Technology Corp.
The Linear Technology Linduino is not affiliated with the official Arduino team.
However, the Linduino is only possible because of the Arduino team's commitment
to the open-source community. Please, visit http://www.arduino.cc and
http://store.arduino.cc , and consider a purchase that will help fund their
ongoing work.
*/
/*! @file
@ingroup LTC2308
Header for LTC2308: 16-bit 8-channel 100ksps ADC
*/
#ifndef LTC2308_H
#define LTC2308_H
#include <SPI.h>
//! Define the SPI CS pin
#ifndef LTC2308_CS
#define LTC2308_CS QUIKEVAL_CS
#endif
//! @name LTC2308 Single-Ended Channel Addresses
//! @{
// Single-Ended Channel Address
#define LTC2308_CH0 0x80
#define LTC2308_CH1 0xC0
#define LTC2308_CH2 0x90
#define LTC2308_CH3 0xD0
#define LTC2308_CH4 0xA0
#define LTC2308_CH5 0xE0
#define LTC2308_CH6 0xB0
#define LTC2308_CH7 0xF0
//!@}
//! @name LTC2308 Differential Channel Addresses
//! @{
// Differential Channel Address
#define LTC2308_P0_N1 0x00
#define LTC2308_P1_N0 0x40
#define LTC2308_P2_N3 0x10
#define LTC2308_P3_N2 0x50
#define LTC2308_P4_N5 0x20
#define LTC2308_P5_N4 0x60
#define LTC2308_P6_N7 0x30
#define LTC2308_P7_N6 0x70
//!@}
//! @name LTC2308 Uni/GAIN config bits
//! @{
// Unipolar Mode Command
#define LTC2308_UNIPOLAR_MODE 0x08
#define LTC2308_BIPOLAR_MODE 0x00
// Single-Ended Mode Command
#define LTC2308_SINGLE_ENDED_MODE 0x80
#define LTC2308_DIFFERENTIAL_MODE 0x00
//!@}
//! @name LTC2308 Sleep/Nap config bits
//! @{
// Sleep Mode Command
#define LTC2308_SLEEP_MODE 0x01
#define LTC2308_NORMAL_MODE 0x00
// Nap Mode Command
#define LTC2308_NAP_MODE 0x02
//!@}
/*
Example command
adc_command = LTC2308_CH0 | LTC2308_UNIPOLAR_MODE | LTC2308_LOW_GAIN_MODE | LTC2308_NORMAL_MODE; // Single-ended, CH0, unipolar, low gain, normal mode.
*/
//! Reads the ADC and returns 16-bit data
//! @return void
void LTC2308_read(uint8_t cs, //!< Chip Select Pin
uint8_t adc_command, //!< Channel address, config bits ORed together
uint16_t *adc_code //!< Returns code read from ADC (from previous conversion)
);
//! Calculates the LTC2308 input's unipolar voltage given the binary data and lsb weight.
//! @return Floating point voltage
float LTC2308_code_to_voltage(uint16_t adc_code, //!< Raw ADC code
float vref, //!<
uint8_t uni_bipolar //!<
);
#endif // LTC2308_HDownload LTC2308 - Linduino.CPP File
/*!
LTC2308: 12-Bit 8-Channel 200ksps ADC
@verbatim
The LTC2308 is an 8-channel 12-bit A/D converter with
serial I/O, and an internal reference. The ADCs typically draw only 1.3mA from a
single 5V supply. The 8-channel input multiplexer can be configured for either
single-ended or differential inputs and unipolar or bipolar conversions (or
combinations thereof). The automatic nap and sleep modes benefit power sensitive
applications.
The LTC2308's DC performance is outstanding with a +/-2LSB INL specification and
no missing codes over temperature. The signal-to-noise ratio (SNR) for the
LTC2308 is typically 89dB, with the internal reference.
@endverbatim
http://www.linear.com/product/LTC2308
http://www.linear.com/product/LTC2308#demoboards
REVISION HISTORY
$Revision: 3018 $
$Date: 2014-12-01 15:53:20 -0800 (Mon, 01 Dec 2014) $
Copyright (c) 2013, Linear Technology Corp.(LTC)
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this
list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of Linear Technology Corp.
The Linear Technology Linduino is not affiliated with the official Arduino team.
However, the Linduino is only possible because of the Arduino team's commitment
to the open-source community. Please, visit http://www.arduino.cc and
http://store.arduino.cc , and consider a purchase that will help fund their
ongoing work.
*/
//! @defgroup LTC2308 LTC2308: 12-Bit 8-Channel 200ksps ADC
/*! @file
@ingroup LTC2308
Library for LTC2308: 12-Bit 8-Channel 200ksps ADC
*/
#include <Arduino.h>
#include <stdint.h>
#include "Linduino.h"
#include "LT_SPI.h"
#include "LTC2308.h"
#include <SPI.h>
// Reads the ADC and returns 16-bit data
void LTC2308_read(uint8_t cs, uint8_t adc_command, uint16_t *adc_code)
{
spi_transfer_word(cs, (uint16_t)(adc_command<<8), adc_code);
}
// Calculates the LTC2308 input voltage given the data, range, and unipolar/bipolar status.
float LTC2308_code_to_voltage(uint16_t adc_code, float vref, uint8_t uni_bipolar)
{
float voltage;
float sign = 1;
if(uni_bipolar == LTC2308_UNIPOLAR_MODE)
{
voltage = (float)adc_code;
voltage = voltage / (pow(2,16)-1); //! 2) This calculates the input as a fraction of the reference voltage (dimensionless)
}
else
{
vref = vref/2;
if ((adc_code & 0x8000) == 0x8000) //adc code is < 0
{
adc_code = (adc_code ^ 0xFFFF)+1; //! Convert ADC code from two's complement to binary
sign = -1;
}
voltage = sign*(float)adc_code;
voltage = voltage / (pow(2,15)-1); //! 2) This calculates the input as a fraction of the reference voltage (dimensionless)
}
voltage = voltage * vref; //! 3) Multiply fraction by Vref to get the actual voltage at the input (in volts)
return(voltage);
}
Technical Support
- For immediate technical assistance, contact your local sales office or distributor or call 1-800-4-LINEAR (US customers only) or 408-432-1900.
- For less urgent requests, please complete our Technical Support Request Form. Please allow 2-3 business days for reply.
