99 int8_t
menu_5_settings(uint8_t *CTRLREG_MSB, uint8_t *CTRLREG_LSB, uint8_t *ILIM_ADJUST, uint8_t *CLK_DECIMATOR);
109 #define CONTINUOUS_MODE_DISPLAY_DELAY 2000 118 const char ack_error[] =
"Error: No Acknowledge. Check I2C Address.";
127 Serial.println(F(
"\n*****************************************************************"));
128 Serial.print(F(
"* DC2024 Demonstration Program *\n"));
129 Serial.print(F(
"* *\n"));
130 Serial.print(F(
"* This program communicates with the LTC4282 High Current *\n"));
131 Serial.print(F(
"* Hot-Swap Controller with I2C Monitoring Capability found on *\n"));
132 Serial.print(F(
"* the DC2024 Demoboard. *\n"));
133 Serial.print(F(
"* Set the baud rate to 115200 and select the newline terminator.*\n"));
134 Serial.print(F(
"* *\n"));
135 Serial.print(F(
"*****************************************************************\n"));
141 Serial.print(F(
"\n1-Continuous Mode\n"));
142 Serial.print(F(
"2-Set Alarm Thresholds\n"));
143 Serial.print(F(
"3-View/Clear Faults\n"));
144 Serial.print(F(
"4-Set Alert Registers\n"));
145 Serial.print(F(
"5-Device Settings\n"));
146 Serial.print(F(
"Enter a command: "));
158 Serial.begin(115200);
163 Serial.println(F(
"Demo board not detected, will attempt to proceed"));
195 if (Serial.available())
198 if (user_command !=
'm')
199 Serial.println(user_command);
202 switch (user_command)
217 menu_5_settings(&CTRLREG_MSB, &CTRLREG_MSB, &ILIM_ADJUST, &CLK_DECIMATOR);
220 Serial.println(
"Incorrect Option");
225 Serial.print(F(
"*************************"));
234 uint8_t CLK_DECIMATOR,
241 uint16_t voltage_code;
242 uint16_t current_code;
289 uint8_t adc_alert_log;
292 float vsource, vsource_min, vsource_max;
302 float vgpio, vgpio_min, vgpio_max;
312 float current, current_min, current_max;
322 float power, power_min, power_max;
335 Serial.println(F(
"***********Voltage************"));
336 Serial.print(F(
"Min Voltage: "));
337 Serial.print(vsource_min);
338 Serial.print(F(
"V\n"));
339 Serial.print(F(
"Reading: "));
340 Serial.print(vsource);
341 Serial.print(F(
"V\n"));
342 Serial.print(F(
"Max Voltage: "));
343 Serial.print(vsource_max);
344 Serial.println(F(
"V"));
345 Serial.print(F(
"\n"));
350 Serial.print(F(
"ALERT - VOLTAGE MAXIMUM THRESHOLD EXCEEDED\n"));
354 Serial.print(F(
"ALERT - VOLTAGE MINIMUM THRESHOLD EXCEEDED\n"));
357 Serial.print(F(
"\n"));
360 Serial.println(F(
"***********Current************"));
361 Serial.print(F(
"Min Current: "));
362 Serial.print(current_min);
363 Serial.println(F(
"A"));
364 Serial.print(F(
"Reading : "));
365 Serial.print(current);
366 Serial.println(F(
"A"));
367 Serial.print(F(
"Max Current: "));
368 Serial.print(current_max);
369 Serial.println(F(
"A"));
374 Serial.print(F(
"ALERT - CURRENT MAXIMUM THRESHOLD EXCEEDED\n"));
378 Serial.print(F(
"ALERT - CURRENT MINIMUM THRESHOLD EXCEEDED\n"));
381 Serial.print(F(
"\n"));
384 Serial.println(F(
"***********VGPIO************"));
385 Serial.print(F(
"Min VGPIO: "));
386 Serial.print(vgpio_min);
387 Serial.println(F(
"V"));
388 Serial.print(F(
"Reading : "));
390 Serial.println(F(
"V"));
391 Serial.print(F(
"Max VGPIO: "));
392 Serial.print(vgpio_max);
393 Serial.println(F(
"V"));
398 Serial.print(F(
"ALERT - VGPIO MAXIMUM THRESHOLD EXCEEDED\n"));
402 Serial.print(F(
"ALERT - VGPIO MINIMUM THRESHOLD EXCEEDED\n"));
405 Serial.print(F(
"\n"));
408 Serial.println(F(
"***********Power************"));
409 Serial.print(F(
"Min Power: "));
410 Serial.print(power_min);
411 Serial.println(F(
"W"));
412 Serial.print(F(
"Reading : "));
414 Serial.println(F(
"W"));
415 Serial.print(F(
"Max Power: "));
416 Serial.print(power_max);
417 Serial.println(F(
"W"));
422 Serial.print(F(
"ALERT - POWER MAXIMUM THRESHOLD EXCEEDED\n"));
426 Serial.print(F(
"ALERT - POWER MINIMUM THRESHOLD EXCEEDED\n"));
429 Serial.print(F(
"\n"));
441 Serial.println(F(
"***********Coulombs************"));
442 Serial.print(F(
"Meter: "));
443 Serial.print(coulombs);
444 Serial.println(F(
"C"));
445 Serial.print(F(
"Avg Current : "));
446 Serial.print(avg_current);
447 Serial.println(F(
"A"));
460 Serial.println(F(
"***********Energy************"));
461 Serial.print(F(
"Meter: "));
462 Serial.print(energy);
463 Serial.println(F(
"J"));
464 Serial.print(F(
"Avg Power : "));
465 Serial.print(avg_power);
466 Serial.println(F(
"W"));
470 Serial.println(F(
"\n"));
473 Serial.println(F(
"***********Time************"));
474 Serial.print(F(
"Internal Time: "));
475 Serial.print(time_code*tConv);
476 Serial.println(F(
"S"));
478 Serial.println(F(
"\n"));
484 while (Serial.available() ==
false);
497 uint8_t alarm_reg_code = 0;
520 Serial.println(F(
"****CURRENT THRESHOLDS****"));
523 Serial.print(F(
"Voltage Maximum Alarm = "));
524 Serial.print(alarmValue);
525 Serial.println(F(
"V"));
529 Serial.print(F(
"Voltage Minimum Alarm = "));
530 Serial.print(alarmValue);
531 Serial.println(F(
"V"));
535 Serial.print(F(
"Current Maximum Alarm = "));
536 Serial.print(alarmValue);
537 Serial.println(F(
"A"));
541 Serial.print(F(
"Current Minimum Alarm = "));
542 Serial.print(alarmValue);
543 Serial.println(F(
"A"));
547 Serial.print(F(
"VGPIO Maximum Alarm = "));
548 Serial.print(alarmValue);
549 Serial.println(F(
"V"));
553 Serial.print(F(
"VGPIO Minimum Alarm = "));
554 Serial.print(alarmValue);
555 Serial.println(F(
"V\n"));
559 Serial.print(F(
"Power Maximum Alarm = "));
560 Serial.print(alarmValue);
561 Serial.println(F(
"W\n"));
563 Serial.println(alarm_reg_code);
567 Serial.print(F(
"Power Minimum Alarm = "));
568 Serial.print(alarmValue);
569 Serial.println(F(
"W\n"));
572 Serial.println(F(
"****ENTER THRESHOLD VALUES****"));
573 Serial.print(F(
"Enter Voltage Maximum Alarm = "));
575 Serial.println(voltage_maximum);
576 Serial.print(F(
"Enter Voltage Minimum Alarm = "));
578 Serial.println(voltage_minimum);
579 Serial.print(F(
"Enter Current Maximum Alarm = "));
581 Serial.println(current_maximum);
582 Serial.print(F(
"Enter Current Minimum Alarm = "));
584 Serial.println(current_minimum);
585 Serial.print(F(
"Enter VGPIO Maximum Alarm = "));
587 Serial.println(vgpio_maximum);
588 Serial.print(F(
"Enter VGPIO Minimum Alarm = "));
590 Serial.println(vgpio_minimum);
591 Serial.print(F(
"Enter Power Maximum Alarm = "));
593 Serial.println(power_maximum);
594 Serial.print(F(
"Enter Power Minimum Alarm = "));
596 Serial.println(power_minimum);
639 Serial.print(F(
"****Fault Menu****\n\n"));
640 Serial.print(F(
"1 - View Faults\n"));
641 Serial.print(F(
"2 - Clear All Faults\n"));
642 Serial.print(F(
"m-Main Menu\n"));
644 Serial.print(F(
"\n\nEnter a Command: "));
646 if (user_command ==
'm')
650 Serial.println(user_command);
654 switch (user_command)
664 if (user_command !=
'm')
665 Serial.println(
"Incorrect Option");
670 while (!((user_command ==
'm') || (ack)));
682 uint8_t fault_code = 0;
683 uint8_t adc_alert_code = 0;
690 Serial.print(F(
"****FAULT LOG****\n"));
694 Serial.println(F(
"NO FAULTS LOGGED"));
700 Serial.println(F(
"EEPROM DONE = TRUE"));
704 Serial.println(F(
"FET BAD FAULT = TRUE"));
708 Serial.println(F(
"FET SHORT FAULT = TRUE"));
712 Serial.println(F(
"ON PIN FAULT = True"));
716 Serial.println(F(
"POWER BAD FAULT = TRUE"));
720 Serial.println(F(
"OVER CURRENT FAULT = TRUE"));
724 Serial.println(F(
"UNDER VOLTAGE FAULT = TRUE"));
728 Serial.println(F(
"OVER VOLTAGE FAULT = TRUE"));
733 Serial.print(F(
"\n****ADC ALERT LOG****\n"));
735 if (adc_alert_code == 0)
737 Serial.println(F(
"NO ALERTS LOGGED"));
743 Serial.println(F(
"ALERT - POWER ALARM HIGH"));
747 Serial.println(F(
"ALERT - POWER ALARM LOW"));
751 Serial.println(F(
"ALERT - VSENSE ALARM HIGH"));
755 Serial.println(F(
"ALERT - VSENSE ALARM LOW"));
759 Serial.println(F(
"ALERT - VSOURCE ALARM HIGH"));
763 Serial.println(F(
"ALERT - VSOURCE ALARM LOW"));
767 Serial.println(F(
"ALERT - VGPIO ALARM HIGH"));
771 Serial.println(F(
"ALERT VGPIO ALARM LOW\n"));
775 Serial.println(F(
"\n***************************************\n"));
786 uint8_t fault_code = 0x00;
787 uint8_t adc_alert_code = 0x00;
791 Serial.println(
"ALL FAULTS CLEARED");
810 Serial.print(F(
"****Alert Register Menu****\n\n"));
811 Serial.print(F(
"1 - Set Alert MSB Register\n"));
812 Serial.print(F(
"2 - Set Alert LSB Register\n"));
813 Serial.print(F(
"m-Main Menu\n"));
815 Serial.print(F(
"\n\nEnter a Command: "));
817 if (user_command ==
'm')
821 Serial.println(user_command);
825 switch (user_command)
835 if (user_command !=
'm')
836 Serial.println(
"Incorrect Option");
841 while (!((user_command ==
'm') || (ack)));
855 uint8_t ALERTREG = 0;
859 Serial.println(F(
"****SET ALERT REGISTERS****"));
860 Serial.println(F(
"Use Numeric Commands: No = 0, Yes = 1"));
861 Serial.print(F(
"ENABLE EEPROM DONE ALERT? = "));
863 Serial.println(alertEnable);
873 Serial.print(F(
"ENABLE FET BAD FAULT ALERT? = "));
875 Serial.println(alertEnable);
885 Serial.print(F(
"ENABLE FET SHORT FAULT? = "));
887 Serial.println(alertEnable);
897 Serial.print(F(
"ENABLE ON ALERT? = "));
899 Serial.println(alertEnable);
909 Serial.print(F(
"ENABLE POWER BAD FAULT ALERT? = "));
911 Serial.println(alertEnable);
921 Serial.print(F(
"ENABLE OVER CURRENT FAULT ALERT? = "));
923 Serial.println(alertEnable);
933 Serial.print(F(
"ENABLE UNDERVOLTAGE FAULT ALERT? = "));
935 Serial.println(alertEnable);
945 Serial.print(F(
"ENABLE OVERVOLTAGE FAULT ALERT? = "));
947 Serial.println(alertEnable);
959 Serial.println(F(
"Alert MSB Register Updated\n"));
970 uint8_t ALERTREG = 0;
974 Serial.println(F(
"****SET ALERT REGISTERS****"));
975 Serial.println(F(
"Use Numeric Commands: No = 0, Yes = 1"));
976 Serial.print(F(
"ENABLE POWER ALARM HIGH ALERT? = "));
978 Serial.println(alertEnable);
988 Serial.print(F(
"ENABLE POWER ALARM LOW ALERT? = "));
990 Serial.println(alertEnable);
1000 Serial.print(F(
"ENABLE VSENSE ALARM HIGH ALERT? = "));
1002 Serial.println(alertEnable);
1012 Serial.print(F(
"ENABLE VSENSE ALARM LOW ALERT? = "));
1014 Serial.println(alertEnable);
1024 Serial.print(F(
"ENABLE VSOURCE ALARM HIGH ALERT? = "));
1026 Serial.println(alertEnable);
1036 Serial.print(F(
"ENABLE VSOURCE ALARM LOW ALERT? = "));
1038 Serial.println(alertEnable);
1048 Serial.print(F(
"ENABLE VGPIO ALARM HIGH ALERT? = "));
1050 Serial.println(alertEnable);
1060 Serial.print(F(
"ENABLE VGPIO ALARM LOW ALERT? = "));
1062 Serial.println(alertEnable);
1074 Serial.println(F(
"Alert LSB Register Updated\n"));
1081 uint8_t *CTRLREG_LSB,
1082 uint8_t *ILIM_ADJUST,
1083 uint8_t *CLK_DECIMATOR
1096 Serial.print(F(
"****Settings Menu****\n\n"));
1097 Serial.print(F(
"1 - Set Control MSB Register\n"));
1098 Serial.print(F(
"2 - Set Control LSB Register\n"));
1099 Serial.print(F(
"3 - Set ILIM Register\n"));
1100 Serial.print(F(
"4 - Configure GPIO Pins\n"));
1101 Serial.print(F(
"5 - Write Register Values to EEPROM\n"));
1102 Serial.print(F(
"6 - Update Register Values From EEPROM\n"));
1103 Serial.print(F(
"m-Main Menu\n"));
1105 Serial.print(F(
"\n\nEnter a Command: "));
1107 if (user_command ==
'm')
1108 Serial.println(
"m");
1111 Serial.println(user_command);
1115 switch (user_command)
1136 if (user_command !=
'm')
1137 Serial.println(F(
"Incorrect Option"));
1142 while (!((user_command ==
'm') || (ack)));
1154 Serial.println(F(
"****SET MSB CONTROL REGISTERS****"));
1155 Serial.println(F(
"Use Numeric Commands: DISABLE = 0, ENABLE = 1"));
1156 Serial.print(F(
"ENABLE ON FAULT MASK? = "));
1158 Serial.println(controlEnable);
1169 Serial.print(F(
"ENABLE 50ms ON DELAY? = "));
1171 Serial.println(controlEnable);
1181 Serial.print(F(
"ENABLE ON ACTIVE HIGH? = "));
1183 Serial.println(controlEnable);
1193 Serial.print(F(
"ENABLE MASS WRITE? = "));
1195 Serial.println(controlEnable);
1205 Serial.print(F(
"ENABLE FET TURN ON? = "));
1207 Serial.println(controlEnable);
1217 Serial.print(F(
"ENABLE OVERCURRENT AUTORETRY? = "));
1219 Serial.println(controlEnable);
1229 Serial.print(F(
"ENABLE UNDERVOLTAGE AUTORETRY? = "));
1231 Serial.println(controlEnable);
1241 Serial.print(F(
"ENABLE OVERVOLTAGE AUTORETRY? = "));
1243 Serial.println(controlEnable);
1256 Serial.println(F(
"Control MSB Register Updated\n"));
1270 Serial.println(F(
"****SET LSB CONTROL REGISTERS****"));
1271 Serial.print(F(
"SELECT POWER GOOD THRESHOLD:\n"));
1272 Serial.print(F(
" 1. EXTERNAL\n"));
1273 Serial.print(F(
" 2. 5%\n"));
1274 Serial.print(F(
" 3. 10%\n"));
1275 Serial.print(F(
" 4. 15%\n"));
1278 Serial.print(F(
"Selected Value: "));
1279 Serial.print(user_command);
1280 Serial.print(F(
"\n"));
1281 switch (user_command)
1288 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_FB_MODE_MASK) | (
LTC4282_FB_MODE_5 & LTC4282_FB_MODE_MASK);
1291 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_FB_MODE_MASK) | (
LTC4282_FB_MODE_10 & LTC4282_FB_MODE_MASK);
1294 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_FB_MODE_MASK) | (
LTC4282_FB_MODE_15 & LTC4282_FB_MODE_MASK);
1297 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1301 Serial.print(F(
"SELECT UV THRESHOLD:\n"));
1302 Serial.print(F(
" 1. EXTERNAL\n"));
1303 Serial.print(F(
" 2. 5%\n"));
1304 Serial.print(F(
" 3. 10%\n"));
1305 Serial.print(F(
" 4. 15%\n"));
1308 Serial.print(F(
"Selected Value: "));
1309 Serial.print(user_command);
1310 Serial.print(F(
"\n"));
1311 switch (user_command)
1318 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_UV_MODE_MASK) | (
LTC4282_UV_MODE_5 & LTC4282_UV_MODE_MASK);
1321 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_UV_MODE_MASK) | (
LTC4282_UV_MODE_10 & LTC4282_UV_MODE_MASK);
1324 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_UV_MODE_MASK) | (
LTC4282_UV_MODE_15 & LTC4282_UV_MODE_MASK);
1327 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1331 Serial.print(F(
"SELECT OV THRESHOLD:\n"));
1332 Serial.print(F(
" 1. EXTERNAL\n"));
1333 Serial.print(F(
" 2. 5%\n"));
1334 Serial.print(F(
" 3. 10%\n"));
1335 Serial.print(F(
" 4. 15%\n"));
1338 Serial.print(F(
"Selected Value: "));
1339 Serial.print(user_command);
1340 Serial.print(F(
"\n"));
1341 switch (user_command)
1348 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_OV_MODE_MASK) | (
LTC4282_OV_MODE_5 & LTC4282_OV_MODE_MASK);
1351 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_OV_MODE_MASK) | (
LTC4282_OV_MODE_10 & LTC4282_OV_MODE_MASK);
1354 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_OV_MODE_MASK) | (
LTC4282_OV_MODE_15 & LTC4282_OV_MODE_MASK);
1357 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1361 Serial.print(F(
"SELECT VIN MODE:\n"));
1362 Serial.print(F(
" 1. 3.3V\n"));
1363 Serial.print(F(
" 2. 5V\n"));
1364 Serial.print(F(
" 3. 12V\n"));
1365 Serial.print(F(
" 4. 24V\n"));
1368 Serial.print(F(
"Selected Value: "));
1369 Serial.print(user_command);
1370 Serial.print(F(
"\n"));
1371 switch (user_command)
1378 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_VIN_MODE_MASK) | (
LTC4282_VIN_MODE_5_V & LTC4282_VIN_MODE_MASK);
1381 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_VIN_MODE_MASK) | (
LTC4282_VIN_MODE_12_V & LTC4282_VIN_MODE_MASK);
1384 *CTRLREG_LSB = (*CTRLREG_LSB & ~LTC4282_VIN_MODE_MASK) | (
LTC4282_VIN_MODE_24_V & LTC4282_VIN_MODE_MASK);
1387 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1393 Serial.println(F(
"Control LSB Register Updated\n"));
1407 Serial.println(F(
"****SET ILIM ADJUST REGISTER****"));
1408 Serial.print(F(
"SELECT CURRENT LIMIT THRESHOLD:\n"));
1409 Serial.print(F(
" 1. 34.3mV\n"));
1410 Serial.print(F(
" 2. 31.25mV\n"));
1411 Serial.print(F(
" 3. 28.12mV\n"));
1412 Serial.print(F(
" 4. 25mV\n"));
1413 Serial.print(F(
" 5. 21.87mV\n"));
1414 Serial.print(F(
" 6. 18.75mV\n"));
1415 Serial.print(F(
" 7. 15.62mV\n"));
1416 Serial.print(F(
" 8. 12.5mV\n"));
1418 Serial.print(F(
"Selected Value: "));
1419 Serial.println(user_command);
1420 Serial.print(F(
"\n"));
1421 switch (user_command)
1449 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1453 Serial.print(F(
"SELECT FOLDBACK MODE:\n"));
1454 Serial.print(F(
" 1. 3.3V\n"));
1455 Serial.print(F(
" 2. 5V\n"));
1456 Serial.print(F(
" 3. 12V\n"));
1457 Serial.print(F(
" 4. 24V\n"));
1459 Serial.print(F(
"Selected Value: "));
1460 Serial.println(user_command);
1461 Serial.print(F(
"\n"));
1462 switch (user_command)
1478 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1482 Serial.print(F(
"SELECT ADC VOLTAGE MONITOR MODE:\n"));
1483 Serial.print(F(
" 1. SOURCE\n"));
1484 Serial.print(F(
" 2. VDD\n"));
1486 Serial.print(F(
"Selected Value: "));
1487 Serial.println(user_command);
1488 Serial.print(F(
"\n"));
1489 switch (user_command)
1498 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1502 Serial.print(F(
"SELECT GPIO MONITOR MODE:\n"));
1503 Serial.print(F(
" 1. GPIO2\n"));
1504 Serial.print(F(
" 2. GPIO3\n"));
1506 Serial.print(F(
"Selected Value: "));
1507 Serial.println(user_command);
1508 Serial.print(F(
"\n"));
1509 switch (user_command)
1518 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1523 Serial.print(F(
"SELECT ADC RESOLUTION:\n"));
1524 Serial.print(F(
" 1. 16-bit\n"));
1525 Serial.print(F(
" 2. 12-bit\n"));
1527 Serial.print(F(
"Selected Value: "));
1528 Serial.println(user_command);
1529 Serial.print(F(
"\n"));
1530 switch (user_command)
1539 Serial.println(F(
"Invalid entry. Exiting Menu.."));
1545 Serial.println(F(
"Control LSB Register Updated\n"));
1556 uint8_t gpio_config_code;
1561 Serial.println(F(
"****SET GPIO_CONFIG REGISTER****"));
1562 Serial.print(F(
"Set GPIO3 Pulldown: \n"));
1563 Serial.print(F(
" 1. Enable\n"));
1564 Serial.print(F(
" 2. Disable\n"));
1566 Serial.print(F(
"Selected Value: "));
1567 Serial.println(user_command);
1568 Serial.print(F(
"\n"));
1569 switch (user_command)
1578 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1581 Serial.print(F(
"Set GPIO2 Pulldown: \n"));
1582 Serial.print(F(
" 1. Enable\n"));
1583 Serial.print(F(
" 2. Disable\n"));
1585 Serial.print(F(
"Selected Value: "));
1586 Serial.println(user_command);
1587 Serial.print(F(
"\n"));
1588 switch (user_command)
1597 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1600 Serial.print(F(
"Configure GPIO1: \n"));
1601 Serial.print(F(
" 1. Power Good\n"));
1602 Serial.print(F(
" 2. Power Bad\n"));
1603 Serial.print(F(
" 3. General Purpose Output\n"));
1604 Serial.print(F(
" 4. General Purpose Input\n"));
1606 Serial.print(F(
"Selected Value: "));
1607 Serial.println(user_command);
1608 Serial.print(F(
"\n"));
1609 switch (user_command)
1620 Serial.print(F(
"GPIO1 Configured as output..\n"));
1621 Serial.print(F(
"Set Pull Down: \n"));
1622 Serial.print(F(
" 1. Enable\n"));
1623 Serial.print(F(
" 2. Disable\n"));
1625 Serial.print(F(
"Selected Value: "));
1626 Serial.println(user_command);
1627 Serial.print(F(
"\n"));
1628 switch (user_command)
1637 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1642 gpio_config_code = (gpio_config_code & ~LTC4282_GPIO1_CONFIG_MASK) | (
LTC4282_GPIO1_CONFIG_INPUT & LTC4282_GPIO1_CONFIG_MASK);
1645 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1648 Serial.print(F(
"ADC Conversion Alerts: \n"));
1649 Serial.print(F(
" 1. Enable\n"));
1650 Serial.print(F(
" 2. Disable\n"));
1652 Serial.print(F(
"Selected Value: "));
1653 Serial.println(user_command);
1654 Serial.print(F(
"\n"));
1655 switch (user_command)
1664 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1667 Serial.print(F(
"GPIO2 Pull Low When MOSFET Under Stress: \n"));
1668 Serial.print(F(
" 1. Enable\n"));
1669 Serial.print(F(
" 2. Disable\n"));
1671 Serial.print(F(
"Selected Value: "));
1672 Serial.println(user_command);
1673 Serial.print(F(
"\n"));
1674 switch (user_command)
1683 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1686 Serial.print(F(
"Set Energy And Timer Overflow Alert: \n"));
1687 Serial.print(F(
" 1. Enable\n"));
1688 Serial.print(F(
" 2. Disable\n"));
1690 Serial.print(F(
"Selected Value: "));
1691 Serial.println(user_command);
1692 Serial.print(F(
"\n"));
1693 switch (user_command)
1702 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1706 Serial.print(F(
"\n"));
1717 uint8_t CTRLREG_MSB;
1718 uint8_t CTRLREG_LSB;
1719 uint8_t ALRTREG_MSB;
1720 uint8_t ALRTREG_LSB;
1722 uint8_t ADC_ALERT_REG;
1723 uint8_t FET_BAD_TIME;
1724 uint8_t GPIO_CONFIG;
1725 uint8_t VGPIO_ALARM_MIN;
1726 uint8_t VGPIO_ALARM_MAX;
1727 uint8_t VSOURCE_ALARM_MIN;
1728 uint8_t VSOURCE_ALARM_MAX;
1729 uint8_t VSENSE_ALARM_MIN;
1730 uint8_t VSENSE_ALARM_MAX;
1731 uint8_t POWER_ALARM_MIN;
1732 uint8_t POWER_ALARM_MAX;
1733 uint8_t CLK_DECIMATOR;
1734 uint8_t ILIM_ADJUST;
1757 Serial.println(F(
"****CURRENT REGISTER VALUES TO BE COPIED TO EEPROM****"));
1758 Serial.print(F(
"CONTROL MSB: "));
1759 Serial.println(CTRLREG_MSB);
1760 Serial.print(F(
"CONTROL LSB: "));
1761 Serial.println((CTRLREG_LSB));
1762 Serial.print(F(
"ALERT MSB: "));
1763 Serial.println((ALRTREG_MSB));
1764 Serial.print(F(
"ALERT LSB: "));
1765 Serial.println((ALRTREG_LSB));
1766 Serial.print(F(
"FAULT LOG: "));
1767 Serial.println((FAULT_REG));
1768 Serial.print(F(
"ADC ALERT: "));
1769 Serial.println((ADC_ALERT_REG));
1770 Serial.print(F(
"FET BAD TIME: "));
1771 Serial.println((FET_BAD_TIME));
1772 Serial.print(F(
"GPIO CONFIG: "));
1773 Serial.println((GPIO_CONFIG));
1774 Serial.print(F(
"VGPIO ALARM MIN: "));
1775 Serial.println((VGPIO_ALARM_MIN));
1776 Serial.print(F(
"VGPIO ALARM MAX: "));
1777 Serial.println((VGPIO_ALARM_MAX));
1778 Serial.print(F(
"VSOURCE ALARM MIN: "));
1779 Serial.println((VSOURCE_ALARM_MIN));
1780 Serial.print(F(
"VSOURCE ALARM MAX: "));
1781 Serial.println((VSOURCE_ALARM_MAX));
1782 Serial.print(F(
"VSENSE ALARM MIN: "));
1783 Serial.println((VSENSE_ALARM_MIN));
1784 Serial.print(F(
"VSENSE ALARM MAX: "));
1785 Serial.println((VSENSE_ALARM_MAX));
1786 Serial.print(F(
"POWER ALARM MIN: "));
1787 Serial.println((POWER_ALARM_MIN));
1788 Serial.print(F(
"POWER ALARM MAX: "));
1789 Serial.println((POWER_ALARM_MAX));
1790 Serial.print(F(
"CLOCK DECIMATOR: "));
1791 Serial.println((CLK_DECIMATOR));
1792 Serial.print(F(
"ILIM ADJUST: "));
1793 Serial.println((ILIM_ADJUST));
1794 Serial.print(F(
"Do You Want to Enter These Values To EEPROM?\n"));
1795 Serial.print(F(
" 1. Yes\n"));
1796 Serial.print(F(
" 2. No\n"));
1798 Serial.print(F(
"Selected Value: "));
1799 Serial.println(user_command);
1800 Serial.print(F(
"\n"));
1802 switch (user_command)
1842 Serial.println(F(
"Values Written to EEPROM\n"));
1845 Serial.print(F(
"Nothing Written To EEPROM\n"));
1848 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1850 Serial.print(F(
"\n"));
1861 uint8_t CTRLREG_MSB;
1862 uint8_t CTRLREG_LSB;
1863 uint8_t ALRTREG_MSB;
1864 uint8_t ALRTREG_LSB;
1866 uint8_t ADC_ALERT_REG;
1867 uint8_t FET_BAD_TIME;
1868 uint8_t GPIO_CONFIG;
1869 uint8_t VGPIO_ALARM_MIN;
1870 uint8_t VGPIO_ALARM_MAX;
1871 uint8_t VSOURCE_ALARM_MIN;
1872 uint8_t VSOURCE_ALARM_MAX;
1873 uint8_t VSENSE_ALARM_MIN;
1874 uint8_t VSENSE_ALARM_MAX;
1875 uint8_t POWER_ALARM_MIN;
1876 uint8_t POWER_ALARM_MAX;
1877 uint8_t CLK_DECIMATOR;
1878 uint8_t ILIM_ADJUST;
1901 Serial.println(F(
"****RESTORE FOLLOWING VALUES FROM EEPROM****"));
1902 Serial.print(F(
"CONTROL MSB: "));
1903 Serial.println(CTRLREG_MSB);
1904 Serial.print(F(
"CONTROL LSB: "));
1905 Serial.println((CTRLREG_LSB));
1906 Serial.print(F(
"ALERT MSB: "));
1907 Serial.println((ALRTREG_MSB));
1908 Serial.print(F(
"ALERT LSB: "));
1909 Serial.println((ALRTREG_LSB));
1910 Serial.print(F(
"FAULT LOG: "));
1911 Serial.println((FAULT_REG));
1912 Serial.print(F(
"ADC ALERT: "));
1913 Serial.println((ADC_ALERT_REG));
1914 Serial.print(F(
"FET BAD TIME: "));
1915 Serial.println((FET_BAD_TIME));
1916 Serial.print(F(
"GPIO CONFIG: "));
1917 Serial.println((GPIO_CONFIG));
1918 Serial.print(F(
"VGPIO ALARM MIN: "));
1919 Serial.println((VGPIO_ALARM_MIN));
1920 Serial.print(F(
"VGPIO ALARM MAX: "));
1921 Serial.println((VGPIO_ALARM_MAX));
1922 Serial.print(F(
"VSOURCE ALARM MIN: "));
1923 Serial.println((VSOURCE_ALARM_MIN));
1924 Serial.print(F(
"VSOURCE ALARM MAX: "));
1925 Serial.println((VSOURCE_ALARM_MAX));
1926 Serial.print(F(
"VSENSE ALARM MIN: "));
1927 Serial.println((VSENSE_ALARM_MIN));
1928 Serial.print(F(
"VSENSE ALARM MAX: "));
1929 Serial.println((VSENSE_ALARM_MAX));
1930 Serial.print(F(
"POWER ALARM MIN: "));
1931 Serial.println((POWER_ALARM_MIN));
1932 Serial.print(F(
"POWER ALARM MAX: "));
1933 Serial.println((POWER_ALARM_MAX));
1934 Serial.print(F(
"CLOCK DECIMATOR: "));
1935 Serial.println((CLK_DECIMATOR));
1936 Serial.print(F(
"ILIM ADJUST: "));
1937 Serial.println((ILIM_ADJUST));
1938 Serial.print(F(
"Do You Want to Restore these Values from EEPROM?\n"));
1939 Serial.print(F(
" 1. Yes\n"));
1940 Serial.print(F(
" 2. No\n"));
1942 Serial.print(F(
"Selected Value: "));
1943 Serial.println(user_command);
1944 Serial.print(F(
"\n"));
1946 switch (user_command)
1969 Serial.println(F(
"Values Restored From EEPROM\n"));
1972 Serial.print(F(
"Nothing Restored.\n"));
1975 Serial.print(F(
"Invalid Entry. No Changes Made\n"));
1978 Serial.print(F(
"\n"));
float LTC4282_code_to_avg_power(uint64_t code, float energy, float tConv)
Convert ADC code to average power.
#define LTC4282_ALERT_MSB_REG
static int8_t menu_5_settings(uint8_t *CTRLREG_MSB, uint8_t *CTRLREG_LSB, uint8_t *ILIM_ADJUST, uint8_t *CLK_DECIMATOR)
Set Alert LSB Register.
#define LTC4282_MASS_WRITE
float LTC4282_code_to_voltage(uint16_t code, float fullscaleVoltage)
Convert ADC code to voltage.
#define LTC4282_VSOURCE_ALARM_MIN_REG
#define LTC4282_VSOURCE_ALARM_LOW
static uint8_t menu_5_write_register_values_to_EEPROM_menu_5()
Configure State of GPIO Pins. Set GPIO1 as POWERGOOD/POWERBAD/GPO/GPI, OverFlow Alert, GPIO2 Stress Mode etc.
uint8_t LTC4282_VGPIO_to_code_alarm(float vgpio)
Convert GPIO voltage to alarm code.
#define LTC4282_UV_MODE_MASK
float LTC4282_code_to_coulombs(uint64_t code, float resistor, float tConv)
Convert ADC code to coulombs.
#define CONTINUOUS_MODE_DISPLAY_DELAY
Restore Values Currently Present in the EEPROM to the Registers of the LTC4282.
#define LTC4282_ILIM_ADJUST_12_V_5
#define LTC4282_FB_MODE_10
#define LTC4282_ILIM_ADJUST_34_V_3
unsigned char user_command
#define LTC4282_METER_OF_ALERT
#define LTC4282_VSOURCE_MSB_REG
#define LTC4282_FAULT_LOG_REG
#define LTC4282_VSOURCE_ALARM_MAX_REG
#define LTC4282_FOLDBACK_MODE_24_V_0
const int CLK_DIVIDER
CLK Frequency.
#define LTC4282_EE_ALERT_MSB_REG
int8_t LTC4282_read_32_bits(uint8_t i2c_address, uint8_t adc_command, uint32_t *adc_code)
Read a 32-bit code from the LTC4282.
#define LTC4282_OC_AUTORETRY
#define LTC4282_ILIM_ADJUST_31_V_2
static int8_t menu_4_set_alert_msb_register_menu_1()
Set Alert Registers.
#define LTC4282_VIN_MODE_5_V
static int8_t menu_5_set_control_lsb_register_menu_2(uint8_t *CTRLREG_LSB)
Control MSB Register Menu. Configure OV/UV/OC Autoretry, FET ON, Mass Write Enable, ON/ENB, ON DELAY and ON FAULT MASK.
#define LTC4282_EE_ALERT_LSB_REG
#define LTC4282_ADC_16_BIT
#define LTC4282_EE_FAULT_REG
#define LTC4282_POWER_MSB_REG
#define LTC4282_EE_POWER_ALARM_MAX_REG
static float voltage_fullscale
Fullscale Voltage Setting Shared Across Functions For Polling Routines.
static int8_t menu_3_view_faults_menu_1()
View/Clear Faults.
#define LTC4282_OV_MODE_MASK
#define LTC4282_FOLDBACK_MODE_12_V_0
float LTC4282_code_to_power(uint16_t code, float fullscaleVoltage, float resistor)
Convert ADC code to power.
Header File for Linduino Libraries and Demo Code.
#define LTC4282_VGPIO_MSB_REG
#define LTC4282_VSENSE_ALARM_HIGH
static int8_t menu_5_set_control_msb_register_menu_1(uint8_t *CTRLREG_MSB)
Settings.
float LTC4282_code_to_VGPIO(uint16_t code)
Convert ADC code to VGPIO.
#define LTC4282_VSENSE_ALARM_MAX_REG
#define LTC4282_EE_VGPIO_ALARM_MAX_REG
uint8_t LTC4282_power_to_code_alarm(float power, float resistor, float fullscaleVoltage)
Convert power to alarm code.
#define LTC4282_VGPIO_ALARM_MAX_REG
float LTC4282_code_to_current(uint16_t code, float resistor)
Convert ADC code to current.
static int8_t menu_4_set_alert_registers()
Clear Faults.
uint8_t LTC4282_current_to_code_alarm(float current, float resistor)
Convert current to alarm code.
#define LTC4282_FOLDBACK_MODE_5_V_0
int8_t LTC4282_read_48_bits(uint8_t i2c_address, uint8_t adc_command, uint64_t *adc_code)
Read a 48-bit code from the LTC4282.
static int8_t menu_3_clear_faults_menu_2()
View Faults.
#define LTC4282_EE_CLK_DEC_REG
#define LTC4282_I2C_ADDRESS
#define LTC4282_VSOURCE_MIN_MSB_REG
#define LTC4282_VIN_MODE_MASK
#define LTC4282_EE_VGPIO_ALARM_MIN_REG
static uint8_t menu_5_set_ilim_adjust_register_menu_3(uint8_t *ILIM_ADJUST)
Control LSB Register Menu. Configure Thresholds for POWER GOOD/OV/UV as well as for VIN MODE...
#define LTC4282_VSENSE_MIN_MSB_REG
static void print_prompt()
Print the Prompt.
#define LTC4282_POWER_ALARM_HIGH
#define LTC4282_VGPIO_MIN_MSB_REG
const float resistor
resistor value on demo board
static int8_t menu_4_set_alert_lsb_register_menu_2()
Set Alert MSB Register.
const float LTC4282_VSOURCE_5V_FS
#define LTC4282_VSOURCE_MAX_MSB_REG
#define LTC4282_GPIO1_CONFIG_POWER_BAD
const float LTC4282_VSOURCE_3V3_FS
static uint8_t alert_code
Value stored or read from ALERT register.
#define LTC4282_GPIO_CONFIG_REG
#define LTC4282_METER_MSB5_REG
#define LTC4282_COULOMB_METER
static void print_title()
Print the title block.
#define LTC4282_OV_MODE_5
#define LTC4282_FET_BAD_FAULT_TIME_REG
#define LTC4282_ILIM_ADJUST_25_V_0
const float LTC4282_VSOURCE_12V_FS
#define LTC4282_EE_CONTROL_MSB_REG
#define LTC4282_VSENSE_ALARM_MIN_REG
#define LTC4282_EE_ILIM_ADJUST_REG
float LTC4282_code_to_energy(uint64_t code, float fullscaleVoltage, float resistor, float tConv)
Convert ADC code to energy.
#define LTC4282_POWER_ALARM_MIN_REG
#define LTC4282_ADC_CONV_ALERT
#define LTC4282_FB_MODE_EXTERNAL
float LTC4282_code_to_GPIO_alarm(uint8_t code)
Convert ADC code to GPIO alarm voltage.
uint8_t LTC4282_volt_to_code_alarm(float volt, float fullscaleVoltage)
Convert voltage to alarm code.
int8_t LTC4282_write(uint8_t i2c_address, uint8_t adc_command, uint8_t code)
Write an 8-bit code to the LTC4282.
#define LTC4282_CONTROL_MSB_REG
#define LTC4282_FB_MODE_5
#define LTC4282_VGPIO_ALARM_LOW
#define LTC4282_UV_AUTORETRY
#define LTC4282_ILIM_ADJUST_28_V_1
#define LTC4282_ILIM_ADJUST_21_V_8
#define LTC4282_GPIO1_OUTPUT
#define LTC4282_EE_FET_BAD_FAULT_TIME_REG
static uint8_t menu_5_configure_GPIO_pins_menu_4()
#define LTC4282_GPIO1_CONFIG_INPUT
int8_t discover_demo_board(char *demo_name)
Read the ID string from the EEPROM and determine if the correct board is connected.
float LTC4282_code_to_volt_alarm(uint8_t code, float fullscaleVoltage)
Convert ADC code to alarm voltage.
#define LTC4282_VIN_MODE_12_V
#define LTC4282_FB_MODE_15
static int8_t menu_2_alarm_thresholds(uint8_t CTRLREG_LSB)
Continuous Mode Measurement.
#define LTC4282_EE_POWER_ALARM_MIN_REG
#define LTC4282_ILIM_ADJUST_REG
#define LTC4282_FB_MODE_MASK
LTC4282 Register MASKS.
#define LTC4282_VIN_MODE_3_V_3
static int8_t menu_3_view_clear_faults()
Set Alarm Thresholds.
#define LTC4282_EE_VSOURCE_ALARM_MIN_REG
#define LTC4282_CONTROL_LSB_REG
#define LTC4282_STRESS_TO_GPIO2
#define LTC4282_ALERT_LSB_REG
static int8_t demo_board_connected
Set to 1 if the board is connected.
#define LTC4282_EE_VSENSE_ALARM_MIN_REG
LT_I2C: Routines to communicate with ATmega328P's hardware I2C port.
#define LTC4282_VSOURCE_ALARM_HIGH
#define LTC4282_VSENSE_MSB_REG
#define LTC4282_OV_MODE_EXTERNAL
#define LTC4282_UV_MODE_5
static void setup()
Initialize Linduino.
#define LTC4282_OV_MODE_15
#define LTC4282_POWER_ALARM_LOW
#define LTC4282_CLK_DEC_REG
char demo_name[]
Demo Board Name stored in QuikEval EEPROM.
#define LTC4282_OV_AUTORETRY
#define LTC4282_VGPIO_ALARM_MIN_REG
#define LTC4282_VSENSE_MAX_MSB_REG
#define LTC4282_ON_FAULT_MASK
#define LTC4282_ILIM_ADJUST_15_V_6
#define LTC4282_ADC_VSOURCE
#define LTC4282_ADC_ALERT_LOG_REG
#define LTC4282_EE_VSENSE_ALARM_MAX_REG
#define LTC4282_FET_BAD_FAULT_ALERT
#define LTC4282_ILIM_ADJUST_18_V_7
#define LTC4282_INT_CLK_OUT
#define LTC4282_UV_MODE_10
#define LTC4282_VGPIO_ALARM_HIGH
#define LTC4282_GPIO1_CONFIG_POWER_GOOD
#define LTC4282_EE_ADC_ALERT_LOG_REG
int8_t LTC4282_read_16_bits(uint8_t i2c_address, uint8_t adc_command, uint16_t *adc_code)
Read a 16-bit code from the LTC4282.
LTC4282: High Current Hot Swap Controller with I2C Compatible Monitoring and EEPROM.
#define LTC4282_POWER_MIN_MSB_REG
#define LTC4282_OV_MODE_10
void quikeval_I2C_init(void)
Initializes Linduino I2C port.
#define LTC4282_EE_GPIO_CONFIG_REG
static int8_t menu_1_continuous_mode(uint8_t CTRLA, uint8_t ILIM_ADJUST, uint8_t CLK_DECIMATOR, float resister)
Continious Mode.
#define LTC4282_FOLDBACK_MODE_3_V_3
void quikeval_I2C_connect(void)
Switch MUX to connect I2C pins to QuikEval connector.
#define LTC4282_EEPROM_DONE_ALERT
#define LTC4282_VSENSE_ALARM_LOW
#define LTC4282_FET_SHORT_ALERT
#define LTC4282_VIN_MODE_24_V
#define LTC4282_UV_MODE_EXTERNAL
int8_t LTC4282_read(uint8_t i2c_address, uint8_t adc_command, uint8_t *adc_code)
Read an 8-bit code from the LTC4282.
static uint16_t current
the current measurement from the LTC3335's counter test mode.
#define LTC4282_EE_VSOURCE_ALARM_MAX_REG
#define LTC4282_FOLDBACK_MASK
#define LTC4282_GPIO1_CONFIG_OUTPUT
#define LTC4282_EE_CONTROL_LSB_REG
const char ack_error[]
Error message.
const float LTC4282_VSOURCE_24V_FS
#define LTC4282_VGPIO_MAX_MSB_REG
float LTC4282_code_to_current_alarm(uint8_t code, float resistor)
Convert ADC code to alarm current.
#define LTC4282_UV_MODE_15
#define LTC4282_TICK_COUNTER_MSB3_REG
#define LTC4282_POWER_MAX_MSB_REG
float LTC4282_code_to_avg_current(uint64_t code, float coulombs, float tConv)
Convert ADC code to average current.
#define LTC4282_ILIM_ADJUST_MASK
static uint8_t menu_5_restore_register_values_from_EEPROM_menu_6()
Write Values currently present in the Registers of the LTC4282 to the EEPROM.
#define LTC4282_GPIO1_CONFIG_MASK
#define LTC4282_POWER_ALARM_MAX_REG
float LTC4282_code_to_power_alarm(uint8_t code, float fullscaleVoltage, float resistor)
Convert ADC code to alarm power.
#define LTC4282_ADC_GPIO2_MODE