LTC2975 - 4-Channel PMBus Power System Manager Featuring Accurate Input Current and Energy Measurement
Features
- Order Custom Programmed Parts
- Sequence, Trim, Margin and Supervise Four Power Supplies
- Manage Faults, Monitor Telemetry and Create Fault Logs
- PMBus™ Compliant Command Set
- Supported by LTpowerPlay™ GUI
- Margin or Trim Supplies to Within 0.25% of Target
- Monitor Input Current (±1%) and Accumulate Energy
- Fast OV/UV and OC Supervisors Per Channel
- Coordinate Sequencing and Fault Management Across Multiple LTC PSM Devices
- Automatic Fault Logging to Internal EEPROM
- Operate Autonomously Without Additional Software
- External Temperature and Input Voltage Supervisors
- Accurate Monitoring of Four Output Voltages, Four Output Currents, Four External Temperatures, Input Voltage and Current, and Internal Die Temperature
- I2C/SMBus Serial Interface
- Can Be Powered from 3.3V, or 4.5V to 15V
- Pin-Compatible to the LTC2974
- Available in 64-Lead 9mm × 9mm QFN Package
- LTpowerPlay Configuration and Development Tool
Typical Application
Description
The LTC®2975 is a 4-channel Power System Manager used to sequence, trim (servo), margin, supervise, manage faults, provide telemetry and create fault logs. PMBus commands support power supply sequencing, precision point-of-load voltage adjustment and margining. DACs use a proprietary soft-connect algorithm to minimize supply disturbances. Supervisory functions include over and under current, voltage and temperature threshold limits for four power supply output channels as well as over and under voltage threshold limits for a single power supply input channel. Programmable fault responses can disable the power supplies with optional retry after a fault is detected. Faults that disable a power supply can automatically trigger black box EEPROM storage of fault status and associated telemetry. An internal 16-bit ADC monitors four output voltages, four output currents, four external temperatures, input voltage and current, and die temperature. Input power, energy, and output power is also calculated. A programmable watchdog timer monitors microprocessor activity for a stalled condition and resets the microprocessor if necessary. A single wire bus synchronizes power supplies across multiple LTC Power System Management (PSM) devices. Configuration EEPROM supports autonomous operation without additional software.
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 |
|---|---|---|---|---|---|
| LTC2975CUP#PBF | 9x9 QFN-64 | UP | C | 05-08-1705 | Yes |
| LTC2975CUP#TRPBF | 9x9 QFN-64 | UP | C | 05-08-1705 | Yes |
| LTC2975IUP#PBF | 9x9 QFN-64 | UP | I | 05-08-1705 | Yes |
| LTC2975IUP#TRPBF | 9x9 QFN-64 | UP | I | 05-08-1705 | Yes |
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 | |
|---|---|---|---|---|---|---|
| LTC2975CUP#PBF | 9x9 QFN-64 | C | $13.93 | $9.75 | Yes | |
| LTC2975CUP#TRPBF | 9x9 QFN-64 | C | $9.85 | Yes | ||
| LTC2975IUP#PBF | 9x9 QFN-64 | I | $15.93 | $11.15 | Yes | |
| LTC2975IUP#TRPBF | 9x9 QFN-64 | I | $11.25 | Yes | ||
| Buy Now • Request Samples | ||||||
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 |
|---|---|---|---|
| DC1508B-B | LTC2974, LTC2975 Socketed Programming Board [requires DC1613] | $95.00 | |
| DC2022A | LTC2975 Demo Board: 4 Power Supply Manager with Input Energy Monitoring [Requires DC1613] | $95.00 | |
| DC2428A | LTC2975 Demo Board Set | LTM4644 Quad 4A Power Supply Management (includes DC2382A + DC2363A) [requires DC1613] | $200.00 | |
| DC2518A | LTC2975 Demo Board: +/- 12V, +/- 48V Power Supply Management [requires DC1613] | $95.00 | |
| Buy Now | |||
Companion Boards
| Part Number | Description | Price | Documentation |
|---|---|---|---|
| DC1613A | USB-to-PMBus Controller for Use with LTpowerPlay | $50.00 | |
| DC2026C | Linduino One Isolated USB Demo Board: An Arduino- and QuikEval-Compatible Code Development Platform | $75.00 | |
| Buy Now | |||
Applications
- Computers and Network Servers
- Industrial Test and Measurement
- High Reliability Systems
- Video and Medical Imaging
People Who Viewed This Product Also Viewed
- LTC2946 - Wide Range I2C Power, Charge and Energy Monitor
- LTC2945 - Wide Range I2C Power Monitor
- LTC2990 - Quad I2C Voltage, Current and Temperature Monitor
- LTC4364 - Surge Stopper with Ideal Diode
- LT4363 - High Voltage Surge Stopper with Current Limit
- LTC2983 - Multi-Sensor High Accuracy Digital Temperature Measurement System
- LTC4151 - High Voltage I2C Current and Voltage Monitor
- LT4320/LT4320-1 - Ideal Diode Bridge Controller
- LT2940 - Power and Current Monitor
- LT3080 - Adjustable 1.1A Single Resistor Low Dropout Regulator
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.
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.
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 LTC2975 - DC2022A.ino
/*!
Linear Technology DC2022A Demonstration Board
LTC2975: Power System Management Solution for Application Processors
@verbatim
NOTES
Setup:
Set the terminal baud rate to 115200 and select the newline terminator.
@endverbatim
http://www.linear.com/product/LTC2975
http://www.linear.com/demo/DC2022A
REVISION HISTORY
$Revision: 4080 $
$Date: 2015-09-24 16:36:34 -0600 (Thu, 24 Sep 2015) $
Copyright (c) 2015, 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 LTC2975
*/
#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_PMBusMath.h"
#include "LT_PMBus.h"
#define LTC2975_I2C_ADDRESS 0x30
// Global variables
static uint8_t ltc2975_i2c_address;
static LT_PMBusMath *math = new LT_PMBusMath();
static LT_SMBus *smbus = new LT_SMBusPec();
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();
ltc2975_i2c_address = LTC2975_I2C_ADDRESS;
print_prompt();
}
//! Repeats Linduino loop
//! @return void
void loop()
{
uint8_t user_command;
uint8_t res;
uint8_t model[7];
uint8_t revision[10];
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->enablePec(ltc2975_i2c_address);
delete smbus;
delete pmbus;
smbus = new LT_SMBusPec();
pmbus = new LT_PMBus(smbus);
break;
case 3:
pmbus->disablePec(ltc2975_i2c_address);
delete smbus;
delete pmbus;
smbus = new LT_SMBusNoPec();
pmbus = new LT_PMBus(smbus);
break;
case 4:
addresses = smbus->probe(0);
while (*addresses != 0)
{
Serial.print(F("ADDR 0x"));
Serial.println(*addresses++, HEX);
}
break;
case 5 :
pmbus->startGroupProtocol();
pmbus->restoreFromNvm(ltc2975_i2c_address);
pmbus->executeGroupProtocol();
break;
default:
Serial.println(F("Incorrect Option"));
break;
}
print_prompt();
}
}
// Function Definitions
//! Prints the title block when program first starts.
//! @return void
void print_title()
{
Serial.print(F("\n*****************************************************************\n"));
Serial.print(F("* DC2022AC Hello World 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 LTC2022A 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.
//! @return void
void print_prompt()
{
Serial.print(F("\n 1-Basic Commands\n"));
Serial.print(F(" 2-PEC On\n"));
Serial.print(F(" 3-PEC Off\n"));
Serial.print(F(" 4-Bus Probe\n"));
Serial.print(F(" 5-Reset\n"));
Serial.print(F("\nEnter a command:"));
}
//! Prints a warning if the demo board is not detected.
//! @return void
void print_warning_prompt()
{
Serial.println(F("\nWarning: Demo board not detected. Linduino will attempt to proceed."));
}
//! Print all voltages
void print_all_voltages()
{
float voltage;
uint8_t page;
for (page = 0; page < 4; page++)
{
pmbus->setPage(ltc2975_i2c_address, page);
voltage = pmbus->readVout(ltc2975_i2c_address, false);
Serial.print(F("LTC2975 VOUT "));
Serial.println(voltage, DEC);
}
}
//! Print all currents
void print_all_currents()
{
float current;
uint8_t page;
for (page = 0; page < 4; page++)
{
pmbus->setPage(ltc2975_i2c_address, page);
current = pmbus->readIout(ltc2975_i2c_address, false);
Serial.print(F("LTC2975 IOUT "));
Serial.println(current, DEC);
}
}
//! Print all status bytes and words
//! @return void
void print_all_status()
{
uint8_t b;
uint16_t w;
uint8_t page;
for (page = 0; page < 4; page++)
{
Serial.print(F("PAGE "));
Serial.println(page, DEC);
pmbus->setPage(ltc2975_i2c_address, page);
b = pmbus->readStatusByte(ltc2975_i2c_address);
Serial.print(F("LTC2975 STATUS BYTE 0x"));
Serial.println(b, HEX);
w = pmbus->readStatusWord(ltc2975_i2c_address);
Serial.print(F("LTC2975 STATUS WORD 0x"));
Serial.println(w, HEX);
}
}
//! Sequence off then on
void sequence_off_on()
{
pmbus->sequenceOffGlobal();
delay (2000);
pmbus->sequenceOnGlobal();
}
//! Margin high
//! @return void
void margin_high()
{
pmbus->marginHighGlobal();
}
//! Margin low
//! @return void
void margin_low()
{
pmbus->marginLowGlobal();
}
//! Go to nominal
//! @return void
void margin_off()
{
pmbus->sequenceOnGlobal();
}
//! Display menu 1
//! @return void
void menu_1_basic_commands()
{
uint8_t user_command;
do
{
//! Displays the Read/Write menu
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(" 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;
default:
if (user_command != 'm')
Serial.println(F("Invalid Selection"));
break;
}
}
while (user_command != 'm');
}
/*!
Linear Technology DC1962C Demonstration Board
LTC2975 + LTM4644: Power Management Solution for Application Processors
@verbatim
NOTES
Setup:
Set the terminal baud rate to 115200 and select the newline terminator.
@endverbatim
http://www.linear.com/product/LTC2975
http://www.linear.com/demo/DC2382
REVISION HISTORY
$Revision: 4080 $
$Date: 2015-09-24 16:36:34 -0600 (Thu, 24 Sep 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 LTC2975
*/
#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_PMBusMath.h"
#include "LT_PMBus.h"
#define LTC2975_I2C_ADDRESS 0x5C
// Global variables
static uint8_t ltc2975_i2c_address;
static LT_PMBusMath *math = new LT_PMBusMath();
static LT_SMBus *smbus = new LT_SMBusPec();
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();
ltc2975_i2c_address = LTC2975_I2C_ADDRESS;
print_prompt();
}
//! Repeats Linduino loop
//! @return void
void loop()
{
uint8_t user_command;
uint8_t res;
uint8_t model[7];
uint8_t revision[10];
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:
menu_2_vid_commands(); // Print VID menu
break;
case 3:
menu_3_vid_commands(); // Print VID menu
break;
case 4:
pmbus->enablePec(ltc2975_i2c_address);
delete smbus;
delete pmbus;
smbus = new LT_SMBusPec();
pmbus = new LT_PMBus(smbus);
break;
case 5:
pmbus->disablePec(ltc2975_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->startGroupProtocol();
pmbus->restoreFromNvm(ltc2975_i2c_address);
pmbus->executeGroupProtocol();
break;
default:
Serial.println(F("Incorrect Option"));
break;
}
print_prompt();
}
}
// Function Definitions
//! Prints the title block when program first starts.
//! @return void
void print_title()
{
Serial.print(F("\n*****************************************************************\n"));
Serial.print(F("* DC2382C Hello World 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 LTC2382 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.
//! @return void
void print_prompt()
{
Serial.print(F("\n 1-Basic Commands\n"));
Serial.print(F(" 2-VID Commands (L16)\n"));
Serial.print(F(" 3-VID Commands (float) \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.
//! @return void
void print_warning_prompt()
{
Serial.println(F("\nWarning: Demo board not detected. Linduino will attempt to proceed."));
}
//! Print all voltages
//! @return void
void print_all_voltages()
{
float voltage;
uint8_t page;
for (page = 0; page < 4; page++)
{
pmbus->setPage(ltc2975_i2c_address, page);
voltage = pmbus->readVout(ltc2975_i2c_address, false);
Serial.print(F("LTC2975 VOUT "));
Serial.println(voltage, DEC);
}
}
//! Print all currents
//! @return void
void print_all_currents()
{
float current;
uint8_t page;
for (page = 0; page < 4; page++)
{
pmbus->setPage(ltc2975_i2c_address, page);
current = pmbus->readIout(ltc2975_i2c_address, false);
Serial.print(F("LTC2975 IOUT "));
Serial.println(current, DEC);
}
}
//! Print all status bytes and words
//! @return void
void print_all_status()
{
uint8_t b;
uint16_t w;
uint8_t page;
for (page = 0; page < 4; page++)
{
Serial.print(F("PAGE "));
Serial.println(page, DEC);
pmbus->setPage(ltc2975_i2c_address, page);
b = pmbus->readStatusByte(ltc2975_i2c_address);
Serial.print(F("LTC2975 STATUS BYTE 0x"));
Serial.println(b, HEX);
w = pmbus->readStatusWord(ltc2975_i2c_address);
Serial.print(F("LTC2975 STATUS WORD 0x"));
Serial.println(w, HEX);
}
}
//! Sequence off then on
//! @return void
void sequence_off_on()
{
pmbus->sequenceOffGlobal();
delay (2000);
pmbus->sequenceOnGlobal();
}
//! Margin high
//! @return void
void margin_high()
{
pmbus->marginHighGlobal();
}
//! Margin low
//! @return void
void margin_low()
{
pmbus->marginLowGlobal();
}
//! Go to nominal
//! @return void
void margin_off()
{
pmbus->sequenceOnGlobal();
}
//! Display menu 1
//! @return void
void menu_1_basic_commands()
{
uint8_t user_command;
do
{
//! Displays the Read/Write menu
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(" 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;
default:
if (user_command != 'm')
Serial.println(F("Invalid Selection"));
break;
}
}
while (user_command != 'm');
}
//! Display menu 2
//! @return void
void menu_2_vid_commands()
{
uint8_t user_command;
uint16_t vcode;
float voltage;
vcode = math->float_to_lin16 (1.0, 0x13);
smbus->writeByte(ltc2975_i2c_address, 0x00, 0x00); // Set to page 0
smbus->writeWord (ltc2975_i2c_address, 0x21, vcode); // Set starting point
do
{
//! Displays the Read/Write menu
Serial.print(F(" 1-VID UP 40 LSB\n"));
Serial.print(F(" 2-VID DN 40 LSB\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:
vcode += 40;
smbus->writeWord (ltc2975_i2c_address, 0x21, vcode);
Serial.print(F("LTC2975 VOUT Code "));
Serial.println(vcode, HEX);
delay (1000);
voltage = pmbus->readVout(ltc2975_i2c_address, false);
Serial.print(F("LTC2975 VOUT Telemetry "));
Serial.println(voltage, DEC);
break;
case 2:
vcode -= 40;
smbus->writeWord (ltc2975_i2c_address, 0x21, vcode);
Serial.print(F("LTC2975 VOUT Code "));
Serial.println(vcode, HEX);
delay (1000);
voltage = pmbus->readVout(ltc2975_i2c_address, false);
Serial.print(F("LTC2975 VOUT Telemetry "));
Serial.println(voltage, DEC);
Serial.print(F("\n"));
break;
default:
if (user_command != 'm')
Serial.println(F("Invalid Selection"));
break;
}
}
while (user_command != 'm');
}
//! Display menu 3
//! @return void
void menu_3_vid_commands()
{
uint8_t user_command;
float vid_value;
float voltage;
vid_value = 1.0;
pmbus->setPage(ltc2975_i2c_address, 0x00); // Set to page 0
pmbus->setVout(ltc2975_i2c_address, vid_value); // Set starting voltage
do
{
//! Displays the Read/Write menu
Serial.print(F(" 1-VID UP 4mV\n"));
Serial.print(F(" 2-VID DN 4mV\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:
vid_value += 0.004;
pmbus->setVout (ltc2975_i2c_address, vid_value);
Serial.print(F("LTC2975 VOUT "));
Serial.println(vid_value, DEC);
delay (1000);
voltage = pmbus->readVout(ltc2975_i2c_address, false);
Serial.print(F("LTC2975 VOUT Telemetry "));
Serial.println(voltage, DEC);
break;
case 2:
vid_value -= 0.004;
pmbus->setVout (ltc2975_i2c_address, vid_value);
Serial.print(F("LTC2975 VOUT "));
Serial.println(vid_value, DEC);
delay (1000);
voltage = pmbus->readVout(ltc2975_i2c_address, false);
Serial.print(F("LTC2975 VOUT Telemetry "));
Serial.println(voltage, DEC);
Serial.print(F("\n"));
break;
default:
if (user_command != 'm')
Serial.println(F("Invalid Selection"));
break;
}
}
while (user_command != 'm');
}
Download LTC2975 - Linduino CPP File
#include "LT_PMBusDeviceLTC2975.h"
uint32_t LT_PMBusDeviceLTC2975::cap_ = HAS_VOUT
| HAS_VIN
| HAS_IOUT
| HAS_IIN
| HAS_POUT
| HAS_PIN
| HAS_TEMP
| HAS_STATUS_WORD
| HAS_STATUS_EXT
;Download LTC2975 - 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_PMBusDeviceLTC2975
*/
#ifndef LT_PMBusDeviceLTC2975_H_
#define LT_PMBusDeviceLTC2975_H_
#include "LT_PMBusDeviceManager.h"
class LT_PMBusDeviceLTC2975 : public LT_PMBusDeviceManager
{
public:
static uint32_t cap_;
LT_PMBusDeviceLTC2975(LT_PMBus *pmbus, uint8_t address) : LT_PMBusDeviceManager(pmbus, address, 8)
{
}
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;
}
char *getType(void)
{
uint8_t *model = (uint8_t *) calloc(8,1);
memcpy(model, "LTC2975", 7);
return (char *) model;
}
uint8_t getNumPages(void)
{
return 4;
}
static LT_PMBusDevice *detect(LT_PMBus *pmbus, uint8_t address)
{
uint16_t id;
LT_PMBusDeviceLTC2975 *device;
id = pmbus->readMfrSpecialId(address);
if ( (id & 0xFFF0) == 0x0220)
{
device = new LT_PMBusDeviceLTC2975(pmbus, address);
device->probeSpeed();
return device;
}
else
return NULL;
}
};
#endif /* LT_PMBusDeviceLTC2975_H_ */
Technical Support
- For immediate technical assistance, contact your local sales office or distributor or call 1-800-4-LINEAR (US customers only) or 408-432-1900.
- For less urgent requests, please complete our Technical Support Request Form. Please allow 2-3 business days for reply.