LTM4676 - Dual 13A or Single 26A μModule (Power Module) Regulator with Digital Power System Management

Features

  • Order Custom Programmed Parts
  • Dual, Fast, Analog Loops with Digital Interface for Control and Monitoring
  • Wide Input Voltage Range: 4.5V to 26.5V
  • Output Voltage Range: 0.5V to 5.4V (4V on VOUT0)
  • ±1% Maximum DC Output Error Over Temperature
  • ±2.5% Current Readback Accuracy at 10A Load
  • 400kHz PMBus-Compliant I2C Serial Interface
  • Integrated 16-Bit ΔΣ ADC
  • Constant Frequency Current Mode Control
  • Parallel and Current Share Multiple Modules
  • 16 Slave Addresses; Rail/Global Addressing
  • 16mm × 16mm × 5.01mm BGA Package
  • Download LTpowerPlay Software

Readable Data:

      • Input and Output Voltages, Currents, and Temperatures
      • Running Peak Values, Uptime, Faults and Warnings
      • Onboard EEPROM Fault Log Record

Writable Data and Configurable Parameters:

    • Output Voltage, Voltage Sequencing and Margining
    • Digital Soft-Start/Stop Ramp
    • OV/UV/OT, UVLO, Frequency and Phasing

Typical Application

LTM4676 Typical Application
LTM4676 Typical Application
LTM4676 Typical Application
LTM4676 Typical Application
LTM4676 Typical Application

Description

The LTM®4676 is a dual 13A or single 26A step-down uModule® (power module) DC/DC regulator featuring remote configurability and telemetry-monitoring of power management parameters over PMBus— an open standard I2C-based digital interface protocol . The LTM4676 is comprised of fast analog control loops, precision mixedsignal circuitry, EEPROM, power MOSFETs, inductors and supporting components.

The LTM4676’s 2-wire serial interface allows outputs to be margined, tuned and ramped up and down at programmable slew rates with sequencing delay times. Input and output currents and voltages, output power, temperatures, uptime and peak values are readable. Custom configuration of the EEPROM contents is not required. At start-up, output voltages, switching frequency, and channel phase angle assignments can be set by pin-strapping resistors. The LTpowerPlay™ GUI and DC1613 USB-to-PMBus converter and demo kits are available.

The LTM4676 is offered in a 16mm × 16mm × 5.01mm BGA package available with SnPb or RoHS compliant terminal finish.

PART
NUMBER
TURN-ON
START-UP TIME
(MAX) (ms)
VIN RANGE
(V)
VOUT RANGE (V) PIN-COMPATIBLE
LTM4676 170 4.5 to 26.5 0.5V to 4 (CH0)
0.5 to 5.5 (Both CH)
Yes
LTM4676A 70 4.5 to 17 0.5 to 5.5 (Both CH)
See Table 1 and page 22 for more on LTM4676A’s enhancements over LTM4676's feature set.

Packaging

CAD Symbols and Footprints: The downloadable Zip file below contains the schematic symbol and PCB footprints.

For complete and up to date package information and drawings, please refer to our packaging page

Part Number Package Code Temp Package
Drawing
RoHS
LTM4676EY#PBF 16mm x 16mm x 5.01mm BGA BGA E 05-08-1920 Yes
LTM4676IY#PBF 16mm x 16mm x 5.01mm BGA BGA I 05-08-1920 Yes


LTM4676 Package Drawing

Order Info

  • Part numbers ending in PBF are lead free. Solder plated terminal finish (SnPb) versions are non-standard and special terms and conditions and pricing applies if available. Please contact LTC marketing for information.
  • Part numbers containing TR or TRM are shipped in tape and reel or 500 unit mini tape and reel, respectively
  • Please refer to our general ordering information or the product datasheet for more details

Package Variations and Pricing

Part Number Package Temp Price
(1-99)
Price
(1k)*
RoHS
LTM4676EY#PBF 16mm x 16mm x 5.01mm BGA E $47.93 $33.55 Yes
LTM4676IY#PBF 16mm x 16mm x 5.01mm BGA I $52.73 $36.91 Yes
Buy NowRequest Samples
* The USA list pricing shown is for BUDGETARY USE ONLY, shown in United States dollars (FOB USA per unit for the stated volume), and is subject to change. International prices may differ due to local duties, taxes, fees and exchange rates. For volume-specific price or delivery quotes, please contact your local Linear Technology sales office or authorized distributor.

