LTC2936 - Programmable Hex Voltage Supervisor with EEPROM and Comparator Outputs

Features

  • Order Custom Programmed Parts
  • Supervises 6 Power Supplies
  • I2C Adjustable UV and OV Trip Points
  • Guaranteed Threshold Accuracy: ±1% (Maximum)
  • I2C/SMBus Interface
  • Internal EEPROM
  • Six Comparator Outputs
  • Fast Comparator Response Time: 7.5μs
  • 256 Programmable Thresholds per Channel
  • Three Range Settings per Channel
  • Two General Purpose Inputs
  • Three General Purpose Inputs/Outputs
  • Programmable Output Delays
  • Can Be Powered from 3.3V, or 3.4V to 13.9V
  • 24-Lead 4mm × 5mm QFN and SSOP Packages
  • LTpowerPlay Configuration and Development Tool

Typical Application

LTC2936 Typical Application
LTC2936 Typical Application

Description

The LTC®2936 is an EEPROM configurable voltage supervisor which can simultaneously monitor up to six power supply voltage inputs. Each voltage detector offers I2C programmable overvoltage/undervoltage thresholds in various ranges and increments and a dedicated comparator output.

Two general purpose inputs (GPI) can be configured as programmable manual reset (MR), UV disable (UVDIS), margin (MARG), Write Protect (WP) or auxiliary comparator (AUXC) inputs. Three general purpose pins (GPIO) can be configured for input or output operation. When configured as an input, a GPIO pin can be mapped to any other GPIO configured as output. The GPIO pins can also be configured as ALERT or fault outputs. Faults can be configured with programmable delay-on-release times. Output type and polarity are also configurable.

Status and history registers log faults and can be polled via the I2C interface. A fault snapshot is also backed up in internal EEPROM. All parameters are programmable via the I2C interface. 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
LTC2936CGN#PBF SSOP-24 GN C 05-08-1641 (GN24) Yes
LTC2936CGN#TRPBF SSOP-24 GN C 05-08-1641 (GN24) Yes
LTC2936CUFD#PBF 4x5 QFN-24 UFD C 05-08-1696 Yes
LTC2936CUFD#TRPBF 4x5 QFN-24 UFD C 05-08-1696 Yes
LTC2936IGN#PBF SSOP-24 GN I 05-08-1641 (GN24) Yes
LTC2936IGN#TRPBF SSOP-24 GN I 05-08-1641 (GN24) Yes
LTC2936IUFD#PBF 4x5 QFN-24 UFD I 05-08-1696 Yes
LTC2936IUFD#TRPBF 4x5 QFN-24 UFD I 05-08-1696 Yes


