| Linduino 1.3.0 Linear Technology Arduino-Compatible Demonstration Board

DC2675A.ino
Go to the documentation of this file.
1 /*!
2 Linear Technology DC2675A + DC2363A Demonstration Board
3 LTC2972 + LTM4644: Power Management Solution for Application Processors
4
5 @verbatim
6
7 NOTES
8 Setup:
9 Set the terminal baud rate to 115200 and select the newline terminator.
10
11 @endverbatim
12
13 http://www.linear.com/product/LTC2972
14
15 http://www.linear.com/demo/DC2675A
16
17
18 Copyright 2018(c) Analog Devices, Inc.
19
20 All rights reserved.
21
22 Redistribution and use in source and binary forms, with or without
23 modification, are permitted provided that the following conditions are met:
24 - Redistributions of source code must retain the above copyright
25 notice, this list of conditions and the following disclaimer.
26 - Redistributions in binary form must reproduce the above copyright
27 notice, this list of conditions and the following disclaimer in
28 the documentation and/or other materials provided with the
29 distribution.
30 - Neither the name of Analog Devices, Inc. nor the names of its
31 contributors may be used to endorse or promote products derived
32 from this software without specific prior written permission.
33 - The use of this software may or may not infringe the patent rights
34 of one or more patent holders. This license does not release you
35 from the requirement that you obtain separate licenses from these
36 patent holders to use this software.
37 - Use of the software either in source or binary form, must be run
38 on or directly connected to an Analog Devices Inc. component.
39
40 THIS SOFTWARE IS PROVIDED BY ANALOG DEVICES "AS IS" AND ANY EXPRESS OR
41 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, NON-INFRINGEMENT,
42 MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
43 IN NO EVENT SHALL ANALOG DEVICES BE LIABLE FOR ANY DIRECT, INDIRECT,
44 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
45 LIMITED TO, INTELLECTUAL PROPERTY RIGHTS, PROCUREMENT OF SUBSTITUTE GOODS OR
46 SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
47 CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
48 OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
49 OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
50 */
51
52 /*! @file
53 @ingroup LTC2972
54 */
55
56 #include <Arduino.h>
57 #include <stdint.h>
58 #include "Linduino.h"
59 #include "UserInterface.h"
60 #include "LT_I2CBus.h"
61 #include "LT_SMBusNoPec.h"
62 #include "LT_SMBusPec.h"
63 #include "LT_PMBusMath.h"
64 #include "LT_PMBus.h"
65
66 #define LTC2972_0_I2C_ADDRESS 0x5C
67 #define LTC2972_1_I2C_ADDRESS 0x5D
68 #define MFR_PG_CONFIG_ORIGINAL 0xC046
69 #define MFR_PG_CONFIG_WRITE_PG 0xC044
70
71 // Global variables
72 static uint8_t ltc2972_0_i2c_address;
73 static uint8_t ltc2972_1_i2c_address;
74
75 static LT_PMBusMath *math = new LT_PMBusMath();
76 static LT_SMBus *smbus = new LT_SMBusPec();
77 static LT_PMBus *pmbus = new LT_PMBus(smbus);
78
79 //! Initialize Linduino
80 //! @return void
81 void setup()
82 {
83 Serial.begin(115200); //! Initialize the serial port to the PC
84 print_title();
85 ltc2972_0_i2c_address = LTC2972_0_I2C_ADDRESS;
86 ltc2972_1_i2c_address = LTC2972_1_I2C_ADDRESS;
87
88 print_prompt();
89 }
90
91 //! Repeats Linduino loop
92 //! @return void
93 void loop()
94 {
95 uint8_t user_command;
96 uint8_t res;
97 uint8_t model[7];
98 uint8_t revision[10];
99 uint8_t *addresses = NULL;
100
101 if (Serial.available()) //! Checks for user input
102 {
103 user_command = read_int(); //! Reads the user command
104 if (user_command != 'm')
105 Serial.println(user_command);
106
107 switch (user_command) //! Prints the appropriate submenu
108 {
109 case 1:
110 menu_1_input_telemetry(); // Print single-ended voltage menu
111 break;
112 case 2:
113 menu_2_output_telemetry();
114 break;
115 case 3:
116 print_all_status();
117 break;
118 case 4:
119 menu_3_pg_commands();
120 break;
121 case 5:
122 menu_4_margin_commands();
123 break;
124 case 6:
125 menu_5_pec_commands();
126 break;
127 case 7:
128 sequence_off_on();
129 break;
130 case 8:
131 addresses = smbus->probe(0);
132 while (*addresses != 0)
133 {
134 Serial.print(F("ADDR 0x"));
135 Serial.println(*addresses++, HEX);
136 }
137 break;
138 case 9 :
139 pmbus->startGroupProtocol();
140 pmbus->restoreFromNvm(ltc2972_0_i2c_address);
141 pmbus->restoreFromNvm(ltc2972_1_i2c_address);
142 pmbus->executeGroupProtocol();
143 break;
144 default:
145 Serial.println(F("Incorrect Option"));
146 break;
147 }
148 print_prompt();
149 }
150
151 }
152
153 // Function Definitions
154
155 //! Prints the title block when program first starts.
156 //! @return void
157 void print_title()
158 {
159 Serial.print(F("\n*****************************************************************\n"));
160 Serial.print(F("* DC2675A Hello World Demonstration Program *\n"));
161 Serial.print(F("* *\n"));
162 Serial.print(F("* This program demonstrates how to send and receive data from *\n"));
163 Serial.print(F("* the LTC2675A demo board. *\n"));
164 Serial.print(F("* *\n"));
165 Serial.print(F("* Set the baud rate to 115200 and select the newline terminator.*\n"));
166 Serial.print(F("* *\n"));
167 Serial.print(F("*****************************************************************\n"));
168 }
169
170 //! Prints main menu.
171 //! @return void
172 void print_prompt()
173 {
174 Serial.println();
175 Serial.print(F(" 1-Read Input Telemetry\n"));
176 Serial.print(F(" 2-Read Output Telemetry\n"));
177 Serial.print(F(" 3-Read All Status\n"));
178 Serial.print(F(" 4-PG Commands\n"));
179 Serial.print(F(" 5-Margin Commands\n"));
180 Serial.print(F(" 6-PEC Options\n"));
181 Serial.print(F(" 7-Sequence Off/On\n"));
182 Serial.print(F(" 8-Bus Probe\n"));
183 Serial.print(F(" 9-Reset\n"));
184 Serial.print(F("\nEnter a command:"));
185 }
186
187 //! Prints a warning if the demo board is not detected.
188 //! @return void
189 void print_warning_prompt()
190 {
191 Serial.println(F("\nWarning: Demo board not detected. Linduino will attempt to proceed."));
192 }
193
194 //! Print all output voltages
195 //! @return void
196 void print_all_output_voltages()
197 {
198 float voltage;
199 uint8_t page;
200
201 for (page = 0; page < 2; page++)
202 {
203 pmbus->setPage(ltc2972_0_i2c_address, page);
204 voltage = pmbus->readVout(ltc2972_0_i2c_address, false);
205 Serial.print(F(" LTC2972:U0:CH"));
206 Serial.print(page, DEC);
207 Serial.print(F(" VOUT = "));
208 Serial.println(voltage, DEC);
209
210 }
211
212 for (page = 0; page < 2; page++)
213 {
214 pmbus->setPage(ltc2972_1_i2c_address, page);
215 voltage = pmbus->readVout(ltc2972_1_i2c_address, false);
216 Serial.print(F(" LTC2972:U1:CH"));
217 Serial.print(page, DEC);
218 Serial.print(F(" VOUT = "));
219 Serial.println(voltage, DEC);
220 }
221 }
222
223 //! Print all input voltages
224 //! @return void
225 void print_all_input_voltages()
226 {
227 float voltage;
228
229 voltage = pmbus->readVin(ltc2972_0_i2c_address, false);
230 Serial.print(F(" LTC2972:U0 VIN = "));
231 Serial.println(voltage, DEC);
232 voltage = pmbus->readVin(ltc2972_1_i2c_address, false);
233 Serial.print(F(" LTC2972:U1 VIN = "));
234 Serial.println(voltage, DEC);
235
236 }
237
238 //! Print all output currents
239 //! @return void
240 void print_all_output_currents()
241 {
242 float current;
243 uint8_t page;
244
245 for (page = 0; page < 2; page++)
246 {
247 pmbus->setPage(ltc2972_0_i2c_address, page);
248 current = pmbus->readIout(ltc2972_0_i2c_address, false);
249 Serial.print(F(" LTC2972:U0:CH"));
250 Serial.print(page, DEC);
251 Serial.print(F(" IOUT = "));
252 Serial.println(current, DEC);
253 }
254
255 for (page = 0; page < 2; page++)
256 {
257 pmbus->setPage(ltc2972_1_i2c_address, page);
258 current = pmbus->readIout(ltc2972_1_i2c_address, false);
259 Serial.print(F(" LTC2972:U1:CH"));
260 Serial.print(page, DEC);
261 Serial.print(F(" IOUT = "));
262 Serial.println(current, DEC);
263 }
264 }
265
266 //! Print all input currents
267 //! @return void
268 void print_all_input_currents()
269 {
270 float current;
271
272 current = pmbus->readIin(ltc2972_0_i2c_address, false);
273 Serial.print(F(" LTC2972:U0 Iin = "));
274 Serial.println(current, DEC);
275 current = pmbus->readIin(ltc2972_1_i2c_address, false);
276 Serial.print(F(" LTC2972:U1 Iin = "));
277 Serial.println(current, DEC);
278
279 }
280
281 //! Print all output power
282 //! @return void
283 void print_all_output_power()
284 {
285 float power;
286 uint8_t page;
287
288 for (page = 0; page < 2; page++)
289 {
290 pmbus->setPage(ltc2972_0_i2c_address, page);
291 power = pmbus->readPout(ltc2972_0_i2c_address, false);
292 Serial.print(F(" LTC2972:U0:CH"));
293 Serial.print(page, DEC);
294 Serial.print(F(" POUT = "));
295 Serial.println(power, DEC);
296 }
297
298 for (page = 0; page < 2; page++)
299 {
300 pmbus->setPage(ltc2972_1_i2c_address, page);
301 power = pmbus->readPout(ltc2972_1_i2c_address, false);
302 Serial.print(F(" LTC2972:U1:CH"));
303 Serial.print(page, DEC);
304 Serial.print(F(" POUT = "));
305 Serial.println(power, DEC);
306 }
307 }
308
309 //! Print all input power
310 //! @return void
311 void print_all_input_power()
312 {
313 float power;
314
315 power = pmbus->readPin(ltc2972_0_i2c_address, false);
316 Serial.print(F(" LTC2972:U0 Pin = "));
317 Serial.println(power, DEC);
318 power = pmbus->readPin(ltc2972_1_i2c_address, false);
319 Serial.print(F(" LTC2972:U1 Pin = "));
320 Serial.println(power, DEC);
321
322 }
323
324 //! Print all status bytes and words
325 //! @return void
326 void print_all_status()
327 {
328 uint8_t b;
329 uint16_t w;
330 uint8_t page;
331
332 for (page = 0; page < 2; page++)
333 {
334 Serial.print(F("U0:CH"));
335 Serial.println(page, DEC);
336 pmbus->setPage(ltc2972_0_i2c_address, page);
337 b = pmbus->readStatusByte(ltc2972_0_i2c_address);
338 Serial.print(F(" LTC2972 STATUS BYTE 0x"));
339 Serial.println(b, HEX);
340 w = pmbus->readStatusWord(ltc2972_0_i2c_address);
341 Serial.print(F(" LTC2972 STATUS WORD 0x"));
342 Serial.println(w, HEX);
343 }
344
345 for (page = 0; page < 2; page++)
346 {
347 Serial.print(F("U1:CH"));
348 Serial.println(page, DEC);
349 pmbus->setPage(ltc2972_1_i2c_address, page);
350 b = pmbus->readStatusByte(ltc2972_1_i2c_address);
351 Serial.print(F(" LTC2972 STATUS BYTE 0x"));
352 Serial.println(b, HEX);
353 w = pmbus->readStatusWord(ltc2972_1_i2c_address);
354 Serial.print(F(" LTC2972 STATUS WORD 0x"));
355 Serial.println(w, HEX);
356 }
357 }
358
359 //! Print all PG states
360 //! @return void
361 void print_all_pg()
362 {
363 uint16_t pg_status;
364
365 pg_status = smbus->readWord(ltc2972_0_i2c_address, 0xE5);
366 pg_status &= 0x03;
367 Serial.print(F(" PG0 = LOGIC"));
368 if (pg_status & 0x01)
369 {
370 Serial.print(F(" HIGH\n"));
371 }
372 else
373 {
374 Serial.print(F(" LOW\n"));
375 }
376 Serial.print(F(" PG1 = LOGIC"));
377 if (pg_status & 0x02)
378 {
379 Serial.print(F(" HIGH\n"));
380 }
381 else
382 {
383 Serial.print(F(" LOW\n"));
384 }
385
386 pg_status = smbus->readWord(ltc2972_1_i2c_address, 0xE5);
387 pg_status &= 0x03;
388 Serial.print(F(" PG2 = LOGIC"));
389 if (pg_status & 0x01)
390 {
391 Serial.print(F(" HIGH\n"));
392 }
393 else
394 {
395 Serial.print(F(" LOW\n"));
396 }
397 Serial.print(F(" PG3 = LOGIC"));
398 if (pg_status & 0x02)
399 {
400 Serial.print(F(" HIGH\n"));
401 }
402 else
403 {
404 Serial.print(F(" LOW\n"));
405 }
406 }
407
408
409 //! Toggle PG0
410 //! @return void
411 void toggle_pg0()
412 {
413
414 pmbus->setPage(ltc2972_0_i2c_address, 0);
415 smbus->writeWord(ltc2972_0_i2c_address, 0xCB, MFR_PG_CONFIG_WRITE_PG); //! enable writing to pg register
416 smbus->writeByte(ltc2972_0_i2c_address, 0xCE, 0x00); //! force pg low
417 delay(1000);
418 smbus->writeByte(ltc2972_0_i2c_address, 0xCE, 0x01); //! return pg to hi-z
419 smbus->writeWord(ltc2972_0_i2c_address, 0xCB, MFR_PG_CONFIG_ORIGINAL); //! return register to original state
420 }
421
422 //! Toggle PG0
423 //! @return void
424 void toggle_pg1()
425 {
426 pmbus->setPage(ltc2972_0_i2c_address, 1);
427 smbus->writeWord(ltc2972_0_i2c_address, 0xCB, MFR_PG_CONFIG_WRITE_PG);
428 smbus->writeByte(ltc2972_0_i2c_address, 0xCE, 0x00);
429 delay(1000);
430 smbus->writeByte(ltc2972_0_i2c_address, 0xCE, 0x01);
431 smbus->writeWord(ltc2972_0_i2c_address, 0xCB, MFR_PG_CONFIG_ORIGINAL);
432 }
433
434 //! Toggle PG2
435 //! @return void
436 void toggle_pg2()
437 {
438 pmbus->setPage(ltc2972_1_i2c_address, 0);
439 smbus->writeWord(ltc2972_1_i2c_address, 0xCB, MFR_PG_CONFIG_WRITE_PG);
440 smbus->writeByte(ltc2972_1_i2c_address, 0xCE, 0x00);
441 delay(1000);
442 smbus->writeByte(ltc2972_1_i2c_address, 0xCE, 0x01);
443 smbus->writeWord(ltc2972_1_i2c_address, 0xCB, MFR_PG_CONFIG_ORIGINAL);
444 }
445
446 //! Toggle PG3
447 //! @return void
448 void toggle_pg3()
449 {
450 pmbus->setPage(ltc2972_1_i2c_address, 1);
451 smbus->writeWord(ltc2972_1_i2c_address, 0xCB, MFR_PG_CONFIG_WRITE_PG);
452 smbus->writeByte(ltc2972_1_i2c_address, 0xCE, 0x00);
453 delay(1000);
454 smbus->writeByte(ltc2972_1_i2c_address, 0xCE, 0x01);
455 smbus->writeWord(ltc2972_1_i2c_address, 0xCB, MFR_PG_CONFIG_ORIGINAL);
456 }
457
458 //! Sequence off then on
459 //! @return void
460 void sequence_off_on()
461 {
462 pmbus->sequenceOffGlobal();
463 delay (2000);
464 pmbus->sequenceOnGlobal();
465 }
466
467 //! Margin high
468 //! @return void
469 void margin_high()
470 {
471 pmbus->marginHighGlobal();
472 }
473
474 //! Margin low
475 //! @return void
476 void margin_low()
477 {
478 pmbus->marginLowGlobal();
479 }
480
481 //! Go to nominal
482 //! @return void
483 void margin_off()
484 {
485 pmbus->sequenceOnGlobal();
486 }
487
488 //! Display menu 1
489 //! @return void
490 void menu_1_input_telemetry()
491 {
492 uint8_t user_command;
493
494 do
495 {
496 //! Displays the Input Telemetry menu
497 Serial.println();
498 Serial.print(F(" 1-Read Input Voltages\n"));
499 Serial.print(F(" 2-Read Input Currents\n"));
500 Serial.print(F(" 3-Read Input Power\n"));
501 Serial.print(F(" 4-Read All Input Telemetry\n"));
502 Serial.print(F(" m-Main Menu\n"));
503 Serial.print(F("\nEnter a command: "));
504
505 user_command = read_int(); //! Reads the user command
506 if (user_command == 'm') // Print m if it is entered
507 {
508 Serial.print(F("m\n"));
509 }
510 else
511 Serial.println(user_command); // Print user command
512
513 switch (user_command)
514 {
515 case 1:
516 print_all_input_voltages();
517 break;
518 case 2:
519 print_all_input_currents();
520 break;
521 case 3:
522 print_all_input_power();
523 break;
524 case 4:
525 Serial.println();
526 print_all_input_voltages();
527 Serial.println();
528 print_all_input_currents();
529 Serial.println();
530 print_all_input_power();
531 break;
532 default:
533 if (user_command != 'm')
534 Serial.println(F("Invalid Selection"));
535 break;
536 }
537 }
538 while (user_command != 'm');
539 }
540
541 //! Display menu 2
542 //! @return void
543 void menu_2_output_telemetry()
544 {
545 uint8_t user_command;
546
547 do
548 {
549 //! Displays the Ouput Telemetry menu
550 Serial.println();
551 Serial.print(F(" 1-Read Output Voltages\n"));
552 Serial.print(F(" 2-Read Output Currents\n"));
553 Serial.print(F(" 3-Read Output Power\n"));
554 Serial.print(F(" 4-Read All Output Telemetry\n"));
555 Serial.print(F(" m-Main Menu\n"));
556 Serial.print(F("\nEnter a command: "));
557
558 user_command = read_int(); //! Reads the user command
559 if (user_command == 'm') // Print m if it is entered
560 {
561 Serial.print(F("m\n"));
562 }
563 else
564 Serial.println(user_command); // Print user command
565
566 switch (user_command)
567 {
568 case 1:
569 print_all_output_voltages();
570 break;
571 case 2:
572 print_all_output_currents();
573 break;
574 case 3:
575 print_all_output_power();
576 break;
577 case 4:
578 Serial.println();
579 print_all_output_voltages();
580 Serial.println();
581 print_all_output_currents();
582 Serial.println();
583 print_all_output_power();
584 break;
585 default:
586 if (user_command != 'm')
587
588 Serial.println(F("Invalid Selection"));
589 break;
590 }
591 }
592 while (user_command != 'm');
593 }
594
595 //! Display menu 3
596 //! @return void
597 void menu_3_pg_commands()
598 {
599 uint8_t user_command;
600
601 do
602 {
603 //! Displays the PG Command menu
604 Serial.println();
605 Serial.print(F(" 1-Read All PG States\n"));
606 Serial.print(F(" 2-Force PG0 Low (1 sec)\n"));
607 Serial.print(F(" 3-Force PG1 Low (1 sec)\n"));
608 Serial.print(F(" 4-Force PG2 Low (1 sec)\n"));
609 Serial.print(F(" 5-Force PG3 Low (1 sec)\n"));
610 Serial.print(F(" m-Main Menu\n"));
611 Serial.print(F("\nEnter a command: "));
612
613 user_command = read_int(); //! Reads the user command
614 if (user_command == 'm') // Print m if it is entered
615 {
616 Serial.print(F("m\n"));
617 }
618 else
619 Serial.println(user_command); // Print user command
620
621 switch (user_command)
622 {
623 case 1:
624 print_all_pg();
625 break;
626 case 2:
627 toggle_pg0();
628 break;
629 case 3:
630 toggle_pg1();
631 break;
632 case 4:
633 toggle_pg2();
634 break;
635 case 5:
636 toggle_pg3();
637 break;
638 default:
639 if (user_command != 'm')
640 Serial.println(F("Invalid Selection"));
641 break;
642 }
643 }
644 while (user_command != 'm');
645 }
646
647
648 //! Display menu 4
649 //! @return void
650 void menu_4_margin_commands()
651 {
652 uint8_t user_command;
653
654 do
655 {
656 //! Displays the Margin menu
657 Serial.println();
658 Serial.print(F(" 1-Margin High\n"));
659 Serial.print(F(" 2-Margin Low\n"));
660 Serial.print(F(" 3-Margin Off\n"));
661 Serial.print(F(" m-Main Menu\n"));
662 Serial.print(F("\nEnter a command: "));
663
664 user_command = read_int(); //! Reads the user command
665 if (user_command == 'm') // Print m if it is entered
666 {
667 Serial.print(F("m\n"));
668 }
669 else
670 Serial.println(user_command); // Print user command
671
672 switch (user_command)
673 {
674 case 1:
675 margin_high();
676 delay(500);
677 print_all_output_voltages();
678 break;
679 case 2:
680 margin_low();
681 delay(500);
682 print_all_output_voltages();
683 break;
684 case 3:
685 margin_off();
686 delay(500);
687 print_all_output_voltages();
688 break;
689 default:
690 if (user_command != 'm')
691 Serial.println(F("Invalid Selection"));
692 break;
693 }
694 }
695 while (user_command != 'm');
696 }
697
698 //! Display menu 5
699 //! @return void
700 void menu_5_pec_commands()
701 {
702 uint8_t user_command;
703
704 do
705 {
706 //! Displays the PEC menu
707 Serial.println();
708 Serial.print(F(" 1-PEC On\n"));
709 Serial.print(F(" 2-PEC Off\n"));
710 Serial.print(F(" m-Main Menu\n"));
711 Serial.print(F("\nEnter a command: "));
712
713 user_command = read_int(); //! Reads the user command
714 if (user_command == 'm') // Print m if it is entered
715 {
716 Serial.print(F("m\n"));
717 }
718 else
719 Serial.println(user_command); // Print user command
720
721 switch (user_command)
722 {
723 case 1:
724 pmbus->enablePec(ltc2972_0_i2c_address);
725 pmbus->enablePec(ltc2972_1_i2c_address);
726 delete smbus;
727 delete pmbus;
728 smbus = new LT_SMBusPec();
729 pmbus = new LT_PMBus(smbus);
730 Serial.print(F("\n PEC Enabled"));
731 break;
732 case 2:
733 pmbus->enablePec(ltc2972_0_i2c_address);
734 pmbus->enablePec(ltc2972_1_i2c_address);
735 delete smbus;
736 delete pmbus;
737 smbus = new LT_SMBusNoPec();
738 pmbus = new LT_PMBus(smbus);
739 Serial.print(F("\n PEC Disabled"));
740 break;
741 default:
742 if (user_command != 'm')
743 Serial.println(F("Invalid Selection"));
744 break;
745 }
746 }
747 while (user_command != 'm');
748 }
749
print_all_output_power
static void print_all_output_power()
Print all output power.
Definition: DC2675A.ino:283
toggle_pg3
static void toggle_pg3()
Toggle PG3.
Definition: DC2675A.ino:448
LT_PMBus::readPout
float readPout(uint8_t address, bool polling)
Get the measured output power.
Definition: LT_PMBus.cpp:1963
user_command
unsigned char user_command
Definition: Serial_EEPROM_Test.ino:75
ltc2972_1_i2c_address
static uint8_t ltc2972_1_i2c_address
Definition: DC2675A.ino:73
LTC2972_0_I2C_ADDRESS
#define LTC2972_0_I2C_ADDRESS
Definition: DC2675A.ino:66
menu_4_margin_commands
static void menu_4_margin_commands()
Display menu 4.
Definition: DC2675A.ino:650
setup
static void setup()
Initialize Linduino.
Definition: DC2675A.ino:81
menu_5_pec_commands
static void menu_5_pec_commands()
Display menu 5.
Definition: DC2675A.ino:700
margin_low
static void margin_low()
Margin low.
Definition: DC2675A.ino:476
LT_SMBusPec.h
LTC SMBus Support: Implementation for a shared SMBus layer.
LT_PMBus::readStatusByte
uint8_t readStatusByte(uint8_t address)
Get the status byte.
Definition: LT_PMBus.cpp:2423
toggle_pg1
static void toggle_pg1()
Toggle PG0.
Definition: DC2675A.ino:424
Linduino.h
Header File for Linduino Libraries and Demo Code.
LT_PMBus::enablePec
void enablePec(uint8_t address)
Enable pec for all transactions.
Definition: LT_PMBus.cpp:3173
LT_SMBusNoPec
Definition: LT_SMBusNoPec.h:60
LTC2972_1_I2C_ADDRESS
#define LTC2972_1_I2C_ADDRESS
Definition: DC2675A.ino:67
LT_PMBus::readStatusWord
uint16_t readStatusWord(uint8_t address)
Get the status word.
Definition: LT_PMBus.cpp:2470
LT_PMBus::readIout
float readIout(uint8_t address, bool polling)
Get the measured output current.
Definition: LT_PMBus.cpp:1898
toggle_pg0
static void toggle_pg0()
Toggle PG0.
Definition: DC2675A.ino:411
MFR_PG_CONFIG_WRITE_PG
#define MFR_PG_CONFIG_WRITE_PG
Definition: DC2675A.ino:69
LT_SMBus::writeWord
virtual void writeWord(uint8_t address, uint8_t command, uint16_t data)=0
SMBus write word command.
print_all_input_currents
static void print_all_input_currents()
Print all input currents.
Definition: DC2675A.ino:268
menu_2_output_telemetry
static void menu_2_output_telemetry()
Display menu 2.
Definition: DC2675A.ino:543
LT_SMBusPec
Definition: LT_SMBusPec.h:61
loop
static void loop()
Repeats Linduino loop.
Definition: DC2675A.ino:93
menu_3_pg_commands
static void menu_3_pg_commands()
Display menu 3.
Definition: DC2675A.ino:597
LT_SMBus
Definition: LT_SMBus.h:61
LT_PMBus::readPin
float readPin(uint8_t address, bool polling)
Get the measured input power.
Definition: LT_PMBus.cpp:2027
LT_PMBus::startGroupProtocol
void startGroupProtocol(void)
starts group protocol
Definition: LT_PMBus.cpp:3350
LT_PMBus::readVout
float readVout(uint8_t address, bool polling)
Get the measured output voltage.
Definition: LT_PMBus.cpp:1598
LT_I2CBus.h
LT_I2CBus: Routines to communicate to I2C by Wire Library.
margin_high
static void margin_high()
Margin high.
Definition: DC2675A.ino:469
ltc2972_0_i2c_address
static uint8_t ltc2972_0_i2c_address
Definition: DC2675A.ino:72
print_all_input_voltages
static void print_all_input_voltages()
Print all input voltages.
Definition: DC2675A.ino:225
LT_SMBus::writeByte
virtual void writeByte(uint8_t address, uint8_t command, uint8_t data)=0
SMBus write byte command.
LT_PMBus::setPage
void setPage(uint8_t address, uint8_t page)
Set the page.
Definition: LT_PMBus.cpp:3156
LT_PMBus::marginLowGlobal
void marginLowGlobal(void)
Margin all rails low.
Definition: LT_PMBus.cpp:3078
menu_1_input_telemetry
static void menu_1_input_telemetry()
Display menu 1.
Definition: DC2675A.ino:490
LT_PMBus::sequenceOnGlobal
void sequenceOnGlobal(void)
Sequence on all rails.
Definition: LT_PMBus.cpp:2896
LT_SMBus::probe
virtual uint8_t * probe(uint8_t command)=0
SMBus bus probe.
print_title
static void print_title()
Prints the title block when program first starts.
Definition: DC2675A.ino:157
print_all_pg
static void print_all_pg()
Print all PG states.
Definition: DC2675A.ino:361
LT_PMBus::readIin
float readIin(uint8_t address, bool polling)
Get the input current.
Definition: LT_PMBus.cpp:1805
LT_SMBusNoPec.h
LTC SMBus Support: Implementation for a shared SMBus layer.
MFR_PG_CONFIG_ORIGINAL
#define MFR_PG_CONFIG_ORIGINAL
Definition: DC2675A.ino:68
toggle_pg2
static void toggle_pg2()
Toggle PG2.
Definition: DC2675A.ino:436
UserInterface.h
read_int
int32_t read_int()
Definition: UserInterface.cpp:93
sequence_off_on
static void sequence_off_on()
Sequence off then on.
Definition: DC2675A.ino:460
LT_PMBus::sequenceOffGlobal
void sequenceOffGlobal(void)
Sequence off all rails.
Definition: LT_PMBus.cpp:2876
LT_PMBus::readVin
float readVin(uint8_t address, bool polling)
Get the input voltage.
Definition: LT_PMBus.cpp:1487
LT_PMBus::executeGroupProtocol
void executeGroupProtocol(void)
ends group protocol
Definition: LT_PMBus.cpp:3356
print_all_input_power
static void print_all_input_power()
Print all input power.
Definition: DC2675A.ino:311
LT_PMBusMath
Definition: LT_PMBusMath.h:53
math
static LT_PMBusMath * math
Definition: DC2675A.ino:75
LT_PMBus::restoreFromNvm
void restoreFromNvm(uint8_t address)
Restore device from NVM.
Definition: LT_PMBus.cpp:2663
LT_PMBus.h
LTC PMBus Support.
print_all_status
static void print_all_status()
Print all status bytes and words.
Definition: DC2675A.ino:326
voltage
static float voltage
Definition: DC2289AA.ino:71
pmbus
static LT_PMBus * pmbus
Definition: DC2675A.ino:77
current
static uint16_t current
the current measurement from the LTC3335&#39;s counter test mode.
Definition: DC2343A.ino:114
LT_PMBus::marginHighGlobal
void marginHighGlobal(void)
Margin all rails high.
Definition: LT_PMBus.cpp:3068
LT_PMBusMath.h
LTC PMBus Support: Math conversion routines.
margin_off
static void margin_off()
Go to nominal.
Definition: DC2675A.ino:483
print_prompt
static void print_prompt()
Prints main menu.
Definition: DC2675A.ino:172
print_all_output_currents
static void print_all_output_currents()
Print all output currents.
Definition: DC2675A.ino:240
smbus
static LT_SMBus * smbus
Definition: DC2675A.ino:76
LT_SMBus::readWord
virtual uint16_t readWord(uint8_t address, uint8_t command)=0
SMBus read word command.
print_all_output_voltages
static void print_all_output_voltages()
Print all output voltages.
Definition: DC2675A.ino:196
LT_PMBus
PMBus communication.
Definition: LT_PMBus.h:370
print_warning_prompt
static void print_warning_prompt()
Prints a warning if the demo board is not detected.
Definition: DC2675A.ino:189