Demo Boards

Linear Technology offers many demo boards free of charge to qualified customers. Contact your local sales office or distributor to inquire about a demo board. Certain demo boards are also available for sale via credit card on this website. Demo boards are for evaluation purposes only. It remains the customer’s responsibility to verify proper and reliable operation in the actual end application.

Part Number Description Price Documentation
DC1811B-A LTM4676 Demo Board | Dual Output, μModule Buck with PMBus, 4.5V ≤ VIN ≤ 26.5V, Vout0/Vout1 = 1V/1.8V @ 13A $65.00
DC1811B-KIT LTM4676 with DC1613A Demo Kit | LTM4676 (DC1811) with USB-to-PMBus Adapter (DC1613A) $115.00
DC2087A LTM4676 Demo Board | Buck µModule, 4.5V ≤ VIN ≤ 16V, Vout = 1V @ 26A $65.00
DC2269A-A LTM4676 Plug-In Demo Board | 1.5"x1.2" with Edge Connector, Dual 13A Buck μModule with PMBus, 4.5V ≤ VIN ≤ 26.5V, Vout0 = 1V @ 13A, Vout1 = 1.8V @ 13A $65.00
Buy Now

Companion Boards

Part Number Description Price Documentation
DC1613A USB-to-PMBus Controller for Use with LTpowerPlay $50.00
DC2086A Powered Programming Adapter for Digital Power System Management Products $199.00
Buy Now
Click here to view our complete list of demo boards

Applications

  • System Optimization, Characterization and Data Mining in Prototype, Production and Field Environments
  • Telecom, Datacom, and Storage Systems

Product Notifications

Please login to your MyLinear account for notifications of datasheet updates, new document releases and LTspice model announcements for your favorite products. If you do not have a MyLinear account you may Sign Up Now.

Forgot your password? Click here.
Need help? Email mylinear@linear.com with questions and comments.

Design Tools

LTpowerPlay

LTpowerPlay is a powerful development environment supporting Linear Technology's Digital Power System Management (PSM) products, providing unprecedented diagnostic and debug features.

Click here to download LTpowerPlay

LTspice

LTspice® software is a powerful, fast and free simulation tool, schematic capture and waveform viewer with enhancements and models for improving the simulation of switching regulators. Click here to download LTspice

To launch a ready to run LTspice demonstration circuit for this part:

To explore other ready to run LTspice demonstration circuits, please visit our Demo Circuits Collection.

Models for the following parts are available in LTspice IV:
LTM4676
LTM4676A

LTpowerCAD

The LTpowerCAD design tool is a complete power supply design tool program that can significantly ease the tasks of power supply design. It guides users to a solution, selects power stage components, provides detailed power efficiency, shows quick loop bode plot stability and load transient analysis, and can export a final design to LTspice for simulation. Click here to download LTpowerCAD

To open the project file for this circuit:

Design tools for the following parts are available in LTpowerCAD:
LTM4676
LTM4676 Parallel
LTM4676A
LTM4676A Parallel

Linduino

Linduino is an Arduino compatible platform for developing and distributing firmware libraries and code for SPI and I²C-compatible integrated circuits. The Linduino One board interfaces to more than 300 QuikEval demonstration cards, supporting a variety of product types including analog-to-digital converters (ADCs)digital-to-analog converters (DACs)power monitors, and more. Firmware libraries for individual devices are written in C and designed to be portable to a wide variety of processors and microcontrollers. Each library has a demonstration program that can be uploaded to the Linduino One platform to allow the circuit and software to be quickly and easily verified.

Click here for more information on Linduino

Code

Linduino is Linear Technology's Arduino compatible system for developing and distributing firmware libraries and example code for Linear Technology’s integrated circuits. The code below can be downloaded or copied and pasted into your project. Please visit the Linduino Home Page for demo board, manual and setup information.

This part is Code Supported: There is example code available for this part. The code below may rely on other drivers available in the full library.

Download LTM4676 - DC1811B.ino