LTC2936 Package Drawing
LTC2936 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
LTC2936CGN#PBF SSOP-24 C $8.00 $5.60 Yes
LTC2936CGN#TRPBF SSOP-24 C $5.66 Yes
LTC2936CUFD#PBF 4x5 QFN-24 C $8.00 $5.60 Yes
LTC2936CUFD#TRPBF 4x5 QFN-24 C $5.66 Yes
LTC2936IGN#PBF SSOP-24 I $9.20 $6.44 Yes
LTC2936IGN#TRPBF SSOP-24 I $6.50 Yes
LTC2936IUFD#PBF 4x5 QFN-24 I $9.20 $6.44 Yes
LTC2936IUFD#TRPBF 4x5 QFN-24 I $6.50 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
DC1605B LTC2936CGN Demo Board: Programmable Hex Voltage Supervisor with EEPROM and Comparator Outputs [Requires DC1613] $95.00
DC2450A-A LTC2936 QFN-24 Package Socketed Programming Board [requires DC1613] $95.00
DC2450A-B LTC2936 SSOP-24 Package Socketed Programming Board [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
Click here to view our complete list of demo boards

Applications

  • High Availability Computer Systems
  • Network Servers
  • Telecom Equipment
  • Data Storage

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

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 LTC2936 - DC1605B.ino

/*!
Linear Technology DC1605B Demonstration Board.
LTC2936: Programable Hex Voltage Supervisor with Comparator Outputs and EEPROM

@verbatim

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

@endverbatim

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

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

REVISION HISTORY
$Revision: 4467 $
$Date: 2015-12-02 11:28:55 -0800 (Wed, 02 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 LTC2936
*/

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

// LTC2637 DAC on the DC1605B board
#define DC1605_DAC_ADDRESS 0x22 //7-bit global address for DAC

// LTC2936 I2C address (selectable by two jumpers on the board)
#define LTC2936_I2C_ADDRESS 0x58 // 10

// Global variables
static uint8_t ltc2936_i2c_address;
static uint8_t dc1605_dac_address;
static LT_SMBus *smbus = new LT_SMBusNoPec();

//! Initialize Linduino
//! @return void
void setup()
{
  Serial.begin(115200);         //! Initialize the serial port to the PC
  print_title();
  ltc2936_i2c_address = LTC2936_I2C_ADDRESS;
  dc1605_dac_address = DC1605_DAC_ADDRESS;
  print_prompt();

  if (dc1605b_is_address_0x5n(ltc2936_i2c_address))
  {
    dc1605b_print_address_warning();
  }
}

//! Repeats Linduino loop
//! @return void
void loop()
{
  uint8_t user_command;
  uint8_t *addresses = NULL;
  uint16_t res;

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

    switch (user_command)                          //! Prints the appropriate submenu
    {
      case 0:
        if (dc1605b_is_address_0x5n(ltc2936_i2c_address))
        {
          dc1605b_print_address_warning();
        }
        break;
      case 1:
        if (dc1605b_is_address_0x5n(ltc2936_i2c_address))
        {
          dc1605b_print_address_warning();
        }
        ltc2936_demo_board_defaults(ltc2936_i2c_address);
        break;
      case 2:
        if (dc1605b_is_address_0x5n(ltc2936_i2c_address))
        {
          dc1605b_print_address_warning();
        }
        res = smbus->readWord(ltc2936_i2c_address, LTC2936_STATUS_WORD);
        Serial.println(res, HEX);
        break;
      case 3:
        if (dc1605b_is_address_0x5n(ltc2936_i2c_address))
        {
          dc1605b_print_address_warning();
        }
        ltc2936_read_registers(ltc2936_i2c_address);
        break;
      case 4:
        // write to the LTC2637 DACs on the DC1605 board
        dc1605_write_dac_voltage(dc1605_dac_address, 0, 3.3);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 1, 2.5);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 2, 1.8);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 3, 1.5);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 4, 1.2);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 5, 1.0);
        break;
      case 5:
        if (dc1605b_is_address_0x5n(ltc2936_i2c_address))
        {
          dc1605b_print_address_warning();
        }
        ltc2936_demo_board_demo_thresholds(ltc2936_i2c_address);
        break;
      case 6:
        // margin the supplies to the 20% high side
        // write to the LTC2637 DACs on the DC1605 board
        dc1605_write_dac_voltage(dc1605_dac_address, 0, 3.96);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 1, 3.0);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 2, 2.16);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 3, 1.8);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 4, 1.44);
        delay(1);
        dc1605_write_dac_voltage(dc1605_dac_address, 5, 1.2);
        break;
      case 7:
        if (dc1605b_is_address_0x5n(ltc2936_i2c_address))
        {
          dc1605b_print_address_warning();
        }
        ltc2936_clear_alertb(ltc2936_i2c_address);
        break;
      case 8:
        addresses = smbus->probe(0);
        while (*addresses != 0)
        {
          Serial.print(F("ADDR 0x"));
          Serial.println(*addresses++, HEX);
        }
        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("* DC1605B 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 DC1605B 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("  1-Write LTC2936 registers with default settings\n"));
  Serial.print(F("  2-Read Status (STATUS_WORD)\n"));
  Serial.print(F("  3-Read All Registers\n"));
  Serial.print(F("  4-Set DAC voltages on Vn pins to interesting values\n"));
  Serial.print(F("  5-Change LTC2936 voltage thresholds to match interesting DAC voltages\n"));
  Serial.print(F("  6-Set DAC voltages on Vn pins to +20% high values\n"));
  Serial.print(F("  7-Clear LTC2936 ALERTB\n"));
  Serial.print(F("  8-Bus Probe\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."));
}


