66 #define LTC2937_I2C_ADDRESS 0x36 //global 7-bit address 88 #define LTC2937_RESTORE_DELAY 10 89 #define LTC2937_STORE_DELAY 120 100 Serial.begin(115200);
114 if (Serial.available())
118 switch (user_command)
122 Serial.print(F(
"1\n"));
123 Serial.print(F(
"\n****INITIALIZING THE LTC2937****\n"));
129 Serial.print(F(
"2\n"));
130 Serial.print(F(
"\n****SEQUENCE-UP THE LTC2937****\n"));
136 Serial.print(F(
"3\n"));
137 Serial.print(F(
"\n****SEQUENCE-DOWN THE LTC2937****\n"));
143 Serial.print(F(
"4\n"));
144 Serial.print(F(
"\n****READ LTC2937 STATUS****\n"));
149 Serial.print(F(
"5\n"));
150 Serial.print(F(
"\n****SET LTC2937 BREAKPOINT AT STEP 1****\n"));
157 Serial.print(F(
"6\n"));
158 Serial.print(F(
"\n****INCREMENT LTC2937 BREAKPOINT****\n"));
165 Serial.print(F(
"7\n"));
166 Serial.print(F(
"\n****CLEAR LTC2937 BREAKPOINT****\n"));
172 Serial.print(F(
"8\n"));
173 Serial.print(F(
"\n****CONFIGURE SPECIAL LTC2937 SEQUENCING VALUES****\n"));
178 Serial.print(F(
"9\n"));
179 Serial.print(F(
"\n****STORE LTC2937 CONFIGURATION TO EEPROM****\n"));
185 Serial.print(F(
"10\n"));
186 Serial.print(F(
"\n****WRITE DEMO BOARD DEFAULTS TO LTC2937 RAM****\n"));
192 Serial.print(F(
"11\n"));
193 Serial.print(F(
"\n****READ LTC2937 FAULTS****\n"));
195 Serial.print(F(
"\n*******************************\n"));
197 Serial.print(F(
"\n*******************************\n"));
199 Serial.print(F(
"\n*******************************\n"));
202 Serial.print(F(
"12\n"));
203 Serial.print(F(
"\n****CLEAR LTC2937 FAULT BACKUP WORD****\n"));
209 Serial.print(F(
"13\n"));
210 Serial.print(F(
"\n****CLEAR LTC2937 ALERT****\n"));
216 Serial.print(F(
"14\n"));
217 Serial.print(F(
"\n****WRITE-ENABLE THE LTC2937****\n"));
222 Serial.print(F(
"15\n"));
223 Serial.println(F(
"Incorrect Option"));
238 Serial.print(F(
"\n***************************************************************\n"));
239 Serial.print(F(
"* DC2313A Control Program *\n"));
240 Serial.print(F(
"* *\n"));
241 Serial.print(F(
"* This program provides a simple interface to control the *\n"));
242 Serial.print(F(
"* the LTC2937 on the DC2313A Demo Board *\n"));
243 Serial.print(F(
"* *\n"));
244 Serial.print(F(
"* Set the baud rate to 115200 and select the newline terminator.*\n"));
245 Serial.print(F(
"* *\n"));
246 Serial.print(F(
"*****************************************************************\n"));
253 Serial.print(F(
"\n"));
254 Serial.print(F(
" 1 - Restore the LTC2937 to EEPROM values\n"));
255 Serial.print(F(
" 2 - Sequence-up supplies\n"));
256 Serial.print(F(
" 3 - Sequence-down supplies\n"));
257 Serial.print(F(
" 4 - Read all status registers\n"));
258 Serial.print(F(
" 5 - Set breakpoint at step 1\n"));
259 Serial.print(F(
" 6 - Increment breakpoint\n"));
260 Serial.print(F(
" 7 - Clear breakpoint\n"));
261 Serial.print(F(
" 8 - Specify a new sequence order\n"));
262 Serial.print(F(
" 9 - Write configuration to EEPROM\n"));
263 Serial.print(F(
" 10 - Write demo board defaults to RAM\n"));
264 Serial.print(F(
" 11 - Read fault information registers\n"));
265 Serial.print(F(
" 12 - Clear faults (including backup)\n"));
266 Serial.print(F(
" 13 - Clear alert\n"));
267 Serial.print(F(
" 14 - Release software write-protect bit\n"));
268 Serial.print(F(
"\n Enter a command number: "));
275 uint16_t return_val, on_off_bits;
281 on_off_bits = ((return_val & 0x00E3) + 0x0008);
282 return_val = return_val | on_off_bits;
302 Serial.print (F(
"\nRESTORED LTC2937 CONFIGURATION FROM EEPROM.\n"));
308 Serial.print(F(
"\n IT IS A BAD IDEA TO RESTORE WHILE THE SUPPLIES ARE SEQUENCED-UP!\n"));
309 Serial.print(F(
" --SEQUENCE-DOWN FIRST. \n"));
325 Serial.print (F(
"STORED LTC2937 CONFIGURATION TO EEPROM.\n"));
331 Serial.print(F(
"\n IT IS A BAD IDEA TO STORE WHILE THE SUPPLIES ARE SEQUENCED-UP!\n"));
332 Serial.print(F(
" --SEQUENCE-DOWN FIRST. \n"));
346 return_val = (return_val & 0xFFEB);
347 return_val = (return_val | 0x0018);
353 Serial.print (F(
"FAIL: WRITE_PROTECTED.\n"));
367 return_val = (return_val & 0xFFEF);
373 Serial.print (F(
"FAIL: WRITE_PROTECTED.\n"));
398 status = (return_val & 0x0F04);
400 on_off = (return_val & 0x0080);
401 if ((status == 0x0004) && (on_off == 0x0000))
407 Serial.print(F(
"\n LTC2937 IS NOT DOWN \n"));
419 Serial.print(F(
"\n LTC2937_WRITE_PROTECTION: "));
420 Serial.println(return_val, HEX);
423 Serial.print(F(
"\n LTC2937_SPECIAL_LOT: "));
424 Serial.println(return_val, HEX);
427 Serial.print(F(
"\n LTC2937_ON_OFF_CONTROL: "));
428 Serial.println(return_val, HEX);
431 Serial.print(F(
"\n LTC2937_MONITOR_STATUS_HISTORY: "));
432 Serial.println(return_val, HEX);
435 Serial.print(F(
"\n LTC2937_STATUS_INFORMATION: "));
436 Serial.println(return_val, HEX);
439 Serial.print(F(
"\n LTC2937_BREAK_POINT: "));
440 Serial.println(return_val, HEX);
443 Serial.print(F(
"\n LTC2937_FAULT_RESPONSE: "));
444 Serial.println(return_val, HEX);
447 Serial.print(F(
"\n LTC2937_SEQ_POSITION_COUNT: "));
448 Serial.println(return_val, HEX);
451 Serial.print(F(
"\n LTC2937_MONITOR_BACKUP: "));
452 Serial.println(return_val, HEX);
455 Serial.print(F(
"\n LTC2937_MONITOR_STATUS: "));
456 Serial.println(return_val, HEX);
459 Serial.print(F(
"\n LTC2937_DEVICE_ID: "));
460 Serial.println(return_val, HEX);
473 Serial.print(F(
"\n LTC2937_WRITE_PROTECTION: "));
474 Serial.println(return_val, HEX);
477 Serial.print(F(
"\n LTC2937_SPECIAL_LOT: "));
478 Serial.println(return_val, HEX);
481 Serial.print(F(
"\n LTC2937_ON_OFF_CONTROL: "));
482 Serial.println(return_val, HEX);
485 Serial.print(F(
"\n LTC2937_V_RANGE: "));
486 Serial.println(return_val, HEX);
489 Serial.print(F(
"\n LTC2937_V_THRESHOLD_1: "));
490 Serial.println(return_val, HEX);
493 Serial.print(F(
"\n LTC2937_V_THRESHOLD_2: "));
494 Serial.println(return_val, HEX);
497 Serial.print(F(
"\n LTC2937_V_THRESHOLD_3: "));
498 Serial.println(return_val, HEX);
501 Serial.print(F(
"\n LTC2937_V_THRESHOLD_4: "));
502 Serial.println(return_val, HEX);
505 Serial.print(F(
"\n LTC2937_V_THRESHOLD_5: "));
506 Serial.println(return_val, HEX);
509 Serial.print(F(
"\n LTC2937_V_THRESHOLD_6: "));
510 Serial.println(return_val, HEX);
513 Serial.print(F(
"\n LTC2937_TON_TIMERS_1: "));
514 Serial.println(return_val, HEX);
517 Serial.print(F(
"\n LTC2937_TON_TIMERS_2: "));
518 Serial.println(return_val, HEX);
521 Serial.print(F(
"\n LTC2937_TON_TIMERS_3: "));
522 Serial.println(return_val, HEX);
525 Serial.print(F(
"\n LTC2937_TON_TIMERS_4: "));
526 Serial.println(return_val, HEX);
529 Serial.print(F(
"\n LTC2937_TON_TIMERS_5: "));
530 Serial.println(return_val, HEX);
533 Serial.print(F(
"\n LTC2937_TON_TIMERS_6: "));
534 Serial.println(return_val, HEX);
537 Serial.print(F(
"\n LTC2937_TOFF_TIMERS_1: "));
538 Serial.println(return_val, HEX);
541 Serial.print(F(
"\n LTC2937_TOFF_TIMERS_2: "));
542 Serial.println(return_val, HEX);
545 Serial.print(F(
"\n LTC2937_TOFF_TIMERS_3: "));
546 Serial.println(return_val, HEX);
549 Serial.print(F(
"\n LTC2937_TOFF_TIMERS_4: "));
550 Serial.println(return_val, HEX);
553 Serial.print(F(
"\n LTC2937_TOFF_TIMERS_5: "));
554 Serial.println(return_val, HEX);
557 Serial.print(F(
"\n LTC2937_TOFF_TIMERS_6: "));
558 Serial.println(return_val, HEX);
561 Serial.print(F(
"\n LTC2937_SEQ_UP_POSITION_1: "));
562 Serial.println(return_val, HEX);
565 Serial.print(F(
"\n LTC2937_SEQ_UP_POSITION_2: "));
566 Serial.println(return_val, HEX);
569 Serial.print(F(
"\n LTC2937_SEQ_UP_POSITION_3: "));
570 Serial.println(return_val, HEX);
573 Serial.print(F(
"\n LTC2937_SEQ_UP_POSITION_4: "));
574 Serial.println(return_val, HEX);
577 Serial.print(F(
"\n LTC2937_SEQ_UP_POSITION_5: "));
578 Serial.println(return_val, HEX);
581 Serial.print(F(
"\n LTC2937_SEQ_UP_POSITION_6: "));
582 Serial.println(return_val, HEX);
585 Serial.print(F(
"\n LTC2937_SEQ_DOWN_POSITION_1: "));
586 Serial.println(return_val, HEX);
589 Serial.print(F(
"\n LTC2937_SEQ_DOWN_POSITION_2: "));
590 Serial.println(return_val, HEX);
593 Serial.print(F(
"\n LTC2937_SEQ_DOWN_POSITION_3: "));
594 Serial.println(return_val, HEX);
597 Serial.print(F(
"\n LTC2937_SEQ_DOWN_POSITION_4: "));
598 Serial.println(return_val, HEX);
601 Serial.print(F(
"\n LTC2937_SEQ_DOWN_POSITION_5: "));
602 Serial.println(return_val, HEX);
605 Serial.print(F(
"\n LTC2937_SEQ_DOWN_POSITION_6: "));
606 Serial.println(return_val, HEX);
609 Serial.print(F(
"\n LTC2937_RSTB_CONFIG: "));
610 Serial.println(return_val, HEX);
613 Serial.print(F(
"\n LTC2937_FAULT_RESPONSE: "));
614 Serial.println(return_val, HEX);
617 Serial.print(F(
"\n LTC2937_MONITOR_STATUS_HISTORY: "));
618 Serial.println(return_val, HEX);
621 Serial.print(F(
"\n LTC2937_STATUS_INFORMATION: "));
622 Serial.println(return_val, HEX);
625 Serial.print(F(
"\n LTC2937_BREAK_POINT: "));
626 Serial.println(return_val, HEX);
629 Serial.print(F(
"\n LTC2937_SEQ_POSITION_COUNT: "));
630 Serial.println(return_val, HEX);
633 Serial.print(F(
"\n LTC2937_MONITOR_BACKUP: "));
634 Serial.println(return_val, HEX);
637 Serial.print(F(
"\n LTC2937_MONITOR_STATUS: "));
638 Serial.println(return_val, HEX);
641 Serial.print(F(
"\n LTC2937_DEVICE_ID: "));
642 Serial.println(return_val, HEX);
702 Serial.print (F(
"FAIL: WRITE_PROTECTED.\n"));
715 uint8_t dummy_reg_address;
723 Serial.print(F(
"\nCHANGING SEQUENCE-UP ORDER\n"));
725 for (i = 1; i <= 6; i++)
727 Serial.print(F(
"\nENTER SEQUENCE-UP POSITION FOR CHANNEL "));
728 Serial.println(i, DEC);
731 if (user_command > 1023)
740 Serial.print(F(
"\nCHANGING SEQUENCE-DOWN ORDER\n"));
742 for (i = 1; i <= 6; i++)
744 Serial.print(F(
"\nENTER SEQUENCE-DOWN POSITION FOR CHANNEL "));
745 Serial.println(i, DEC);
748 if (user_command > 1023)
765 Serial.print (F(
"FAIL: WRITE_PROTECTED.\n"));
779 wp_bits = (return_val & 0x0003);
781 if (wp_bits == 0x0000)
788 Serial.print(F(
"\n LTC2937 IS WRITE-PROTECTED. WRITING WILL FAIL\n"));
799 uint16_t return_val, write_val;
800 uint16_t hardware_wp_bit;
801 uint16_t software_wp_bit;
804 hardware_wp_bit = (return_val & 0x0002);
805 software_wp_bit = (return_val & 0x0001);
806 if (hardware_wp_bit == 0x0000)
809 Serial.print(F(
"\n UNLOCKING LTC2937 SOFTWARE WRITE-PROTECT BIT."));
811 write_val = (return_val & 0xFFFE);
816 Serial.print(F(
"\n LTC2937 IS HARDWARE WRITE-PROTECTED. WRITING WILL FAIL\n"));
833 if ((set_val >=0) && (set_val < 1024))
835 return_val = 0x0400 + set_val;
840 Serial.print(F(
"\n ERROR! BREAKPOINT VALUE OUT OF RANGE.\n"));
846 Serial.print (F(
"FAIL: WRITE_PROTECTED.\n"));
863 bp_en_val = (return_val & 0x0400);
864 bp_ct_val = (return_val & 0x03FF);
865 if (bp_ct_val < 1023)
867 return_val = (++bp_ct_val);
868 return_val = (return_val | 0x0400);
870 Serial.print(F(
"\n INCREMENTING BREAK_POINT TO VALUE : \n"));
871 Serial.println(bp_ct_val);
876 Serial.print(F(
"\n ERROR! BREAKPOINT VALUE OUT OF RANGE.\n"));
882 Serial.print (F(
"FAIL: WRITE_PROTECTED.\n"));
897 sp_bp_test = (return_val & 0x0400);
898 sp_count = (return_val & 0x3FF);
900 Serial.println(return_val, HEX);
901 Serial.print(F(
"\n SEQUENCE POSITION COUNT = "));
902 Serial.println(sp_count, DEC);
904 if (sp_bp_test == 0x0400)
907 if ((return_val & 0x0400) == 0x0400)
909 Serial.print(F(
"\n WAITING AT BREAKPOINT.\n"));
914 Serial.print(F(
"\n NOT AT BREAKPOINT."));
944 Serial.print(F(
"\n IT IS A BAD IDEA TO CLEAR WHILE THE SUPPLIES ARE SEQUENCED-UP!\n"));
945 Serial.print(F(
" DO YOU WISH TO CLEAR? (y/n)"));
947 if ((user_command ==
'y') || (user_command ==
'Y'))
950 Serial.print(F(
"\n ****CLEARING**** \n"));
955 Serial.print(F(
"\n ****NOT CLEARING**** \n"));
962 Serial.print(F(
"\n ****CLEARING**** \n"));
987 Serial.print(F(
"\n THIS OPERATION WILL AFFECT BOTH RAM AND EEPROM!\n"));
988 Serial.print(F(
" DO YOU WISH TO CLEAR RAM CONFIGURATION SETTINGS? (y/n)"));
990 if ((user_command ==
'y') || (user_command ==
'Y'))
999 Serial.print (F(
"\nTHE BACKUP WORD IS NOW CLEAR.\n"));
1015 Serial.print (F(
"FAIL: CANNOT MANIPULATE FAULT BACKUP WHILE WRITE-PROTECTED.\n"));
1035 uint16_t return_val,
1040 Serial.print(F(
"\n LTC2937 MONITOR_BACKUP CONTENTS: "));
1041 Serial.println(return_val, HEX);
1043 masked_val = (return_val & 0xE000);
1047 Serial.print(F(
"\n**RESERVED SEQUENCE STATE (THIS IS BAD)"));
1050 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 6"));
1053 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 5"));
1056 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 4"));
1059 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 3"));
1062 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 2"));
1065 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 1"));
1068 Serial.print(F(
"\n NO SEQUENCE FAULTS"));
1071 Serial.print(F(
"\n**UNDEFINED SEQUENCE FAULT STATE (THIS IS BAD)"));
1074 masked_val = (return_val & 0x1000);
1075 if (masked_val != 0x0000)
1077 Serial.print(F(
"\n**RESET FAULT DETECTED"));
1081 Serial.print(F(
"\n NO RESET FAULT"));
1083 masked_val = (return_val & 0x0800);
1084 if (masked_val != 0x0000)
1086 Serial.print(F(
"\n**V6 OV RESET FAULT DETECTED"));
1090 Serial.print(F(
"\n NO V6 OV FAULT"));
1092 masked_val = (return_val & 0x0400);
1093 if (masked_val != 0x0000)
1095 Serial.print(F(
"\n**V6 UV RESET FAULT DETECTED"));
1099 Serial.print(F(
"\n NO V6 UV FAULT"));
1101 masked_val = (return_val & 0x0200);
1102 if (masked_val != 0x0000)
1104 Serial.print(F(
"\n**V5 OV RESET FAULT DETECTED"));
1108 Serial.print(F(
"\n NO V5 OV FAULT"));
1110 masked_val = (return_val & 0x0100);
1111 if (masked_val != 0x0000)
1113 Serial.print(F(
"\n**V5 UV RESET FAULT DETECTED"));
1117 Serial.print(F(
"\n NO V5 UV FAULT"));
1119 masked_val = (return_val & 0x0080);
1120 if (masked_val != 0x0000)
1122 Serial.print(F(
"\n**V4 OV RESET FAULT DETECTED"));
1126 Serial.print(F(
"\n NO V4 OV FAULT"));
1128 masked_val = (return_val & 0x0040);
1129 if (masked_val != 0x0000)
1131 Serial.print(F(
"\n**V4 UV RESET FAULT DETECTED"));
1135 Serial.print(F(
"\n NO V4 UV FAULT"));
1137 masked_val = (return_val & 0x0020);
1138 if (masked_val != 0x0000)
1140 Serial.print(F(
"\n**V3 OV RESET FAULT DETECTED"));
1144 Serial.print(F(
"\n NO V3 OV FAULT"));
1146 masked_val = (return_val & 0x0010);
1147 if (masked_val != 0x0000)
1149 Serial.print(F(
"\n**V3 UV RESET FAULT DETECTED"));
1153 Serial.print(F(
"\n NO V3 UV FAULT"));
1155 masked_val = (return_val & 0x0008);
1156 if (masked_val != 0x0000)
1158 Serial.print(F(
"\n**V2 OV RESET FAULT DETECTED"));
1162 Serial.print(F(
"\n NO V2 OV FAULT"));
1164 masked_val = (return_val & 0x0004);
1165 if (masked_val != 0x0000)
1167 Serial.print(F(
"\n**V2 UV RESET FAULT DETECTED"));
1171 Serial.print(F(
"\n NO V2 UV FAULT"));
1173 masked_val = (return_val & 0x0002);
1174 if (masked_val != 0x0000)
1176 Serial.print(F(
"\n**V1 OV RESET FAULT DETECTED"));
1180 Serial.print(F(
"\n NO V1 OV FAULT"));
1182 masked_val = (return_val & 0x0001);
1183 if (masked_val != 0x0000)
1185 Serial.print(F(
"\n**V1 UV RESET FAULT DETECTED"));
1189 Serial.print(F(
"\n NO V1 UV FAULT"));
1198 uint16_t return_val,
1203 Serial.print(F(
"\n LTC2937 MONITOR_STATUS_HISTORY CONTENTS: "));
1204 Serial.println(return_val, HEX);
1206 masked_val = (return_val & 0xE000);
1210 Serial.print(F(
"\n RESERVED SEQUENCE STATE (THIS IS BAD)"));
1213 Serial.print(F(
"\n SEQUENCE FAULT ON CHANNEL 6"));
1216 Serial.print(F(
"\n SEQUENCE FAULT ON CHANNEL 5"));
1219 Serial.print(F(
"\n SEQUENCE FAULT ON CHANNEL 4"));
1222 Serial.print(F(
"\n SEQUENCE FAULT ON CHANNEL 3"));
1225 Serial.print(F(
"\n SEQUENCE FAULT ON CHANNEL 2"));
1228 Serial.print(F(
"\n SEQUENCE FAULT ON CHANNEL 1"));
1231 Serial.print(F(
"\n NO SEQUENCE FAULTS"));
1234 Serial.print(F(
"\n UNDEFINED SEQUENCE FAULT STATE (THIS IS BAD)"));
1237 masked_val = (return_val & 0x1000);
1238 if (masked_val != 0x0000)
1240 Serial.print(F(
"\n RESET FAULT DETECTED"));
1244 Serial.print(F(
"\n NO RESET FAULT"));
1246 masked_val = (return_val & 0x0800);
1247 if (masked_val != 0x0000)
1249 Serial.print(F(
"\n V6 OV RESET FAULT DETECTED"));
1253 Serial.print(F(
"\n NO V6 OV FAULT"));
1255 masked_val = (return_val & 0x0400);
1256 if (masked_val != 0x0000)
1258 Serial.print(F(
"\n V6 UV RESET FAULT DETECTED"));
1262 Serial.print(F(
"\n NO V6 UV FAULT"));
1264 masked_val = (return_val & 0x0200);
1265 if (masked_val != 0x0000)
1267 Serial.print(F(
"\n V5 OV RESET FAULT DETECTED"));
1271 Serial.print(F(
"\n NO V5 OV FAULT"));
1273 masked_val = (return_val & 0x0100);
1274 if (masked_val != 0x0000)
1276 Serial.print(F(
"\n V5 UV RESET FAULT DETECTED"));
1280 Serial.print(F(
"\n NO V5 UV FAULT"));
1282 masked_val = (return_val & 0x0080);
1283 if (masked_val != 0x0000)
1285 Serial.print(F(
"\n V4 OV RESET FAULT DETECTED"));
1289 Serial.print(F(
"\n NO V4 OV FAULT"));
1291 masked_val = (return_val & 0x0040);
1292 if (masked_val != 0x0000)
1294 Serial.print(F(
"\n V4 UV RESET FAULT DETECTED"));
1298 Serial.print(F(
"\n NO V4 UV FAULT"));
1300 masked_val = (return_val & 0x0020);
1301 if (masked_val != 0x0000)
1303 Serial.print(F(
"\n V3 OV RESET FAULT DETECTED"));
1307 Serial.print(F(
"\n NO V3 OV FAULT"));
1309 masked_val = (return_val & 0x0010);
1310 if (masked_val != 0x0000)
1312 Serial.print(F(
"\n V3 UV RESET FAULT DETECTED"));
1316 Serial.print(F(
"\n NO V3 UV FAULT"));
1318 masked_val = (return_val & 0x0008);
1319 if (masked_val != 0x0000)
1321 Serial.print(F(
"\n V2 OV RESET FAULT DETECTED"));
1325 Serial.print(F(
"\n NO V2 OV FAULT"));
1327 masked_val = (return_val & 0x0004);
1328 if (masked_val != 0x0000)
1330 Serial.print(F(
"\n V2 UV RESET FAULT DETECTED"));
1334 Serial.print(F(
"\n NO V2 UV FAULT"));
1336 masked_val = (return_val & 0x0002);
1337 if (masked_val != 0x0000)
1339 Serial.print(F(
"\n V1 OV RESET FAULT DETECTED"));
1343 Serial.print(F(
"\n NO V1 OV FAULT"));
1345 masked_val = (return_val & 0x0001);
1346 if (masked_val != 0x0000)
1348 Serial.print(F(
"\n V1 UV RESET FAULT DETECTED"));
1352 Serial.print(F(
"\n NO V1 UV FAULT"));
1361 uint16_t return_val,
1366 Serial.print(F(
"\n LTC2937 MONITOR_STATUS CONTENTS: "));
1367 Serial.println(return_val, HEX);
1369 masked_val = (return_val & 0x2000);
1370 if (masked_val != 0x0000)
1372 Serial.print(F(
"\n MARGIN IS ACTIVE"));
1376 Serial.print(F(
"\n MARGIN IS NOT ACTIVE"));
1378 masked_val = (return_val & 0x1000);
1379 if (masked_val != 0x0000)
1381 Serial.print(F(
"\n RSTB PIN IS LOW"));
1385 Serial.print(F(
"\n RSTB PIN IS HIGH"));
1387 masked_val = (return_val & 0x0800);
1388 if (masked_val != 0x0000)
1390 Serial.print(F(
"\n**V6 OV COMPARATOR ASSERTED"));
1394 Serial.print(F(
"\n V6 OV COMPARATOR NOT ASSERTED"));
1396 masked_val = (return_val & 0x0400);
1397 if (masked_val != 0x0000)
1399 Serial.print(F(
"\n**V6 UV COMPARATOR ASSERTED"));
1403 Serial.print(F(
"\n V6 UV COMPARATOR NOT ASSERTED"));
1405 masked_val = (return_val & 0x0200);
1406 if (masked_val != 0x0000)
1408 Serial.print(F(
"\n**V5 OV COMPARATOR ASSERTED"));
1412 Serial.print(F(
"\n V5 OV COMPARATOR NOT ASSERTED"));
1414 masked_val = (return_val & 0x0100);
1415 if (masked_val != 0x0000)
1417 Serial.print(F(
"\n**V5 UV COMPARATOR ASSERTED"));
1421 Serial.print(F(
"\n V5 UV COMPARATOR NOT ASSERTED"));
1423 masked_val = (return_val & 0x0080);
1424 if (masked_val != 0x0000)
1426 Serial.print(F(
"\n**V4 OV COMPARATOR ASSERTED"));
1430 Serial.print(F(
"\n V4 OV COMPARATOR NOT ASSERTED"));
1432 masked_val = (return_val & 0x0040);
1433 if (masked_val != 0x0000)
1435 Serial.print(F(
"\n**V4 UV COMPARATOR ASSERTED"));
1439 Serial.print(F(
"\n V4 UV COMPARATOR NOT ASSERTED"));
1441 masked_val = (return_val & 0x0020);
1442 if (masked_val != 0x0000)
1444 Serial.print(F(
"\n**V3 OV COMPARATOR ASSERTED"));
1448 Serial.print(F(
"\n V3 OV COMPARATOR NOT ASSERTED"));
1450 masked_val = (return_val & 0x0010);
1451 if (masked_val != 0x0000)
1453 Serial.print(F(
"\n**V3 UV COMPARATOR ASSERTED"));
1457 Serial.print(F(
"\n V3 UV COMPARATOR NOT ASSERTED"));
1459 masked_val = (return_val & 0x0008);
1460 if (masked_val != 0x0000)
1462 Serial.print(F(
"\n**V2 OV COMPARATOR ASSERTED"));
1466 Serial.print(F(
"\n V2 OV COMPARATOR NOT ASSERTED"));
1468 masked_val = (return_val & 0x0004);
1469 if (masked_val != 0x0000)
1471 Serial.print(F(
"\n**V2 UV COMPARATOR ASSERTED"));
1475 Serial.print(F(
"\n V2 UV COMPARATOR NOT ASSERTED"));
1477 masked_val = (return_val & 0x0002);
1478 if (masked_val != 0x0000)
1480 Serial.print(F(
"\n**V1 OV COMPARATOR ASSERTED"));
1484 Serial.print(F(
"\n V1 OV COMPARATOR NOT ASSERTED"));
1486 masked_val = (return_val & 0x0001);
1487 if (masked_val != 0x0000)
1489 Serial.print(F(
"\n**V1 UV COMPARATOR ASSERTED"));
1493 Serial.print(F(
"\n V1 UV COMPARATOR NOT ASSERTED"));
1503 uint16_t return_val,
1508 Serial.print(F(
"\n LTC2937 STATUS_INFORMATION CONTENTS: "));
1509 Serial.println(return_val, HEX);
1511 masked_val = (return_val & 0xE000);
1515 Serial.print(F(
"\n***RESERVED SEQUENCE STATE (THIS IS BAD)"));
1518 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 6"));
1521 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 5"));
1524 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 4"));
1527 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 3"));
1530 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 2"));
1533 Serial.print(F(
"\n**SEQUENCE FAULT ON CHANNEL 1"));
1536 Serial.print(F(
"\n NO SEQUENCE FAULTS"));
1539 Serial.print(F(
"\n**UNDEFINED SEQUENCE FAULT STATE (THIS IS BAD)"));
1542 masked_val = (return_val & 0x1000);
1543 if (masked_val != 0x0000)
1545 Serial.print(F(
"\n**MONITOR BACKUP IS STORED IN EEPROM"));
1549 Serial.print(F(
"\n NO MONITOR BACKUP IN EEPROM"));
1552 masked_val = (return_val & 0x0C00);
1556 Serial.print(F(
"\n PART SEQUENCE-UP COMPLETE"));
1559 Serial.print(F(
"\n PART SEQUENCE-DOWN IN PROGRESS"));
1562 Serial.print(F(
"\n PART SEQUENCE-UP IN PROGRESS"));
1565 Serial.print(F(
"\n PART SEQUENCE-DOWN COMPLETE"));
1568 Serial.print(F(
"\n**UNDEFINED PART SEQUENCING STATE (THIS IS BAD)"));
1572 masked_val = (return_val & 0x0300);
1576 Serial.print(F(
"\n GROUP SEQUENCE-UP COMPLETE"));
1579 Serial.print(F(
"\n GROUP SEQUENCE-DOWN IN PROGRESS"));
1582 Serial.print(F(
"\n GROUP SEQUENCE-UP IN PROGRESS"));
1585 Serial.print(F(
"\n GROUP SEQUENCE-DOWN COMPLETE"));
1588 Serial.print(F(
"\n**UNDEFINED GROUP SEQUENCING STATE (THIS IS BAD)"));
1592 masked_val = (return_val & 0x0080);
1593 if (masked_val != 0x0000)
1595 Serial.print(F(
"\n**SEQUENCE-UP FAULT DETECTED"));
1599 Serial.print(F(
"\n NO SEQUENCE-UP FAULT"));
1601 masked_val = (return_val & 0x0040);
1602 if (masked_val != 0x0000)
1604 Serial.print(F(
"\n**SEQUENCE-DOWN FAULT DETECTED"));
1608 Serial.print(F(
"\n NO SEQUENCE-DOWN FAULT"));
1610 masked_val = (return_val & 0x0200);
1611 if (masked_val != 0x0000)
1613 Serial.print(F(
"\n**OV FAULT DETECTED"));
1617 Serial.print(F(
"\n NO OV FAULT"));
1619 masked_val = (return_val & 0x0010);
1620 if (masked_val != 0x0000)
1622 Serial.print(F(
"\n**UV FAULT DETECTED"));
1626 Serial.print(F(
"\n NO UV FAULT"));
1628 masked_val = (return_val & 0x0008);
1629 if (masked_val != 0x0000)
1631 Serial.print(F(
"\n**RESET FAULT DETECTED"));
1635 Serial.print(F(
"\n NO RESET FAULT"));
1637 masked_val = (return_val & 0x0004);
1638 if (masked_val != 0x0000)
1640 Serial.print(F(
"\n ALL SEQUENCED SUPPLIES ARE BELOW THEIR DISCHARGE THRESHOLDS"));
1644 Serial.print(F(
"\n**NOT ALL SEQUENCED SUPPLIES ARE DOWN"));
1646 masked_val = (return_val & 0x0002);
1647 if (masked_val != 0x0000)
1649 Serial.print(F(
"\n**CONTROL FAULT DETECTED"));
1653 Serial.print(F(
"\n NO CONTROL FAULT"));
1655 masked_val = (return_val & 0x0001);
1656 if (masked_val != 0x0000)
1658 Serial.print(F(
"\n**OTHER FAULT DETECTED"));
1662 Serial.print(F(
"\n NO OTHER FAULT"));
#define LTC2937_BREAK_POINT
#define LTC2937_TOFF_TIMERS_1
#define LTC2937_TON_TIMERS_2
static int ltc2937_clear_breakpoint()
clear breakpoint register
#define LTC2937_SEQ_UP_POSITION_1
static int ltc2937_write_enable()
remove software write-protection report if the part is hardware write-protected
#define LTC2937_SEQ_UP_POSITION_5
#define LTC2937_SEQ_UP_POSITION_6
#define LTC2937_TOFF_TIMERS_6
static int ltc2937_set_breakpoint(uint16_t set_val)
set the breakpoint to the given value
void sendByte(uint8_t address, uint8_t command)
SMBus send byte command.
#define LTC2937_SEQ_UP_POSITION_2
unsigned char user_command
#define LTC2937_SPECIAL_LOT
#define LTC2937_V_THRESHOLD_1
void writeWord(uint8_t address, uint8_t command, uint16_t data)
SMBus write word command.
static int ltc2937_write_all_regs_dc_default()
write all registers to demo board defaults
#define LTC2937_V_THRESHOLD_6
static int ltc2937_sequence_down()
sequence-down the LTC2937
#define LTC2937_SEQ_POSITION_COUNT
String status(void)
Returns a descriptive string based on status of pins.
static LT_SMBusNoPec * smbus
Header File for Linduino Libraries and Demo Code.
#define LTC2937_TON_TIMERS_5
static int ltc2937_write_seq_regs()
write sequencing registers to a user-specified pattern
#define LTC2937_CLEAR_ALERTB
#define LTC2937_RSTB_CONFIG
#define LTC2937_RESTORE_DELAY
#define LTC2937_SEQ_DOWN_POSITION_6
#define LTC2937_V_THRESHOLD_3
#define LTC2937_STATUS_INFORMATION
#define LTC2937_TOFF_TIMERS_4
#define LTC2937_MONITOR_STATUS
#define LTC2937_SEQ_DOWN_POSITION_5
#define LTC2937_TON_TIMERS_4
#define LTC2937_TON_TIMERS_1
#define LTC2937_FAULT_RESPONSE
#define LTC2937_SEQ_DOWN_POSITION_2
#define LTC2937_SEQ_DOWN_POSITION_1
Header for LTC2937: Six Channel Sequencer and Voltage Supervisor with EEPROM.
static void print_title()
Prints the title block when program first starts.
#define LTC2937_ON_OFF_CONTROL
static int ltc2937_read_all_registers()
read all registers return int for success
static int ltc2937_read_all_status()
read all status registers
#define LTC2937_STORE_DELAY
#define LTC2937_DEVICE_ID
#define LTC2937_V_THRESHOLD_4
#define LTC2937_TOFF_TIMERS_3
static void print_prompt()
Prints main menu.
static int ltc2937_pretty_print_monitor_status_history()
pretty-print MONITOR_STATUS_HISTORY
#define LTC2937_WRITE_PROTECTION
#define LTC2937_SEQ_DOWN_POSITION_4
#define LTC2937_MONITOR_STATUS_HISTORY
static int ltc2937_store()
store the LTC2937 settings into EEPROM
static int ltc2937_config0()
make sure that the LTC2937 is configured for I2C bus control
static int ltc2937_pretty_print_monitor_status()
pretty-print MONITOR_STATUS
#define LTC2937_V_THRESHOLD_2
static int ltc2937_clear_fault_backup()
handle the backup word fault log (affects NVM and RAM)
#define LTC2937_TON_TIMERS_3
static uint8_t ltc2937_i2c_address
#define LTC2937_SEQ_UP_POSITION_3
#define LTC2937_V_THRESHOLD_5
static int ltc2937_restore()
restore the LTC2937 settings from EEPROM values
#define LTC2937_I2C_ADDRESS
LTC SMBus Support: Implementation for a shared SMBus layer.
#define LTC2937_SEQ_UP_POSITION_4
static int ltc2937_sequence_up()
sequence-up the LTC2937
#define LTC2937_TON_TIMERS_6
static int ltc2937_inc_breakpoint()
increment the breakpoint by 1
static void loop()
Main Linduino Loop.
static int ltc2937_is_write_protected()
Indicate if the part is write protected return 0 if the part is write enabled (hardware and software)...
#define LTC2937_SEQ_DOWN_POSITION_3
static int ltc2937_is_down()
indicate if the LTC2937 is in the sequenced-down state
static int ltc2937_print_seq_pos_count()
pretty-print the sequence_position_count register contents
static int ltc2937_clear_alertb()
clear ALERTB pin
static int ltc2937_clear()
issue a clear command
#define LTC2937_MONITOR_BACKUP
#define LTC2937_TOFF_TIMERS_5
static void setup()
Initialize Linduino.
static int ltc2937_pretty_print_status_information()
pretty-print STATUS_INFORMATION
static int ltc2937_pretty_print_monitor_backup()
pretty-print MONITOR_BACKUP
#define LTC2937_TOFF_TIMERS_2
uint16_t readWord(uint8_t address, uint8_t command)
SMBus read word command.