/*!
Linear Technology DC1811B Demonstration Board
LTM4676: Dual Output PolyPhase Step-Down DC/DC Controller with Digital Power System Management

@verbatim

NOTES
  Setup:
   Set the terminal baud rate to 115200 and select the newline terminator.

@endverbatim

http://www.linear.com/product/LTM4676

http://www.linear.com/demo/DC1811B

REVISION HISTORY
$Revision: 4454 $
$Date: 2015-12-01 16:41:13 -0700 (Tue, 01 Dec 2015) $

Copyright (c) 2014, Linear Technology Corp.(LTC)
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of Linear Technology Corp.

The Linear Technology Linduino is not affiliated with the official Arduino team.
However, the Linduino is only possible because of the Arduino team's commitment
to the open-source community.  Please, visit http://www.arduino.cc and
http://store.arduino.cc , and consider a purchase that will help fund their
ongoing work.
*/

/*! @file
    @ingroup LTM4676
*/

#include <Arduino.h>
#include <stdint.h>
#include "Linduino.h"
#include "UserInterface.h"
#include "LT_I2CBus.h"
#include "LT_SMBusNoPec.h"
#include "LT_SMBusPec.h"
#include "LT_PMBus.h"

#define LTM4676_I2C_ADDRESS 0x40

// Global variables
static uint8_t LTM4676_i2c_address;
static LT_SMBus *smbus = new LT_SMBusNoPec();
static LT_PMBus *pmbus = new LT_PMBus(smbus);

//! Initialize Linduino
//! @return void
void setup()
{
  Serial.begin(115200);         //! Initialize the serial port to the PC
  print_title();
  LTM4676_i2c_address = LTM4676_I2C_ADDRESS;
  pmbus->disablePec(LTM4676_i2c_address);
  print_prompt();
}

//! Repeats Linduino loop
//! @return void
void loop()
{
  uint8_t user_command;
  uint8_t res;
  uint8_t model[7];
  uint8_t *addresses = NULL;

  if (Serial.available())                          //! Checks for user input
  {
    user_command = read_int();                     //! Reads the user command
    if (user_command != 'm')
      Serial.println(user_command);

    switch (user_command)                          //! Prints the appropriate submenu
    {
      case 1:
        menu_1_basic_commands();                 // Print single-ended voltage menu
        break;
      case 2:
        pmbus->readModel(LTM4676_i2c_address, model);
        Serial.print(F("MODEL "));
        Serial.print((char *)model);
        Serial.println();
        break;
      case 3:
        res = pmbus->readPmbusRevision(LTM4676_i2c_address);
        Serial.print(F("REVISION "));
        Serial.println(res, HEX);
        break;
      case 4:
        pmbus->enablePec(LTM4676_i2c_address);
        delete smbus;
        delete pmbus;
        smbus = new LT_SMBusPec();
        pmbus = new LT_PMBus(smbus);
        break;
      case 5:
        pmbus->disablePec(LTM4676_i2c_address);
        delete smbus;
        delete pmbus;
        smbus = new LT_SMBusNoPec();
        pmbus = new LT_PMBus(smbus);
        break;
      case 6:
        addresses = smbus->probe(0);
        while (*addresses != 0)
        {
          Serial.print(F("ADDR 0x"));
          Serial.println(*addresses++, HEX);
        }
        break;
      case 7 :
        pmbus->resetGlobal();
        break;
      default:
        Serial.println(F("Incorrect Option"));
        break;
    }
    print_prompt();
  }

}

// Function Definitions