//! Return 1 if the LTC2936 is write-protected
//  0 otherwise
int ltc2936_is_write_protected(uint8_t ltc2936_i2c_address)
{
  uint16_t res;

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_STATUS_WORD);

  //b[0] is the write-protect bit
  return ((res&0x0001) == 0x0001) ? 1 : 0;
}

//! Return 1 if the ltc2936 device address is 0x50 - 0x57
//!  which are the DC1605B EEPROM address, and will cause problems with Linduino
int dc1605b_is_address_0x5n(uint8_t ltc2936_i2c_address)
{
  if ((ltc2936_i2c_address >= 0x50) && (ltc2936_i2c_address <= 0x57))
    return 1;
  else
    return 0;
}

//! Print a warning message to go with the 0x5n address
void dc1605b_print_address_warning()
{
  Serial.println(F("\nWARNING: Linduino should not be used to address address 0x5n."));
  Serial.println(F("WARNING:   Addresses 0x5n are shared by the DC1605B EEPROM."));
  Serial.println(F("WARNING:   When using Linduino, set ASEL1 jumper = 1"));
}

//! Read all registers from RAM
void ltc2936_read_registers(uint8_t ltc2936_i2c_address)
{
  uint16_t res;
  res = smbus->readWord(ltc2936_i2c_address, LTC2936_WRITE_PROTECT);
  Serial.print(F("\n LTC2936_WRITE_PROTECT:"));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_GPI_CONFIG);
  Serial.print(F("\n LTC2936_GPI_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_GPIO1_CONFIG);
  Serial.print(F("\n LTC2936_GPIO1_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address,  LTC2936_GPIO2_3_CONFIG);
  Serial.print(F("\n  LTC2936_GPIO2_3_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V1_THR);
  Serial.print(F("\n LTC2936_V1_THR: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V2_THR);
  Serial.print(F("\n LTC2936_V2_THR: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V3_THR);
  Serial.print(F("\n LTC2936_V3_THR: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V4_THR);
  Serial.print(F("\n LTC2936_V4_THR: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V5_THR);
  Serial.print(F("\n LTC2936_V5_THR: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V6_THR);
  Serial.print(F("\n LTC2936_V6_THR: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V1_CONFIG);
  Serial.print(F("\n LTC2936_V1_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V2_CONFIG);
  Serial.print(F("\n LTC2936_V2_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V3_CONFIG);
  Serial.print(F("\n LTC2936_V3_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V4_CONFIG);
  Serial.print(F("\n LTC2936_V4_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V5_CONFIG);
  Serial.print(F("\n LTC2936_V5_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_V6_CONFIG);
  Serial.print(F("\n LTC2936_V6_CONFIG: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_HISTORY_WORD);
  Serial.print(F("\n LTC2936_HISTORY_WORD: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_PADS);
  Serial.print(F("\n LTC2936_PADS: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_BACKUP_WORD);
  Serial.print(F("\n LTC2936_BACKUP_WORD: "));
  Serial.println(res, HEX);

  res = smbus->readWord(ltc2936_i2c_address, LTC2936_STATUS_WORD);
  Serial.print(F("\n LTC2936_STATUS_WORD: "));
  Serial.println(res, HEX);
  Serial.print(F("\n"));

}

//! Load demo-board default settings into RAM
void ltc2936_demo_board_defaults(uint8_t ltc2936_i2c_address)
{
  if (ltc2936_is_write_protected(ltc2936_i2c_address) != 1)
  {
    smbus->writeWord(ltc2936_i2c_address, LTC2936_WRITE_PROTECT, 0xAAA8);
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_GPI_CONFIG, 0x1040);
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_GPIO1_CONFIG, 0x002E);
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_GPIO2_3_CONFIG, 0x2E07);
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V1_THR, 0xAF87); // ov = 2.2, uv = 1.8
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V2_THR, 0xAF87); // ov = 2.2, uv = 1.8
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V3_THR, 0xAF87); // ov = 2.2, uv = 1.8
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V4_THR, 0xAF87); // ov = 2.2, uv = 1.8
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V5_THR, 0xAF87); // ov = 2.2, uv = 1.8
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V6_THR, 0xAF87); // ov = 2.2, uv = 1.8
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V1_CONFIG, 0x019C); // low range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V2_CONFIG, 0x019C); // low range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V3_CONFIG, 0x019C); // low range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V4_CONFIG, 0x019C); // low range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V5_CONFIG, 0x019C); // low range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V6_CONFIG, 0x019C); // low range
  }
  else
  {
    // error, LTC2936 is write-protected
    Serial.println(F("\nERROR: LTC2936 is write-protected. Cannot write to registers"));
  }
}

//! Load different voltage threshold settings into RAM
void ltc2936_demo_board_demo_thresholds(uint8_t ltc2936_i2c_address)
{
  if (ltc2936_is_write_protected(ltc2936_i2c_address) != 1)
  {
    smbus->writeWord(ltc2936_i2c_address, LTC2936_WRITE_PROTECT, 0xAAA8);
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_GPI_CONFIG, 0x1040);
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_GPIO1_CONFIG, 0x002E);
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_GPIO2_3_CONFIG, 0x2E07);
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V1_THR, 0x8769); // ov = 3.6, uv = 3.0
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V2_THR, 0x554B); // ov = 2.6, uv = 2.4
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V3_THR, 0x917D); // ov = 1.9, uv = 1.7
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V4_THR, 0x735F); // ov = 1.6, uv = 1.4
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V5_THR, 0x5541); // ov = 1.3, uv = 1.1
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V6_THR, 0x3C32); // ov = 1.05, uv = 0.95
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V1_CONFIG, 0x0C9C); // medium range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V2_CONFIG, 0x0C9C); // medium range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V3_CONFIG, 0x0D9C); // low range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V4_CONFIG, 0x0D9C); // low range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V5_CONFIG, 0x0D9C); // low range
    delay(1);
    smbus->writeWord(ltc2936_i2c_address, LTC2936_V6_CONFIG, 0x0D9C); // low range
  }
  else
  {
    // error, LTC2936 is write-protected
    Serial.println(F("\nERROR: LTC2936 is write-protected. Cannot write to registers"));
  }
}


//! Clear ALERTB
void ltc2936_clear_alertb(uint8_t ltc2936_i2c_address)
{
  //  smbus->writeWord(ltc2936_i2c_address, LTC2936_CLEAR_HISTORY, 0x0000);
  smbus->sendByte(ltc2936_i2c_address, LTC2936_CLEAR_HISTORY);
}


//! program the DAC on the DC1605B demo board to a voltage
//  refer to the LTC2637 datasheet
void dc1605_write_dac_voltage(uint8_t dac_address, int channel, float voltage)
{
  uint8_t *data = (uint8_t *)malloc(3*sizeof(uint8_t));
  uint8_t cmd, ch_addr;
  uint16_t v_data;
  float v;

  // pack the data bytes with the necessary bits
  // channel numbers 0 - 7 correspond to letters A - H in the datasheet
  if ((channel < 8) && (channel >= 0))
  {
    ch_addr = (uint8_t)channel;
  }
  else
  {
    //address all channels
    ch_addr = 0x0F;
  }
  cmd = 0x30; // the write to and update command
  data[0] = cmd | ch_addr;

  if ((voltage > 0) && (voltage < 4.096))
  {
    v = (voltage/4.096);
    v_data = (uint16_t)(v*4096);
  }
  else
  {
    Serial.println(F("\nERROR: Voltage out of DAC range"));
  }
  data[1] = (uint8_t)(v_data >> 4); // most significant bits
  data[2] = (uint8_t)(v_data << 4); // least significant bits

  //write the command and data to the DAC
  LT_Wire.beginTransmission(dac_address);
  LT_Wire.expectToWrite((uint16_t) 3);
  //  LT_Wire.write(command);
  LT_Wire.write(data[0]);
  LT_Wire.write(data[1]);
  LT_Wire.write(data[2]);
  LT_Wire.endTransmission(1);

  free(data);
  return;

}

Download LTC2936 Linduino Header File

/*!
LTC2936: Programable Hex Voltage Supervisor with Comparator Outputs and EEPROM

@verbatim

@endverbatim

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

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

REVISION HISTORY
$Revision: 3522 $
$Date: 2015-05-27 14:37:59 -0700 (Wed, 27 May 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.
*/

//! @defgroup LTC2936 LTC2936: Programable Hex Voltage Supervisor with Comparator Outputs and EEPROM

/*! @file
    @ingroup LTC2936
	Header for LTC2936: Programable Hex Voltage Supervisor with Comparator Outputs and EEPROM
*/

#ifndef LTC2936_h
#define LTC2936_h

//! @name LTC2933 DEVICE I2C ADDRESSES (7-bit)
// GLOBAL ADDRESS
#define LTC2936_I2C_GLOBAL_ADDRESS 		0x73
#define LTC2936_I2C_ARA_ADDRESS 		0x0C

//DEVICE ADDRESSES (ASEL1,ASEL0)
//#define LTC2936_I2C_ADDRESS 			0x50 // 00 -- WARNING: SAME ADDRESS AS DC1605B EEPROM
//#define LTC2936_I2C_ADDRESS 			0x51 // 0Z -- WARNING: SAME ADDRESS AS DC1605B EEPROM
//#define LTC2936_I2C_ADDRESS 			0x52 // 01 -- WARNING: SAME ADDRESS AS DC1605B EEPROM
//#define LTC2936_I2C_ADDRESS 			0x53 // Z0 -- WARNING: SAME ADDRESS AS DC1605B EEPROM
//#define LTC2936_I2C_ADDRESS 			0x54 // ZZ -- WARNING: SAME ADDRESS AS DC1605B EEPROM
//#define LTC2936_I2C_ADDRESS 			0x55 // Z1 -- WARNING: SAME ADDRESS AS DC1605B EEPROM
//#define LTC2936_I2C_ADDRESS 			0x58 // 10
//#define LTC2936_I2C_ADDRESS 			0x59 // 1Z
//#define LTC2936_I2C_ADDRESS 			0x5A // 11
//! @}

// WARNING: The DC1605B contains a indentity EEPROM that answers to addresses 0x5n
// WARNING:  where n = 0,1,2,3,4,5,6,7
// WARNING: Unfortunately, the Linduino ties the EEPROM's I2C bus into the main I2C bus
// WARNING:  and essentially reserves these addresses so they cannot be used by the DUT
// WARNING: Consequently, when using Linduino, only LTC2936 addresses 0x58, 0x59, and 
// WARNING:  0x5A are usable.
// WARNING: YOU MUST SET JUMPER ASEL1 = 1 !
// NOTE: The above situation only applies to the DC1605B board with Linduino
// NOTE: When the LTC2936 is used in a customer system, different addresses will apply

//! @name LTC2936 REGISTER DEFINITIONS
#define LTC2936_WRITE_PROTECT 			0x00
#define LTC2936_GPI_CONFIG  			0x01
#define LTC2936_GPIO1_CONFIG  			0x02
#define LTC2936_GPIO2_3_CONFIG  		0x03
#define LTC2936_V1_THR    				0x04
#define LTC2936_V2_THR    				0x05
#define LTC2936_V3_THR    				0x06
#define LTC2936_V4_THR    				0x07
#define LTC2936_V5_THR    				0x08
#define LTC2936_V6_THR    				0x09
#define LTC2936_V1_CONFIG 				0x0A
#define LTC2936_V2_CONFIG 				0x0B
#define LTC2936_V3_CONFIG 				0x0C
#define LTC2936_V4_CONFIG 				0x0D
#define LTC2936_V5_CONFIG 				0x0E
#define LTC2936_V6_CONFIG 				0x0F
//        0x10
#define LTC2936_HISTORY_WORD		  	0x11
//        0x12
//        ...
//        0x19
#define LTC2936_PADS    				0x1A
#define LTC2936_CLEAR_HISTORY			0x1B
#define LTC2936_STORE_USER  			0x1C
#define LTC2936_RESTORE_USER  			0x1D
#define LTC2936_BACKUP_WORD 			0x1E
#define LTC2936_STATUS_WORD 			0x1F
//! @}

#endif

Technical Support