Linduino  1.3.0
Linear Technology Arduino-Compatible Demonstration Board
DATASHEET_FIGURE_31.ino
Go to the documentation of this file.
1 /*!
2 LTC2983: Multi-Sensor High Accuracy Digital Temperature Measurement System
3 @verbatim
4 
5 DATASHEET_FIGURE_31.ino:
6 Generated Linduino code from the LTC2983 Demo Software.
7 This code is designed to be used by a Linduino,
8 but can also be used to understand how to program the LTC2983.
9 
10 
11 @endverbatim
12 
13 http://www.linear.com/product/LTC2983
14 
15 http://www.linear.com/product/LTC2983#demoboards
16 
17 Copyright 2018(c) Analog Devices, Inc.
18 
19 All rights reserved.
20 
21 Redistribution and use in source and binary forms, with or without
22 modification, are permitted provided that the following conditions are met:
23  - Redistributions of source code must retain the above copyright
24  notice, this list of conditions and the following disclaimer.
25  - Redistributions in binary form must reproduce the above copyright
26  notice, this list of conditions and the following disclaimer in
27  the documentation and/or other materials provided with the
28  distribution.
29  - Neither the name of Analog Devices, Inc. nor the names of its
30  contributors may be used to endorse or promote products derived
31  from this software without specific prior written permission.
32  - The use of this software may or may not infringe the patent rights
33  of one or more patent holders. This license does not release you
34  from the requirement that you obtain separate licenses from these
35  patent holders to use this software.
36  - Use of the software either in source or binary form, must be run
37  on or directly connected to an Analog Devices Inc. component.
38 
39 THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
40 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
41 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
42 IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
43 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
44 LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
45 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
46 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
47 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
48 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
49 */
50 
51 
52 
53 /*! @file
54  @ingroup LTC2983
55 
56 */
57 
58 
59 
60 
61 #include <Arduino.h>
62 #include <stdint.h>
63 #include <stdbool.h>
64 #include "SPI.h"
65 #include "Wire.h"
66 #include "Linduino.h"
67 #include "LT_SPI.h"
68 #include "UserInterface.h"
69 #include "LT_I2C.h"
70 #include "QuikEval_EEPROM.h"
71 #include "stdio.h"
72 #include "math.h"
73 
76 #include "table_coeffs_LTC2983.h"
77 
78 #define CHIP_SELECT QUIKEVAL_CS // Chip select pin
79 
80 // Function prototypes
81 void configure_channels();
83 
84 
85 // -------------- Configure the LTC2983 -------------------------------
86 void setup()
87 {
88  char demo_name[]="DC2209"; // Demo Board Name stored in QuikEval EEPROM
89  quikeval_I2C_init(); // Configure the EEPROM I2C port for 100kHz
90  quikeval_SPI_init(); // Configure the spi port for 4MHz SCK
91  quikeval_SPI_connect(); // Connect SPI to main data port
92  pinMode(CHIP_SELECT, OUTPUT); // Configure chip select pin on Linduino
93 
94  Serial.begin(115200); // Initialize the serial port to the PC
95  print_title();
96  discover_demo_board(demo_name);
97 
100 }
101 
102 
104 {
105  uint8_t channel_number;
106  uint32_t channel_assignment_data;
107 
108  // ----- Channel 1: Assign Type J Thermocouple -----
109  channel_assignment_data =
115  assign_channel(CHIP_SELECT, 1, channel_assignment_data);
116  // ----- Channel 2: Assign Off-Chip Diode -----
117  channel_assignment_data =
123  (uint32_t) 0x100C49 << DIODE_IDEALITY_FACTOR_LSB; // diode - ideality factor(eta): 1.00299930572509765625
124  assign_channel(CHIP_SELECT, 2, channel_assignment_data);
125  // ----- Channel 3: Assign Type N Thermocouple -----
126  channel_assignment_data =
132  assign_channel(CHIP_SELECT, 3, channel_assignment_data);
133  // ----- Channel 4: Assign Off-Chip Diode -----
134  channel_assignment_data =
140  (uint32_t) 0x100C49 << DIODE_IDEALITY_FACTOR_LSB; // diode - ideality factor(eta): 1.00299930572509765625
141  assign_channel(CHIP_SELECT, 4, channel_assignment_data);
142  // ----- Channel 5: Assign Type K Thermocouple -----
143  channel_assignment_data =
149  assign_channel(CHIP_SELECT, 5, channel_assignment_data);
150  // ----- Channel 6: Assign Type S Thermocouple -----
151  channel_assignment_data =
157  assign_channel(CHIP_SELECT, 6, channel_assignment_data);
158  // ----- Channel 7: Assign Off-Chip Diode -----
159  channel_assignment_data =
165  (uint32_t) 0x100C49 << DIODE_IDEALITY_FACTOR_LSB; // diode - ideality factor(eta): 1.00299930572509765625
166  assign_channel(CHIP_SELECT, 7, channel_assignment_data);
167  // ----- Channel 9: Assign Type T Thermocouple -----
168  channel_assignment_data =
174  assign_channel(CHIP_SELECT, 9, channel_assignment_data);
175  // ----- Channel 10: Assign Type E Thermocouple -----
176  channel_assignment_data =
182  assign_channel(CHIP_SELECT, 10, channel_assignment_data);
183  // ----- Channel 12: Assign Sense Resistor -----
184  channel_assignment_data =
186  (uint32_t) 0x1F4000 << SENSE_RESISTOR_VALUE_LSB; // sense resistor - value: 2000.
187  assign_channel(CHIP_SELECT, 12, channel_assignment_data);
188  // ----- Channel 14: Assign RTD PT-100 -----
189  channel_assignment_data =
196  assign_channel(CHIP_SELECT, 14, channel_assignment_data);
197  // ----- Channel 16: Assign Type J Thermocouple -----
198  channel_assignment_data =
204  assign_channel(CHIP_SELECT, 16, channel_assignment_data);
205  // ----- Channel 18: Assign Sense Resistor -----
206  channel_assignment_data =
208  (uint32_t) 0x19000 << SENSE_RESISTOR_VALUE_LSB; // sense resistor - value: 100.
209  assign_channel(CHIP_SELECT, 18, channel_assignment_data);
210  // ----- Channel 20: Assign Thermistor 44006 10K@25C -----
211  channel_assignment_data =
217  assign_channel(CHIP_SELECT, 20, channel_assignment_data);
218 
219 }
220 
221 
222 
223 
225 {
226  // -- Set global parameters
229  // -- Set any extra delay between conversions (in this case, 0*100us)
231 }
232 
233 // -------------- Run the LTC2983 -------------------------------------
234 
235 void loop()
236 {
237  measure_channel(CHIP_SELECT, 1, TEMPERATURE); // Ch 1: Type J Thermocouple
238  measure_channel(CHIP_SELECT, 2, TEMPERATURE); // Ch 2: Off-Chip Diode
239  measure_channel(CHIP_SELECT, 3, TEMPERATURE); // Ch 3: Type N Thermocouple
240  measure_channel(CHIP_SELECT, 4, TEMPERATURE); // Ch 4: Off-Chip Diode
241  measure_channel(CHIP_SELECT, 5, TEMPERATURE); // Ch 5: Type K Thermocouple
242  measure_channel(CHIP_SELECT, 6, TEMPERATURE); // Ch 6: Type S Thermocouple
243  measure_channel(CHIP_SELECT, 7, TEMPERATURE); // Ch 7: Off-Chip Diode
244  measure_channel(CHIP_SELECT, 9, TEMPERATURE); // Ch 9: Type T Thermocouple
245  measure_channel(CHIP_SELECT, 10, TEMPERATURE); // Ch 10: Type E Thermocouple
246  measure_channel(CHIP_SELECT, 14, TEMPERATURE); // Ch 14: RTD PT-100
247  measure_channel(CHIP_SELECT, 16, TEMPERATURE); // Ch 16: Type J Thermocouple
248  measure_channel(CHIP_SELECT, 20, TEMPERATURE); // Ch 20: Thermistor 44006 10K@25C
249 }
static void configure_global_parameters()
#define SENSOR_TYPE__TYPE_K_THERMOCOUPLE
static void loop()
#define SENSOR_TYPE__TYPE_S_THERMOCOUPLE
#define TEMPERATURE
#define SENSOR_TYPE__TYPE_E_THERMOCOUPLE
void assign_channel(uint8_t chip_select, uint8_t channel_number, uint32_t channel_assignment_data)
#define TC_OPEN_CKT_DETECT__YES
Header File for Linduino Libraries and Demo Code.
#define TC_COLD_JUNCTION_CH__14
#define TC_COLD_JUNCTION_CH__20
static void setup()
#define RTD_STANDARD__AMERICAN
#define DIODE_NUM_READINGS__2
#define TC_SINGLE_ENDED
static void configure_channels()
#define SENSOR_TYPE__OFF_CHIP_DIODE
#define THERMISTOR_DIFFERENTIAL
#define RTD_NUM_WIRES__4_WIRE
LTC2983: Multi-Sensor High Accuracy Digital Temperature Measurement System.
#define THERMISTOR_EXCITATION_MODE__NO_SHARING_NO_ROTATION
QuikEval EEPROM Library.
#define TC_COLD_JUNCTION_CH__7
#define TC_COLD_JUNCTION_CH__2
#define RTD_RSENSE_CHANNEL__12
#define TC_COLD_JUNCTION_CH__4
#define SENSOR_TYPE__RTD_PT_100
#define DIODE_CURRENT__20UA_80UA_160UA
void quikeval_SPI_init(void)
Configure the SPI port for 4Mhz SCK.
Definition: LT_SPI.cpp:151
LTC2983: Multi-Sensor High Accuracy Digital Temperature Measurement System.
int8_t discover_demo_board(char *demo_name)
Read the ID string from the EEPROM and determine if the correct board is connected.
#define SENSOR_TYPE__THERMISTOR_44006_10K_25C
#define REJECTION__50_60_HZ
static void print_title()
Prints the title block when program first starts.
LT_SPI: Routines to communicate with ATmega328P&#39;s hardware SPI port.
void measure_channel(uint8_t chip_select, uint8_t channel_number, uint8_t channel_output)
#define DIODE_SINGLE_ENDED
#define DIODE_AVERAGING_ON
#define RTD_EXCITATION_CURRENT__100UA
#define SENSOR_TYPE__TYPE_T_THERMOCOUPLE
LT_I2C: Routines to communicate with ATmega328P&#39;s hardware I2C port.
#define THERMISTOR_EXCITATION_CURRENT__AUTORANGE
#define SENSOR_TYPE__TYPE_J_THERMOCOUPLE
char demo_name[]
Demo Board Name stored in QuikEval EEPROM.
Definition: DC1880A.ino:97
void quikeval_SPI_connect()
Connect SPI pins to QuikEval connector through the Linduino MUX. This will disconnect I2C...
Definition: LT_SPI.cpp:138
#define RTD_EXCITATION_MODE__ROTATION_SHARING
#define TC_OPEN_CKT_DETECT_CURRENT__10UA
#define DIODE_IDEALITY_FACTOR_LSB
void quikeval_I2C_init(void)
Initializes Linduino I2C port.
Definition: LT_I2C.cpp:394
#define SENSE_RESISTOR_VALUE_LSB
#define THERMISTOR_RSENSE_CHANNEL__18
#define SENSOR_TYPE__TYPE_N_THERMOCOUPLE
#define TC_DIFFERENTIAL
#define SENSOR_TYPE__SENSE_RESISTOR
#define CHIP_SELECT
uint8_t transfer_byte(uint8_t chip_select, uint8_t ram_read_or_write, uint16_t start_address, uint8_t input_data)