Linduino  1.3.0
Linear Technology Arduino-Compatible Demonstration Board
DC2507A_MULTI_SENSOR_BOARD.ino
Go to the documentation of this file.
1 /*!
2 LTC2986: Multi-Sensor High Accuracy Digital Temperature Measurement System
3 @verbatim
4 
5 DC2507A_MULTI_SENSOR_BOARD.ino:
6 Generated Linduino code from the LTC2986 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 LTC2986.
9 
10 
11 @endverbatim
12 
13 http://www.linear.com/product/LTC2986
14 
15 http://www.linear.com/product/LTC2986#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 LTC2986
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_LTC2986.h"
77 
78 #define CHIP_SELECT QUIKEVAL_CS // Chip select pin
79 
80 // Function prototypes
82 void configure_channels();
84 
85 
86 // -------------- Configure the LTC2986 -------------------------------
87 void setup()
88 {
89  char demo_name[]="DC2508"; // Demo Board Name stored in QuikEval EEPROM
90  quikeval_I2C_init(); // Configure the EEPROM I2C port for 100kHz
91  quikeval_SPI_init(); // Configure the spi port for 4MHz SCK
92  quikeval_SPI_connect(); // Connect SPI to main data port
93  pinMode(CHIP_SELECT, OUTPUT); // Configure chip select pin on Linduino
94 
95  Serial.begin(115200); // Initialize the serial port to the PC
96  print_title();
97  discover_demo_board(demo_name);
98 
102 }
103 
104 
106 {
107  uint8_t channel_number;
108  uint32_t channel_assignment_data;
109 
110  // ----- Channel 2: Assign Sense Resistor -----
111  channel_assignment_data =
113  (uint32_t) 0x1F4000 << SENSE_RESISTOR_VALUE_LSB; // sense resistor - value: 2000.
114  assign_channel(CHIP_SELECT, 2, channel_assignment_data);
115  // ----- Channel 9: Assign Off-Chip Diode -----
116  channel_assignment_data =
122  (uint32_t) 0x100C49 << DIODE_IDEALITY_FACTOR_LSB; // diode - ideality factor(eta): 1.00299930572509765625
123  assign_channel(CHIP_SELECT, 9, channel_assignment_data);
124  // ----- Channel 10: Assign Active Analog -----
125  channel_assignment_data =
128  (uint32_t) 0x0 << ACTIVE_ANALOG_CUSTOM_ADDRESS_LSB | // active analog - custom address: 0.
129  (uint32_t) 0x2 << ACTIVE_ANALOG_CUSTOM_LENGTH_1_LSB; // active analog - custom length-1: 2.
130  assign_channel(CHIP_SELECT, 10, channel_assignment_data);
131 
132 }
133 
134 
136 {
137  uint16_t start_address;
138  uint16_t table_length;
139  // int i;
140 
141  // -- Channel 10 custom table --
142  table_coeffs ch_10_coefficients[] =
143  {
144  { 0, 0 }, // -- 0.0, 0.0
145  { 3819930, 238746 }, // -- 932.6, 233.15
146  { 6523290, 407706 } // -- 1592.6, 398.15
147  };
148  start_address = (uint16_t) 592; // Real address = 6*0 + 0x250 = 592
149  table_length = (uint8_t) 3; // Real table length = 2 + 1 = 3
150  write_custom_table(CHIP_SELECT, ch_10_coefficients, start_address, table_length);
151 
152 
153 }
154 
155 
156 
158 {
159  // -- Set global parameters
165  // -- Set any extra delay between conversions (in this case, 0*100us)
167 }
168 
169 // -------------- Run the LTC2986 -------------------------------------
170 
171 void loop()
172 {
173  measure_channel(CHIP_SELECT, 9, TEMPERATURE); // Ch 9: Off-Chip Diode
174  measure_channel(CHIP_SELECT, 10, TEMPERATURE); // Ch 10: Active Analog
175 }
#define TEMPERATURE
#define ENABLE_KELVIN_DIFFERENTIAL_THERMISTOR_MODE
#define ACTIVE_ANALOG_CUSTOM_LENGTH_1_LSB
#define SENSOR_TYPE__ACTIVE_ANALOG
void assign_channel(uint8_t chip_select, uint8_t channel_number, uint32_t channel_assignment_data)
Header File for Linduino Libraries and Demo Code.
#define DIODE_NUM_READINGS__3
#define CHIP_SELECT
LTC2983: Multi-Sensor High Accuracy Digital Temperature Measurement System.
#define SENSOR_TYPE__OFF_CHIP_DIODE
QuikEval EEPROM Library.
LTC2986: Multi-Sensor High Accuracy Digital Temperature Measurement System.
#define DIODE_CURRENT__20UA_80UA_160UA
void quikeval_SPI_init(void)
Configure the SPI port for 4Mhz SCK.
Definition: LT_SPI.cpp:151
int8_t discover_demo_board(char *demo_name)
Read the ID string from the EEPROM and determine if the correct board is connected.
#define REJECTION__50_60_HZ
static void print_title()
Prints the title block when program first starts.
void write_custom_table(uint8_t chip_select, struct table_coeffs coefficients[64], uint16_t start_address, uint8_t table_length)
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 ENABLE_KELVIN_2_WIRE_RTD_MODE
#define DIODE_SINGLE_ENDED
static void setup()
#define ACTIVE_ANALOG_SINGLE_ENDED
LT_I2C: Routines to communicate with ATmega328P&#39;s hardware I2C port.
#define DIODE_AVERAGING_OFF
char demo_name[]
Demo Board Name stored in QuikEval EEPROM.
Definition: DC1880A.ino:97
static void configure_global_parameters()
void quikeval_SPI_connect()
Connect SPI pins to QuikEval connector through the Linduino MUX. This will disconnect I2C...
Definition: LT_SPI.cpp:138
static void loop()
LTC2986: Multi-Sensor High Accuracy Digital Temperature Measurement System.
#define DIODE_IDEALITY_FACTOR_LSB
static void configure_channels()
static void configure_memory_table()
void quikeval_I2C_init(void)
Initializes Linduino I2C port.
Definition: LT_I2C.cpp:394
#define SENSE_RESISTOR_VALUE_LSB
#define ACTIVE_ANALOG_CUSTOM_ADDRESS_LSB
#define SENSOR_TYPE__SENSE_RESISTOR
#define ENABLE_KELVIN_3_WIRE_RTD_MODE
uint8_t transfer_byte(uint8_t chip_select, uint8_t ram_read_or_write, uint16_t start_address, uint8_t input_data)