//! Prints the title block when program first starts.
void print_title()
{
  Serial.print(F("\n*****************************************************************\n"));
  Serial.print(F("* DC1811B Demonstration Program                                 *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* This program demonstrates how to send and receive data from   *\n"));
  Serial.print(F("* the DC1811B demo board.                                       *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* Set the baud rate to 115200 and select the newline terminator.*\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("*****************************************************************\n"));
}

//! Prints main menu.
void print_prompt()
{
  Serial.print(F("\n  1-Basic Commands\n"));
  Serial.print(F("  2-Model Number\n"));
  Serial.print(F("  3-Revision Number\n"));
  Serial.print(F("  4-PEC On\n"));
  Serial.print(F("  5-PEC Off\n"));
  Serial.print(F("  6-Bus Probe\n"));
  Serial.print(F("  7-Reset\n"));
  Serial.print(F("\nEnter a command:"));
}

//! Prints a warning if the demo board is not detected.
void print_warning_prompt()
{
  Serial.println(F("\nWarning: Demo board not detected. Linduino will attempt to proceed."));
}

void print_all_voltages()
{
  float   voltage;
  uint8_t page;

  for (page = 0; page < 2; page++)
  {
    pmbus->setPage(LTM4676_i2c_address, page);
    voltage = pmbus->readVout(LTM4676_i2c_address, false);
    Serial.print(F("LTM4676 VOUT "));
    Serial.println(voltage, DEC);
  }
}

void print_all_currents()
{
  float   current;
  uint8_t page;

  for (page = 0; page < 2; page++)
  {
    pmbus->setPage(LTM4676_i2c_address, page);
    current = pmbus->readIout(LTM4676_i2c_address, false);
    Serial.print(F("LTM4676 IOUT "));
    Serial.println(current, DEC);
  }
}

void print_all_status()
{
  uint8_t b;
  uint16_t w;
  uint8_t page;

  for (page = 0; page < 2; page++)
  {
    Serial.print(F("PAGE "));
    Serial.println(page, DEC);
    pmbus->setPage(LTM4676_i2c_address, page);
    b = pmbus->readStatusByte(LTM4676_i2c_address);
    Serial.print(F("LTM4676 STATUS BYTE 0x"));
    Serial.println(b, HEX);
    w = pmbus->readStatusWord(LTM4676_i2c_address);
    Serial.print(F("LTM4676 STATUS WORD 0x"));
    Serial.println(w, HEX);
  }
}

void sequence_off_on()
{
  pmbus->sequenceOffGlobal();
  delay (2000);
  pmbus->sequenceOnGlobal();
}

void margin_high()
{
  pmbus->marginHighGlobal();
}

void margin_low()
{
  pmbus->marginLowGlobal();
}

void margin_off()
{
  pmbus->sequenceOnGlobal();
}

void menu_1_basic_commands()
{
  uint8_t user_command;

  do
  {
    //! Displays the Read/Write menu
    Serial.print(F("\nRead/Write\n\n"));
    Serial.print(F("  1-Read All Voltages\n"));
    Serial.print(F("  2-Read All Currents\n"));
    Serial.print(F("  3-Read All Status\n"));
    Serial.print(F("  4-Sequence Off/On\n"));
    Serial.print(F("  5-Margin High\n"));
    Serial.print(F("  6-Margin Low\n"));
    Serial.print(F("  7-Margin Off\n"));
    Serial.print(F("  8-ClearFaults\n"));
    Serial.print(F("  m-Main Menu\n"));
    Serial.print(F("\nEnter a command: "));

    user_command = read_int();                              //! Reads the user command
    if (user_command == 'm')                                // Print m if it is entered
    {
      Serial.print(F("m\n"));
    }
    else
      Serial.println(user_command);                         // Print user command

    switch (user_command)
    {
      case 1:
        print_all_voltages();
        break;
      case 2:
        print_all_currents();
        break;
      case 3:
        print_all_status();
        break;
      case 4:
        sequence_off_on();
        break;
      case 5:
        margin_high();
        break;
      case 6:
        margin_low();
        break;
      case 7:
        margin_off();
        break;
      case 8:
        pmbus->clearAllFaults(LTM4676_i2c_address);
      default:
        if (user_command != 'm')
          Serial.println(F("Invalid Selection"));
        break;
    }
  }
  while (user_command != 'm');
}


Download LTM4676 - DC1989A.ino

/*!
Linear Technology DC1989A Demonstration Board
LTM4676: Dual Output PolyPhase Step-Down DC/DC Module with Digital Power System Management

@verbatim

NOTES
  Setup:
   Set the terminal baud rate to 115200 and select the newline terminator.

@endverbatim

http://www.linear.com/product/LTM4676
http://www.linear.com/demo/DC1989A

REVISION HISTORY
$Revision: 3214 $
$Date: 2015-03-03 10:54:52 -0700 (Tue, 03 Mar 2015) $

Copyright (c) 2014, Linear Technology Corp.(LTC)
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of Linear Technology Corp.

The Linear Technology Linduino is not affiliated with the official Arduino team.
However, the Linduino is only possible because of the Arduino team's commitment
to the open-source community.  Please, visit http://www.arduino.cc and
http://store.arduino.cc , and consider a purchase that will help fund their
ongoing work.
*/

#include <Arduino.h>
#include <Linduino.h>
#include <UserInterface.h>
#include <stdint.h>

#include <LT_Wire.h>
#include <LT_twi.h>
#include <LT_SMBusPec.h>
#include <LT_PMBusMath.h>
#include <LT_SMBus.h>
#include <LT_PMBusRail.h>
#include <LT_I2CBus.h>
#include <LT_SMBusGroup.h>
#include <LT_PMBusDetect.h>
#include <LT_PMBus.h>
#include <LT_FaultLog.h>
#include <LT_PMBusDevice.h>
#include <LT_SMBusNoPec.h>
#include <LT_SMBusBase.h>
#include <LT_PMBusDetect.h>
#include <LT_PMBusSpeedTest.h>
#include <LT_PMBusDeviceLTC3880.h>
#include <LT_3880FaultLog.h> // For compilation of library

#define LTM4676_I2C_ADDRESS_0 0x45
#define LTM4676_I2C_ADDRESS_1 0x46
#define LTM4676_I2C_ADDRESS_2 0x47
#define LTM4676_I2C_ADDRESS_3 0x48
#define LTM4676_I2C_ADDRESS_R 0x31

// Global variables
static uint8_t ltm4676_i2c_address_0;
static uint8_t ltm4676_i2c_address_1;
static uint8_t ltm4676_i2c_address_2;
static uint8_t ltm4676_i2c_address_3;
static uint8_t ltm4676_i2c_address_r;
static uint8_t pages[2];

static LT_SMBus *smbus = new LT_SMBusPec();
static LT_PMBus *pmbus = new LT_PMBus(smbus);
static LT_PMBusDetect *detector = new LT_PMBusDetect(pmbus);
static LT_PMBusRail *rail;

//! Initialize Linduino
void setup()
{
  Serial.begin(115200);         //! Initialize the serial port to the PC
  print_title();
  ltm4676_i2c_address_0 = LTM4676_I2C_ADDRESS_0;
  ltm4676_i2c_address_1 = LTM4676_I2C_ADDRESS_1;
  ltm4676_i2c_address_2 = LTM4676_I2C_ADDRESS_2;
  ltm4676_i2c_address_3 = LTM4676_I2C_ADDRESS_3;
  ltm4676_i2c_address_r = LTM4676_I2C_ADDRESS_R;

  detector->detect();
  rail = detector->getRails()[0];

  print_prompt();
}

//! Repeats Linduino loop
void loop()
{
  uint8_t user_command;
  uint8_t res;
  uint8_t model[7];
  uint8_t *addresses = NULL;

  if (Serial.available())                          //! Checks for user input
  {
    user_command = read_int();                     //! Reads the user command
    if (user_command != 'm')
      Serial.println(user_command);

    switch (user_command)                          //! Prints the appropriate submenu
    {
      case 1:
        menu_1_basic_commands();                 // Print single-ended voltage menu
        break;
      case 2:
        pmbus->readModel(ltm4676_i2c_address_0, model);
        Serial.print(F("MODEL "));
        Serial.print((char *)model);
        Serial.println();
        break;
      case 3:
        res = pmbus->readPmbusRevision(ltm4676_i2c_address_0);
        Serial.print(F("REVISION "));
        Serial.println(res, HEX);
        break;
      case 4:
        pmbus->enablePec(ltm4676_i2c_address_0);
        delete rail;
        delete smbus;
        delete pmbus;
        delete detector;
        smbus = new LT_SMBusPec();
        pmbus = new LT_PMBus(smbus);
        detector = new LT_PMBusDetect(pmbus);
        detector->detect();
        rail =detector->getRails()[0];
        break;
      case 5:
        pmbus->disablePec(ltm4676_i2c_address_0);
        delete rail;
        delete smbus;
        delete pmbus;
        delete detector;
        smbus = new LT_SMBusNoPec();
        pmbus = new LT_PMBus(smbus);
        detector = new LT_PMBusDetect(pmbus);
        detector->detect();
        rail = detector->getRails()[0];
        break;
      case 6:
        addresses = smbus->probe(0);
        while (*addresses != 0)
        {
          Serial.print(F("ADDR 0x"));
          Serial.println(*addresses++, HEX);
        }
        break;
      case 7 :
        pmbus->resetGlobal();
        break;
      default:
        Serial.println(F("Incorrect Option"));
        break;
    }
    print_prompt();
  }

}

// Function Definitions

//! Prints the title block when program first starts.
void print_title()
{
  Serial.print(F("\n*****************************************************************\n"));
  Serial.print(F("* DC1590B Demonstration Program                                 *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* This program demonstrates how to send and receive data from   *\n"));
  Serial.print(F("* the DC1590B demo board.                                       *\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("* Set the baud rate to 115200 and select the newline terminator.*\n"));
  Serial.print(F("*                                                               *\n"));
  Serial.print(F("*****************************************************************\n"));
}

//! Prints main menu.
void print_prompt()
{
  Serial.print(F("\n  1-Basic Commands\n"));
  Serial.print(F("  2-Model Number\n"));
  Serial.print(F("  3-Revision Number\n"));
  Serial.print(F("  4-PEC On\n"));
  Serial.print(F("  5-PEC Off\n"));
  Serial.print(F("  6-Bus Probe\n"));
  Serial.print(F("  7-Reset\n"));
  Serial.print(F("\nEnter a command:"));
}

//! Prints a warning if the demo board is not detected.
void print_warning_prompt()
{
  Serial.println(F("\nWarning: Demo board not detected. Linduino will attempt to proceed."));
}

void menu_1_basic_commands()
{
  uint8_t user_command;
  float   result;
  uint16_t status;

  do
  {
    //! Displays the Read/Write menu
    Serial.print(F("\nRead/Write\n\n"));
    Serial.print(F("  1-Read Voltages\n"));
    Serial.print(F("  2-Read Currents\n"));
    Serial.print(F("  3-Read Power\n"));
    Serial.print(F("  4-Read Status\n"));
    Serial.print(F("  5-Sequence Off/On\n"));
    Serial.print(F("  6-Margin High\n"));
    Serial.print(F("  7-Margin Low\n"));
    Serial.print(F("  8-Margin Off\n"));
    Serial.print(F("  9-Clear Faults\n"));
    Serial.print(F("  m-Main Menu\n"));
    Serial.print(F("\nEnter a command: "));

    user_command = read_int();                              //! Reads the user command
    if (user_command == 'm')                                // Print m if it is entered
    {
      Serial.print(F("m\n"));
    }
    else
      Serial.println(user_command);                         // Print user command

    switch (user_command)
    {
      case 1:
        result = rail->readVin(false);
        Serial.print(F("LTM4676 VIN "));
        Serial.println(result, DEC);
        result = rail->readVout(false);
        Serial.print(F("LTM4676 VOUT "));
        Serial.println(result, DEC);
        break;
      case 2:
        result = rail->readIin(false);
        Serial.print(F("LTM4676 IIN "));
        Serial.println(result, DEC);
        result = rail->readIout(false);
        Serial.print(F("LTM4676 IOUT "));
        Serial.println(result, DEC);
        break;
      case 3:
        result = rail->readPout(false);
        Serial.print(F("LTM4676 POUT "));
        Serial.println(result, DEC);
        break;
      case 4:
        status = rail->readStatusWord();
        Serial.print(F("LTM4676 STATUS WORD 0x"));
        Serial.println(status, HEX);
        break;
      case 5:
        rail->sequenceOff();
        delay (2000);
        rail->sequenceOn();
        break;
      case 6:
        rail->marginHigh();
        break;
      case 7:
        rail->marginLow();
        break;
      case 8:
        rail->marginOff();
        break;
      case 9:
        rail->clearFaults();
        break;
      default:
        if (user_command != 'm')
          Serial.println(F("Invalid Selection"));
        break;
    }
  }
  while (user_command != 'm');
}


Download LTM4676 - Linduino CPP File

#include "LT_PMBusDeviceLTM4676.h"

uint32_t LT_PMBusDeviceLTM4676::cap_ =  HAS_VOUT
                                        | HAS_VIN
                                        | HAS_IOUT
                                        | HAS_IIN
                                        | HAS_POUT
                                        | HAS_TEMP
                                        | HAS_DC
                                        | HAS_STATUS_WORD
                                        | HAS_STATUS_EXT
                                        ;

Download LTM4676 - Linduino Header File

/*!
LTC PSM Device

@verbatim

Representation of a device and its capabilities.

@endverbatim

REVISION HISTORY
$Revision: 3845 $
$Date: 2015-08-24 14:11:21 -0600 (Mon, 24 Aug 2015) $

Copyright (c) 2014, Linear Technology Corp.(LTC)
All rights reserved.

Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:

1. Redistributions of source code must retain the above copyright notice, this
   list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
   this list of conditions and the following disclaimer in the documentation
   and/or other materials provided with the distribution.

THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

The views and conclusions contained in the software and documentation are those
of the authors and should not be interpreted as representing official policies,
either expressed or implied, of Linear Technology Corp.

The Linear Technology Linduino is not affiliated with the official Arduino team.
However, the Linduino is only possible because of the Arduino team's commitment
to the open-source community.  Please, visit http://www.arduino.cc and
http://store.arduino.cc , and consider a purchase that will help fund their
ongoing work.
*/

/*! @file
    @ingroup LT_PMBusDevice
    Library Header File for LT_PMBusDeviceLTM4676
*/

#ifndef LT_PMBusDeviceLTM4676_H_
#define LT_PMBusDeviceLTM4676_H_

#include "LT_PMBusDeviceController.h"
#include "../LTPSM_PartFaultLogs/LT_3880FaultLog.h"

class LT_PMBusDeviceLTM4676 : public LT_PMBusDeviceController
{
  public:

    static uint32_t cap_;

    LT_PMBusDeviceLTM4676(LT_PMBus *pmbus, uint8_t address) : LT_PMBusDeviceController(pmbus, address, 2)
    {
    }

    uint32_t getCapabilities (
    )
    {
      return cap_;
    }

    //! Is/are these capability(s) supported?
    //! @return true if yes
    bool hasCapability(
      uint32_t capability          //!< List of capabilities
    )
    {
      return (cap_ & capability) == capability;
    }

    static LT_PMBusDevice *detect(LT_PMBus *pmbus, uint8_t address)
    {
      uint16_t id;
      LT_PMBusDeviceLTM4676 *device;

      id = pmbus->readMfrSpecialId(address);
      if (  (id & 0xFFF0) == 0x4400
            || (id & 0xFFF0) == 0x4480
            || (id & 0xFFF0) == 0x47E0)
      {
        if (pmbus->getRailAddress(address) != address)
        {
          device = new LT_PMBusDeviceLTM4676(pmbus, address);
          device->probeSpeed();
          return device;
        }
        else
          return NULL;
      }
      else
        return NULL;
    }

    uint8_t getNumPages(void)
    {
      return 2;
    }

    void enableFaultLog()
    {
      LT_3880FaultLog *faultLog = new LT_3880FaultLog(pmbus_);
      faultLog->enableFaultLog(address_);
      delete faultLog;
    }

    void disableFaultLog()
    {
      LT_3880FaultLog *faultLog = new LT_3880FaultLog(pmbus_);
      faultLog->disableFaultLog(address_);
      delete faultLog;
    }

    bool hasFaultLog()
    {
      LT_3880FaultLog *faultLog = new LT_3880FaultLog(pmbus_);
      if (faultLog->hasFaultLog(address_))
      {
        delete faultLog;
        return true;
      }
      else
      {
        delete faultLog;
        return false;
      }
    }

    char *getFaultLog()
    {
      LT_3880FaultLog *faultLog = new LT_3880FaultLog(pmbus_);
      if (faultLog->hasFaultLog(address_))
      {
        faultLog->read(address_);
//      faultLog->print(&Serial);
        faultLog->dumpBinary(&Serial);
        faultLog->release();
        delete faultLog;
        return NULL;
      }
      else
      {
        delete faultLog;
        return NULL;
      }
    }

    void clearFaultLog()
    {
      LT_3880FaultLog *faultLog = new LT_3880FaultLog(pmbus_);
      if (faultLog->hasFaultLog(address_))
      {
        faultLog->clearFaultLog(address_);
        pmbus_->smbus()->waitForAck(address_, 0x00);
        pmbus_->waitForNotBusy(address_);
        delete faultLog;
      }
      else
      {
        delete faultLog;
      }
    }
};

#endif /* LT_PMBusDeviceLTM4676_H_ */

Technical Support