164 Serial.begin(115200);
178 uint8_t acknowledge = 0;
181 if (Serial.available())
184 if (user_command !=
'm')
185 Serial.println(user_command);
187 switch (user_command)
208 Serial.println(
"Incorrect Option");
211 Serial.println(
"***** SPI ERROR *****");
212 Serial.print(F(
"\n*************************\n"));
223 Serial.print(F(
"\n*****************************************************************\n"));
224 Serial.print(F(
"* DC742A Demonstration Program *\n"));
225 Serial.print(F(
"* *\n"));
226 Serial.print(F(
"* This program demonstrates how to send data and receive data *\n"));
227 Serial.print(F(
"* from the 24-bit ADC. *\n"));
228 Serial.print(F(
"* *\n"));
229 Serial.print(F(
"* *\n"));
230 Serial.print(F(
"* Set the baud rate to 115200 and select the newline terminator.*\n"));
231 Serial.print(F(
"* *\n"));
232 Serial.print(F(
"*****************************************************************\n"));
238 Serial.print(F(
"\n1-Read Single-Ended\n"));
239 Serial.print(F(
"2-Read Differential\n"));
240 Serial.print(F(
"3-Calibration\n"));
241 Serial.print(F(
"4-Oversample Ratio Settings\n"));
242 Serial.print(F(
"5-2X Mode Settings\n"));
243 Serial.print(F(
"6-Enable / Disable Calibration Key\n\n"));
244 Serial.print(F(
"Enter a Command: "));
254 Serial.print(
"0P-1N");
257 Serial.print(
"2P-3N");
260 Serial.print(
"4P-5N");
263 Serial.print(
"6P-7N");
266 Serial.print(
"8P-9N");
269 Serial.print(
"10P-11N");
272 Serial.print(
"12P-13N");
275 Serial.print(
"14P-15N");
278 Serial.print(
"1P-0N");
281 Serial.print(
"3P-2N");
284 Serial.print(
"5P-4N");
287 Serial.print(
"7P-6N");
290 Serial.print(
"9P-8N");
293 Serial.print(
"11P-10N");
296 Serial.print(
"13P-12N");
299 Serial.print(
"15P-14N");
316 Serial.print(F(
"*************************\n\n"));
317 Serial.print(F(
"0-CH0 8-CH8\n"));
318 Serial.print(F(
"1-CH1 9-CH9\n"));
319 Serial.print(F(
"2-CH2 10-CH10\n"));
320 Serial.print(F(
"3-CH3 11-CH11\n"));
321 Serial.print(F(
"4-CH4 12-CH12\n"));
322 Serial.print(F(
"5-CH5 13-CH13\n"));
323 Serial.print(F(
"6-CH6 14-CH14\n"));
324 Serial.print(F(
"7-CH7 15-CH15\n"));
325 Serial.print(F(
"16-ALL\n"));
326 Serial.print(F(
"m-Main Menu\n"));
327 Serial.print(
"Enter a Command: ");
330 if (user_command ==
'm')
332 Serial.println(user_command);
334 if (user_command == 16)
336 Serial.print(F(
"ALL\n"));
342 for (int8_t
x = 0;
x <= 15;
x++)
355 Serial.print(
" ****");
359 Serial.print(adc_voltage, 4);
360 Serial.print(F(
"V\n\n"));
366 Serial.print(
"\nADC Command: B");
367 Serial.println(adc_command, BIN);
380 Serial.print(
"Received Code: 0x");
381 Serial.println(adc_code, HEX);
383 Serial.print(
" ****");
385 Serial.print(user_command);
387 Serial.print(adc_voltage, 4);
388 Serial.print(F(
"V\n\n"));
406 Serial.print(F(
"\n*************************\n\n"));
407 Serial.print(F(
"0-0P-1N 8-1P-0N\n"));
408 Serial.print(F(
"1-2P-3N 9-3P-2N\n"));
409 Serial.print(F(
"2-4P-5N 10-5P-4N\n"));
410 Serial.print(F(
"3-6P-7N 11-7P-6N\n"));
411 Serial.print(F(
"4-8P-9N 12-9P-8N\n"));
412 Serial.print(F(
"5-10P-11N 13-11P-10N\n"));
413 Serial.print(F(
"6-12P_13N 14-13P-12N\n"));
414 Serial.print(F(
"7-14P-15N 15-15P-14N\n"));
415 Serial.print(F(
"16-ALL Even_P-Odd_N\n"));
416 Serial.print(F(
"17-ALL Odd_P-Even_N\n"));
417 Serial.print(F(
"m-Main Menu\n"));
420 if (user_command ==
'm')
422 Serial.println(user_command);
423 if ((user_command == 16) || (user_command == 17))
425 if (user_command == 16)
427 Serial.print(F(
"ALL Even_P-Odd_N\n"));
430 if (user_command == 17)
432 Serial.print(F(
"ALL Odd_P-Even_N\n"));
440 for (int8_t
x = 0;
x < 7;
x++)
452 Serial.print(
"Received Code: 0x");
453 Serial.println(adc_code, HEX);
455 Serial.print(
"\n ****");
458 Serial.print(adc_voltage, 4);
459 Serial.print(F(
"V\n"));
466 Serial.print(
"ADC Command: B");
467 Serial.println(adc_command, BIN);
480 Serial.print(
"Received Code: 0x");
481 Serial.println(adc_code, HEX);
483 Serial.print(
"\n ****");
485 Serial.print(adc_voltage, 4);
486 Serial.print(F(
"V\n"));
505 Serial.println(
"Apply 100mV to CH0 with respect to COM");
506 Serial.println(
"or apply a voltage for the lower point in two point calibration");
507 Serial.print(
"Enter the measured input voltage:");
509 Serial.println(zero_voltage, 6);
526 Serial.println(
"Apply ~2.40V input voltage to CH0.");
527 Serial.println(
"Enter the measured input voltage:");
539 Serial.print(
"ADC offset : ");
541 Serial.print(
" ADC lsb : ");
543 Serial.println(
"nV (32-bits)");
555 Serial.print(F(
"Oversample Ratio Settings\n"));
556 Serial.print(F(
"1-64\n"));
557 Serial.print(F(
"2-128\n"));
558 Serial.print(F(
"3-256\n"));
559 Serial.print(F(
"4-512\n"));
560 Serial.print(F(
"5-1024\n"));
561 Serial.print(F(
"6-2048\n"));
562 Serial.print(F(
"7-4096\n"));
563 Serial.print(F(
"8-8192\n"));
564 Serial.print(F(
"9-16384\n"));
565 Serial.print(F(
"10-32768\n"));
566 Serial.print(
"\nEnter a Command: ");
569 Serial.println(user_command);
573 Serial.print(
"\nADC OSR Command: B");
584 Serial.print(F(
"2X Mode Settings\n\n"));
585 Serial.print(F(
"0-Disable\n"));
586 Serial.print(F(
"1-Enable\n"));
587 Serial.print(F(
"Enter a Command: "));
589 Serial.println(user_command);
591 if (user_command == 0)
594 Serial.print(F(
"2X Mode Disabled\n"));
599 Serial.print(F(
"2X Mode Enabled\n"));
611 Serial.println(
"Calibration Stored to EEPROM");
620 Serial.println(F(
"Enable / Disable calibration key"));
621 Serial.println(F(
"0-Disable\n"));
622 Serial.println(F(
"1-Enable - use ONLY if you know a calibration has been performed previously\n"));
623 Serial.println(F(
"Enter a Command: "));
626 if (user_command == 0)
629 Serial.print(F(
"Calibration Disabled\n"));
634 Serial.print(F(
"Calibration Enabled\n"));
652 Serial.println(
"Calibration Restored");
657 Serial.println(
"Calibration not found");
static float LTC2449_lsb
Ideal LSB voltage for a perfect part.
static void setup()
Initialize Linduino.
uint8_t eeprom_read_int16(uint8_t i2c_address, int16_t *read_data, uint16_t address)
Read the two byte integer data from the EEPROM starting at address.
static int8_t menu_1_read_single_ended()
Read channels in single-ended mode.
static void menu_5_set_1X2X()
Set 1X or 2X mode.
unsigned char user_command
static uint8_t adc_command
#define EEPROM_I2C_ADDRESS
#define LTC2449_CS
Define the SPI CS pin.
const uint16_t BUILD_1X_2X_COMMAND[2]
Lookup table to build 1X / 2X bits.
#define LTC2449_OSR_32768
static int8_t menu_3_calibrate()
Calibrate ADC given two known inputs.
static uint8_t demo_board_connected
Set to 1 if the board is connected.
Header File for Linduino Libraries and Demo Code.
uint8_t eeprom_read_float(uint8_t i2c_address, float *read_data, uint16_t address)
Read the four byte float data from the EEPROM starting at address.
uint8_t eeprom_write_int32(uint8_t i2c_address, int32_t write_data, uint16_t address)
Write the 4 byte long data to the EEPROM starting at address.
static void store_calibration()
Store measured calibration parameters to nonvolatile EEPROM on demo board.
void LTC2449_cal_voltage(int32_t zero_code, int32_t fs_code, float zero_voltage, float fs_voltage, float *LTC2449_lsb, int32_t *LTC2449_offset_code)
Calculate the lsb weight and offset code given a full-scale code and a measured zero-code.
#define LTC2449_OSR_16384
const uint16_t MISO_TIMEOUT
MISO timeout constant.
static void menu_4_set_OSR()
Set Oversample Ratio (OSR)
static void print_user_command(uint8_t menu)
Display selected differential channels.
static int16_t OSR_mode
The LTC2449 OSR setting.
float LTC2449_code_to_voltage(int32_t adc_code, float LTC2449_lsb, int32_t LTC2449_offset_code)
Calculates the voltage corresponding to an adc code, given lsb weight (in volts) and the calibrated A...
uint8_t eeprom_write_float(uint8_t i2c_address, float write_data, uint16_t address)
Write the 4 byte float data to the EEPROM starting at address.
const uint16_t BUILD_COMMAND_SINGLE_ENDED[16]
Lookup table to build the command for single-ended mode.
uint8_t eeprom_write_int16(uint8_t i2c_address, int16_t write_data, uint16_t address)
Write the 2 byte integer data to the EEPROM starting at address.
void quikeval_SPI_init(void)
Configure the SPI port for 4Mhz SCK.
#define EEPROM_CAL_STATUS_ADDRESS
int8_t discover_demo_board(char *demo_name)
Read the ID string from the EEPROM and determine if the correct board is connected.
LT_SPI: Routines to communicate with ATmega328P's hardware SPI port.
LT_I2C: Routines to communicate with ATmega328P's hardware I2C port.
const uint16_t BUILD_COMMAND_DIFF[16]
Lookup table to build the command for differential mode.
const uint16_t BUILD_OSR_COMMAND[10]
Lookup table to build the command for OSR.
char demo_name[]
Demo Board Name stored in QuikEval EEPROM.
void quikeval_SPI_connect()
Connect SPI pins to QuikEval connector through the Linduino MUX. This will disconnect I2C...
uint8_t eeprom_read_int32(uint8_t i2c_address, int32_t *read_data, uint16_t address)
Read the four byte long data from the EEPROM starting at address.
LTC2449: 24-Bit, 16-Channel Delta Sigma ADCs with Selectable Speed/Resolution.
static int8_t menu_2_read_differential()
Read channels in differential mode.
static void print_title()
Prints the title block when program first starts.
static int16_t two_x_mode
The LTC2449 2X Mode settings.
void quikeval_I2C_init(void)
Initializes Linduino I2C port.
static int8_t restore_calibration()
Read stored calibration parameters from nonvolatile EEPROM on demo board.
static void print_prompt()
Prints main menu.
static int32_t LTC2449_offset_code
Ideal offset for a perfect part.
int8_t LTC2449_EOC_timeout(uint8_t cs, uint16_t miso_timeout)
Define the SPI CS pin.
static void loop()
Repeats Linduino loop.
static void menu_6_en_dis_cal()
Enable / Disable calibration without actually touching stored calibration values. ...
void LTC2449_read(uint8_t cs, uint16_t adc_command, uint32_t *adc_code)
Reads from LTC2449.