76 Serial.print(F(
"\n******************************************************************\n"));
77 Serial.print(F(
" LTC2984 Demonstration Program \n"));
78 Serial.print(F(
" \n"));
79 Serial.print(F(
" This program demonstrates how to read the multi-sensor \n"));
80 Serial.print(F(
" temperature measurement system. \n"));
81 Serial.print(F(
" \n"));
82 Serial.print(F(
" Set the baud rate to 115200 and select the newline terminator. \n"));
83 Serial.print(F(
"******************************************************************\n"));
89 void assign_channel(uint8_t chip_select, uint8_t channel_number, uint32_t channel_assignment_data)
104 SPI.transfer(highByte(start_address));
105 SPI.transfer(lowByte(start_address));
107 for (i=0; i< table_length; i++)
110 SPI.transfer((uint8_t)(coeff >> 16));
111 SPI.transfer((uint8_t)(coeff >> 8));
112 SPI.transfer((uint8_t)coeff);
115 SPI.transfer((uint8_t)(coeff >> 16));
116 SPI.transfer((uint8_t)(coeff >> 8));
117 SPI.transfer((uint8_t)coeff);
131 SPI.transfer(highByte(start_address));
132 SPI.transfer(lowByte(start_address));
134 for (i = 0; i < 6; i++)
136 coeff = steinhart_hart_coeffs[
i];
137 SPI.transfer((uint8_t)(coeff >> 24));
138 SPI.transfer((uint8_t)(coeff >> 16));
139 SPI.transfer((uint8_t)(coeff >> 8));
140 SPI.transfer((uint8_t)coeff);
154 uint8_t eeprom_status;
155 Serial.println(
"** EEPROM transfer started ** ");
168 if (eeprom_status == 0)
170 Serial.println(
"** EEPROM transfer succeeded ** ");
174 Serial.print(F(
"** EEPROM transfer had a problem. Status byte ="));
175 Serial.println(eeprom_status);
184 void measure_channel(uint8_t chip_select, uint8_t channel_number, uint8_t channel_output)
187 get_result(chip_select, channel_number, channel_output);
202 uint8_t process_finished = 0;
204 while (process_finished == 0)
207 process_finished = data & 0x40;
215 void get_result(uint8_t chip_select, uint8_t channel_number, uint8_t channel_output)
220 uint32_t raw_conversion_result;
224 Serial.print(F(
"\nChannel "));
225 Serial.println(channel_number);
228 raw_conversion_result = raw_data & 0xFFFFFF;
238 fault_data = raw_data >> 24;
245 int32_t signed_data = raw_conversion_result;
249 if (signed_data & 0x800000)
250 signed_data = signed_data | 0xFF000000;
255 scaled_result = float(signed_data) / 1024;
256 Serial.print(F(
" Temperature = "));
257 Serial.println(scaled_result);
259 else if (channel_output ==
VOLTAGE)
261 scaled_result = float(signed_data) / 2097152;
262 Serial.print(F(
" Direct ADC reading in V = "));
263 Serial.println(scaled_result);
272 float voltage_or_resistance_result;
276 voltage_or_resistance_result = (float)raw_data/1024;
277 Serial.print(F(
" Voltage or resistance = "));
278 Serial.println(voltage_or_resistance_result);
286 Serial.print(F(
" FAULT DATA = "));
287 Serial.println(fault_byte, BIN);
290 Serial.println(F(
" - SENSOR HARD FALURE"));
292 Serial.println(F(
" - ADC_HARD_FAILURE"));
294 Serial.println(F(
" - CJ_HARD_FAILURE"));
296 Serial.println(F(
" - CJ_SOFT_FAILURE"));
298 Serial.println(F(
" - SENSOR_ABOVE"));
300 Serial.println(F(
" - SENSOR_BELOW"));
302 Serial.println(F(
" - ADC_RANGE_ERROR"));
303 if (!(fault_byte &
VALID))
304 Serial.println(F(
"INVALID READING !!!!!!"));
305 if (fault_byte == 0b11111111)
306 Serial.println(F(
"CONFIGURATION ERROR !!!!!!"));
316 uint32_t
transfer_four_bytes(uint8_t chip_select, uint8_t ram_read_or_write, uint16_t start_address, uint32_t input_data)
318 uint32_t output_data;
319 uint8_t tx[7], rx[7];
321 tx[6] = ram_read_or_write;
322 tx[5] = highByte(start_address);
323 tx[4] = lowByte(start_address);
324 tx[3] = (uint8_t)(input_data >> 24);
325 tx[2] = (uint8_t)(input_data >> 16);
326 tx[1] = (uint8_t)(input_data >> 8);
327 tx[0] = (uint8_t) input_data;
331 output_data = (uint32_t) rx[3] << 24 |
332 (uint32_t) rx[2] << 16 |
333 (uint32_t) rx[1] << 8 |
340 uint8_t
transfer_byte(uint8_t chip_select, uint8_t ram_read_or_write, uint16_t start_address, uint8_t input_data)
342 uint8_t tx[4], rx[4];
344 tx[3] = ram_read_or_write;
345 tx[2] = (uint8_t)(start_address >> 8);
346 tx[1] = (uint8_t)start_address;
358 return base_address + 4 * (channel_number-1);
366 for (uint8_t
i=0;
i< array_length;
i++)
368 if (number == array[
i])
#define CONVERSION_RESULT_MEMORY_BASE
#define EEPROM_START_ADDRESS
#define SENSOR_HARD_FAILURE
uint8_t transfer_byte(uint8_t chip_select, uint8_t ram_read_or_write, uint16_t start_address, uint8_t input_data)
void print_title()
Prints the title block when program first starts.
#define output_high(pin)
Set "pin" high.
Header File for Linduino Libraries and Demo Code.
#define EEPROM_STATUS_REGISTER
void get_result(uint8_t chip_select, uint8_t channel_number, uint8_t channel_output)
void wait_for_process_to_finish(uint8_t chip_select)
LTC2984: Multi-Sensor High Accuracy Digital Temperature Measurement System.
#define CONVERSION_CONTROL_BYTE
uint16_t get_start_address(uint16_t base_address, uint8_t channel_number)
#define COMMAND_STATUS_REGISTER
LTC2983: Multi-Sensor High Accuracy Digital Temperature Measurement System.
void eeprom_transfer(uint8_t chip_select, uint8_t eeprom_read_or_write)
union LT_union_int32_4bytes data
#define output_low(pin)
Set "pin" low.
void convert_channel(uint8_t chip_select, uint8_t channel_number)
void print_fault_data(uint8_t fault_byte)
uint32_t transfer_four_bytes(uint8_t chip_select, uint8_t ram_read_or_write, uint16_t start_address, uint32_t input_data)
void print_conversion_result(uint32_t raw_conversion_result, uint8_t channel_output)
void write_custom_steinhart_hart(uint8_t chip_select, uint32_t steinhart_hart_coeffs[6], uint16_t start_address)
LT_SPI: Routines to communicate with ATmega328P's hardware SPI port.
LT_I2C: Routines to communicate with ATmega328P's hardware I2C port.
LTC2984: Multi-Sensor High Accuracy Digital Temperature Measurement System.
void assign_channel(uint8_t chip_select, uint8_t channel_number, uint32_t channel_assignment_data)
void write_custom_table(uint8_t chip_select, struct table_coeffs coefficients[64], uint16_t start_address, uint8_t table_length)
void read_voltage_or_resistance_results(uint8_t chip_select, uint8_t channel_number)
void spi_transfer_block(uint8_t cs_pin, uint8_t *tx, uint8_t *rx, uint8_t length)
Reads and sends a byte array.
bool is_number_in_array(uint8_t number, uint8_t *array, uint8_t array_length)
void measure_channel(uint8_t chip_select, uint8_t channel_number, uint8_t channel_output)