LTC2945 ported

Dependencies:   mbed

Committer:
odtulumbedder
Date:
Wed Sep 20 09:03:56 2017 +0000
Revision:
4:d32eaca53504
Parent:
0:6be57f391716
I decided to remove the C-linkage specifiers, they are really not that necessary.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
odtulumbedder 0:6be57f391716 1 /*!
odtulumbedder 0:6be57f391716 2 LTC2945: 12-Bit Wide Range Power Monitor
odtulumbedder 0:6be57f391716 3
odtulumbedder 0:6be57f391716 4 @verbatim
odtulumbedder 0:6be57f391716 5
odtulumbedder 0:6be57f391716 6 The LTC2945 is a rail-to-rail system monitor that measures current, voltage, and
odtulumbedder 0:6be57f391716 7 power. It features an operating range of 2.7V to 80V and includes a shunt
odtulumbedder 0:6be57f391716 8 regulator for supplies above 80V to allow flexibility in the selection of input
odtulumbedder 0:6be57f391716 9 supply. The current measurement range of 0V to 80V is independent of the input
odtulumbedder 0:6be57f391716 10 supply. An onboard 0.75% accurate 12-bit ADC measures load current, input
odtulumbedder 0:6be57f391716 11 voltage and an auxiliary external voltage. A 24-bit power value is generated by
odtulumbedder 0:6be57f391716 12 digitally multiplying the measured 12-bit load current and input voltage data.
odtulumbedder 0:6be57f391716 13 Minimum and maximum values are stored and an overrange alert with programmable
odtulumbedder 0:6be57f391716 14 thresholds minimizes the need for software polling. Data is reported via a
odtulumbedder 0:6be57f391716 15 standard I2C interface. Shutdown mode reduces power consumption to 20uA.
odtulumbedder 0:6be57f391716 16 standard I2C interface. Shutdown mode reduces power consumption to 20uA.
odtulumbedder 0:6be57f391716 17
odtulumbedder 0:6be57f391716 18 I2C DATA FORMAT (MSB FIRST):
odtulumbedder 0:6be57f391716 19
odtulumbedder 0:6be57f391716 20 Data Out:
odtulumbedder 0:6be57f391716 21 Byte #1 Byte #2 Byte #3
odtulumbedder 0:6be57f391716 22
odtulumbedder 0:6be57f391716 23 START SA6 SA5 SA4 SA3 SA2 SA1 SA0 W SACK X X C5 C4 C3 C2 C1 C0 SACK D7 D6 D5 D4 D3 D2 D1 D0 SACK STOP
odtulumbedder 0:6be57f391716 24
odtulumbedder 0:6be57f391716 25 Data In:
odtulumbedder 0:6be57f391716 26 Byte #1 Byte #2 Byte #3
odtulumbedder 0:6be57f391716 27
odtulumbedder 0:6be57f391716 28 START SA6 SA5 SA4 SA3 SA2 SA1 SA0 W SACK X X C5 C4 C3 C2 C1 C0 SACK Repeat Start SA6 SA5 SA4 SA3 SA2 SA1 SA0 R SACK
odtulumbedder 0:6be57f391716 29
odtulumbedder 0:6be57f391716 30 Byte #4 Byte #5
odtulumbedder 0:6be57f391716 31 MSB LSB
odtulumbedder 0:6be57f391716 32 D15 D14 D13 D12 D11 D10 D9 D8 MACK D7 D6 D5 D4 D3 D2 D1 D0 MNACK STOP
odtulumbedder 0:6be57f391716 33
odtulumbedder 0:6be57f391716 34 START : I2C Start
odtulumbedder 0:6be57f391716 35 Repeat Start: I2c Repeat Start
odtulumbedder 0:6be57f391716 36 STOP : I2C Stop
odtulumbedder 0:6be57f391716 37 SAx : I2C Address
odtulumbedder 0:6be57f391716 38 SACK : I2C Slave Generated Acknowledge (Active Low)
odtulumbedder 0:6be57f391716 39 MACK : I2C Master Generated Acknowledge (Active Low)
odtulumbedder 0:6be57f391716 40 MNACK : I2c Master Generated Not Acknowledge
odtulumbedder 0:6be57f391716 41 W : I2C Write (0)
odtulumbedder 0:6be57f391716 42 R : I2C Read (1)
odtulumbedder 0:6be57f391716 43 Cx : Command Code
odtulumbedder 0:6be57f391716 44 Dx : Data Bits
odtulumbedder 0:6be57f391716 45 X : Don't care
odtulumbedder 0:6be57f391716 46
odtulumbedder 0:6be57f391716 47
odtulumbedder 0:6be57f391716 48
odtulumbedder 0:6be57f391716 49 Example Code:
odtulumbedder 0:6be57f391716 50
odtulumbedder 0:6be57f391716 51 Read power, current, and voltage.
odtulumbedder 0:6be57f391716 52
odtulumbedder 0:6be57f391716 53 adc_command = LTC2945_SENSE_MONITOR | LTC2945_CONTINUOUS_MODE; // Builds commands to set LTC2945 to continuous mode
odtulumbedder 0:6be57f391716 54 ack |= LTC2945_write(LTC2945_I2C_ADDRESS, LTC2945_CONTROL_REG, adc_command); // Sets the LTC2945 to continuous mode
odtulumbedder 0:6be57f391716 55
odtulumbedder 0:6be57f391716 56 resistor = .02; // Resistor Value On Demo Board
odtulumbedder 0:6be57f391716 57
odtulumbedder 0:6be57f391716 58 ack |= LTC2945_read_24_bits(LTC2945_I2C_ADDRESS, LTC2945_POWER_MSB2_REG, &power_code); // Reads the ADC registers that contains V^2
odtulumbedder 0:6be57f391716 59 power = LTC2945_code_to_power(power_code, resistor, LTC2945_Power_lsb); // Calculates power from power code, resistor value and power lsb
odtulumbedder 0:6be57f391716 60
odtulumbedder 0:6be57f391716 61 ack |= LTC2945_read_12_bits(LTC2945_I2C_ADDRESS, LTC2945_DELTA_SENSE_MSB_REG, &current_code); // Reads the voltage code across sense resistor
odtulumbedder 0:6be57f391716 62 current = LTC2945_code_to_current(current_code, resistor, LTC2945_DELTA_SENSE_lsb); // Calculates current from current code, resistor value and current lsb
odtulumbedder 0:6be57f391716 63
odtulumbedder 0:6be57f391716 64 ack |= LTC2945_read_12_bits(LTC2945_I2C_ADDRESS, LTC2945_VIN_MSB_REG, &VIN_code); // Reads VIN voltage code
odtulumbedder 0:6be57f391716 65 VIN = LTC2945_VIN_code_to_voltage(VIN_code, LTC2945_VIN_lsb); // Calculates VIN voltage from VIN code and lsb
odtulumbedder 0:6be57f391716 66
odtulumbedder 0:6be57f391716 67
odtulumbedder 0:6be57f391716 68 @endverbatim
odtulumbedder 0:6be57f391716 69
odtulumbedder 0:6be57f391716 70 http://www.linear.com/product/LTC2945
odtulumbedder 0:6be57f391716 71
odtulumbedder 0:6be57f391716 72 http://www.linear.com/product/ltc2945#demoboards
odtulumbedder 0:6be57f391716 73
odtulumbedder 0:6be57f391716 74 REVISION HISTORY
odtulumbedder 0:6be57f391716 75 $Revision: 3659 $
odtulumbedder 0:6be57f391716 76 $Date: 2015-07-01 10:19:20 -0700 (Wed, 01 Jul 2015) $
odtulumbedder 0:6be57f391716 77
odtulumbedder 0:6be57f391716 78 Copyright (c) 2013, Linear Technology Corp.(LTC)
odtulumbedder 0:6be57f391716 79 All rights reserved.
odtulumbedder 0:6be57f391716 80
odtulumbedder 0:6be57f391716 81 Redistribution and use in source and binary forms, with or without
odtulumbedder 0:6be57f391716 82 modification, are permitted provided that the following conditions are met:
odtulumbedder 0:6be57f391716 83
odtulumbedder 0:6be57f391716 84 1. Redistributions of source code must retain the above copyright notice, this
odtulumbedder 0:6be57f391716 85 list of conditions and the following disclaimer.
odtulumbedder 0:6be57f391716 86 2. Redistributions in binary form must reproduce the above copyright notice,
odtulumbedder 0:6be57f391716 87 this list of conditions and the following disclaimer in the documentation
odtulumbedder 0:6be57f391716 88 and/or other materials provided with the distribution.
odtulumbedder 0:6be57f391716 89
odtulumbedder 0:6be57f391716 90 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
odtulumbedder 0:6be57f391716 91 ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
odtulumbedder 0:6be57f391716 92 WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
odtulumbedder 0:6be57f391716 93 DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
odtulumbedder 0:6be57f391716 94 ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
odtulumbedder 0:6be57f391716 95 (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
odtulumbedder 0:6be57f391716 96 LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
odtulumbedder 0:6be57f391716 97 ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
odtulumbedder 0:6be57f391716 98 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
odtulumbedder 0:6be57f391716 99 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
odtulumbedder 0:6be57f391716 100
odtulumbedder 0:6be57f391716 101 The views and conclusions contained in the software and documentation are those
odtulumbedder 0:6be57f391716 102 of the authors and should not be interpreted as representing official policies,
odtulumbedder 0:6be57f391716 103 either expressed or implied, of Linear Technology Corp.
odtulumbedder 0:6be57f391716 104
odtulumbedder 0:6be57f391716 105 The Linear Technology Linduino is not affiliated with the official Arduino team.
odtulumbedder 0:6be57f391716 106 However, the Linduino is only possible because of the Arduino team's commitment
odtulumbedder 0:6be57f391716 107 to the open-source community. Please, visit http://www.arduino.cc and
odtulumbedder 0:6be57f391716 108 http://store.arduino.cc , and consider a purchase that will help fund their
odtulumbedder 0:6be57f391716 109 ongoing work.
odtulumbedder 0:6be57f391716 110 */
odtulumbedder 0:6be57f391716 111
odtulumbedder 0:6be57f391716 112 /*! @file
odtulumbedder 0:6be57f391716 113 @ingroup LTC2945
odtulumbedder 0:6be57f391716 114 Header for LTC2945: 12-bit Wide Range Power Monitor
odtulumbedder 0:6be57f391716 115 */
odtulumbedder 0:6be57f391716 116
odtulumbedder 0:6be57f391716 117 #ifndef LTC2945_H
odtulumbedder 0:6be57f391716 118 #define LTC2945_H
odtulumbedder 0:6be57f391716 119
odtulumbedder 0:6be57f391716 120 #include <stdint.h>
odtulumbedder 0:6be57f391716 121
odtulumbedder 0:6be57f391716 122 //! Use table to select address
odtulumbedder 0:6be57f391716 123 /*!
odtulumbedder 0:6be57f391716 124 | LTC2945 I2C Address Assignment | Value | AD1 | AD2 |
odtulumbedder 0:6be57f391716 125 | :-------------------------------- | :---: | :------: | :------: |
odtulumbedder 0:6be57f391716 126 | LTC2945_I2C_ADDRESS | 0x67 | High | Low |
odtulumbedder 0:6be57f391716 127 | LTC2945_I2C_ADDRESS | 0x68 | Float | High |
odtulumbedder 0:6be57f391716 128 | LTC2945_I2C_ADDRESS | 0x69 | High | High |
odtulumbedder 0:6be57f391716 129 | LTC2945_I2C_ADDRESS | 0x6A | Float | Float |
odtulumbedder 0:6be57f391716 130 | LTC2945_I2C_ADDRESS | 0x6B | Float | Low |
odtulumbedder 0:6be57f391716 131 | LTC2945_I2C_ADDRESS | 0x6C | Low | High |
odtulumbedder 0:6be57f391716 132 | LTC2945_I2C_ADDRESS | 0x6D | High | Float |
odtulumbedder 0:6be57f391716 133 | LTC2945_I2C_ADDRESS | 0x6E | Low | Float |
odtulumbedder 0:6be57f391716 134 | LTC2945_I2C_ADDRESS | 0x6F | Low | Low |
odtulumbedder 0:6be57f391716 135 | | | | |
odtulumbedder 0:6be57f391716 136 | LTC2945_I2C_MASS_WRITE | 0xCC | X | X |
odtulumbedder 0:6be57f391716 137 | LTC2945_I2C_ALERT_RESPONSE | 0x19 | X | X |
odtulumbedder 0:6be57f391716 138 */
odtulumbedder 0:6be57f391716 139 /*! @name LTC2945 I2C Address Assignments
odtulumbedder 0:6be57f391716 140 @{ */
odtulumbedder 0:6be57f391716 141
odtulumbedder 0:6be57f391716 142 // Address Choices:
odtulumbedder 0:6be57f391716 143 // To choose an address, comment out all options except the
odtulumbedder 0:6be57f391716 144 // configuration on the demo board.
odtulumbedder 0:6be57f391716 145
odtulumbedder 0:6be57f391716 146 // Address assignment
odtulumbedder 0:6be57f391716 147 // LTC2945 I2C Address // AD1 AD0
odtulumbedder 0:6be57f391716 148 // #define LTC2945_I2C_ADDRESS 0x67 // High Low
odtulumbedder 0:6be57f391716 149 // #define LTC2945_I2C_ADDRESS 0x68 // Float High
odtulumbedder 0:6be57f391716 150 // #define LTC2945_I2C_ADDRESS 0x69 // High High
odtulumbedder 0:6be57f391716 151 // #define LTC2945_I2C_ADDRESS 0x6A // Float Float
odtulumbedder 0:6be57f391716 152 // #define LTC2945_I2C_ADDRESS 0x6B // Float Low
odtulumbedder 0:6be57f391716 153 // #define LTC2945_I2C_ADDRESS 0x6C // Low High
odtulumbedder 0:6be57f391716 154 // #define LTC2945_I2C_ADDRESS 0x6D // High Float
odtulumbedder 0:6be57f391716 155 // #define LTC2945_I2C_ADDRESS 0x6E // Low Float
odtulumbedder 0:6be57f391716 156 #define LTC2945_I2C_ADDRESS 0x6F // Low Low
odtulumbedder 0:6be57f391716 157
odtulumbedder 0:6be57f391716 158 #define LTC2945_I2C_MASS_WRITE 0xCC
odtulumbedder 0:6be57f391716 159 #define LTC2945_I2C_ALERT_RESPONSE 0x19
odtulumbedder 0:6be57f391716 160 //! @}
odtulumbedder 0:6be57f391716 161
odtulumbedder 0:6be57f391716 162
odtulumbedder 0:6be57f391716 163 /*!
odtulumbedder 0:6be57f391716 164 | Name | Value |
odtulumbedder 0:6be57f391716 165 | :------------------------------------------------ | :---: |
odtulumbedder 0:6be57f391716 166 | LTC2945_CONTROL_REG | 0x00 |
odtulumbedder 0:6be57f391716 167 | LTC2945_ALERT_REG | 0x01 |
odtulumbedder 0:6be57f391716 168 | LTC2945_STATUS_REG | 0x02 |
odtulumbedder 0:6be57f391716 169 | LTC2945_FAULT_REG | 0x03 |
odtulumbedder 0:6be57f391716 170 | LTC2945_FAULT_CoR_REG | 0x04 |
odtulumbedder 0:6be57f391716 171 | LTC2945_POWER_MSB2_REG | 0x05 |
odtulumbedder 0:6be57f391716 172 | LTC2945_POWER_MSB1_REG | 0x06 |
odtulumbedder 0:6be57f391716 173 | LTC2945_POWER_LSB_REG | 0x07 |
odtulumbedder 0:6be57f391716 174 | LTC2945_MAX_POWER_MSB2_REG | 0x08 |
odtulumbedder 0:6be57f391716 175 | LTC2945_MAX_POWER_MSB1_REG | 0x09 |
odtulumbedder 0:6be57f391716 176 | LTC2945_MAX_POWER_LSB_REG | 0x0A |
odtulumbedder 0:6be57f391716 177 | LTC2945_MIN_POWER_MSB2_REG | 0x0B |
odtulumbedder 0:6be57f391716 178 | LTC2945_MIN_POWER_MSB1_REG | 0x0C |
odtulumbedder 0:6be57f391716 179 | LTC2945_MIN_POWER_LSB_REG | 0x0D |
odtulumbedder 0:6be57f391716 180 | LTC2945_MAX_POWER_THRESHOLD_MSB2_REG | 0x0E |
odtulumbedder 0:6be57f391716 181 | LTC2945_MAX_POWER_THRESHOLD_MSB1_REG | 0x0F |
odtulumbedder 0:6be57f391716 182 | LTC2945_MAX_POWER_THRESHOLD_LSB_REG | 0x10 |
odtulumbedder 0:6be57f391716 183 | LTC2945_MIN_POWER_THRESHOLD_MSB2_REG | 0x11 |
odtulumbedder 0:6be57f391716 184 | LTC2945_MIN_POWER_THRESHOLD_MSB1_REG | 0x12 |
odtulumbedder 0:6be57f391716 185 | LTC2945_MIN_POWER_THRESHOLD_LSB_REG | 0x13 |
odtulumbedder 0:6be57f391716 186 | LTC2945_DELTA_SENSE_MSB_REG | 0x14 |
odtulumbedder 0:6be57f391716 187 | LTC2945_DELTA_SENSE_LSB_REG | 0x15 |
odtulumbedder 0:6be57f391716 188 | LTC2945_MAX_DELTA_SENSE_MSB_REG | 0x16 |
odtulumbedder 0:6be57f391716 189 | LTC2945_MAX_DELTA_SENSE_LSB_REG | 0x17 |
odtulumbedder 0:6be57f391716 190 | LTC2945_MIN_DELTA_SENSE_MSB_REG | 0x18 |
odtulumbedder 0:6be57f391716 191 | LTC2945_MIN_DELTA_SENSE_LSB_REG | 0x19 |
odtulumbedder 0:6be57f391716 192 | LTC2945_MAX_DELTA_SENSE_THRESHOLD_MSB_REG | 0x1A |
odtulumbedder 0:6be57f391716 193 | LTC2945_MAX_DELTA_SENSE_THRESHOLD_LSB_REG | 0x1B |
odtulumbedder 0:6be57f391716 194 | LTC2945_MIN_DELTA_SENSE_THRESHOLD_MSB_REG | 0x1C |
odtulumbedder 0:6be57f391716 195 | LTC2945_MIN_DELTA_SENSE_THRESHOLD_LSB_REG | 0x1D |
odtulumbedder 0:6be57f391716 196 | LTC2945_VIN_MSB_REG | 0x1E |
odtulumbedder 0:6be57f391716 197 | LTC2945_VIN_LSB_REG | 0x1F |
odtulumbedder 0:6be57f391716 198 | LTC2945_MAX_VIN_MSB_REG | 0x20 |
odtulumbedder 0:6be57f391716 199 | LTC2945_MAX_VIN_LSB_REG | 0x21 |
odtulumbedder 0:6be57f391716 200 | LTC2945_MIN_VIN_MSB_REG | 0x22 |
odtulumbedder 0:6be57f391716 201 | LTC2945_MIN_VIN_LSB_REG | 0x23 |
odtulumbedder 0:6be57f391716 202 | LTC2945_MAX_VIN_THRESHOLD_MSB_REG | 0x24 |
odtulumbedder 0:6be57f391716 203 | LTC2945_MAX_VIN_THRESHOLD_LSB_REG | 0x25 |
odtulumbedder 0:6be57f391716 204 | LTC2945_MIN_VIN_THRESHOLD_MSB_REG | 0x26 |
odtulumbedder 0:6be57f391716 205 | LTC2945_MIN_VIN_THRESHOLD_LSB_REG | 0x27 |
odtulumbedder 0:6be57f391716 206 | LTC2945_ADIN_MSB_REG | 0x28 |
odtulumbedder 0:6be57f391716 207 | LTC2945_ADIN_LSB_REG_REG | 0x29 |
odtulumbedder 0:6be57f391716 208 | LTC2945_MAX_ADIN_MSB_REG | 0x2A |
odtulumbedder 0:6be57f391716 209 | LTC2945_MAX_ADIN_LSB_REG | 0x2B |
odtulumbedder 0:6be57f391716 210 | LTC2945_MIN_ADIN_MSB_REG | 0x2C |
odtulumbedder 0:6be57f391716 211 | LTC2945_MIN_ADIN_LSB_REG | 0x2D |
odtulumbedder 0:6be57f391716 212 | LTC2945_MAX_ADIN_THRESHOLD_MSB_REG | 0x2E |
odtulumbedder 0:6be57f391716 213 | LTC2945_MAX_ADIN_THRESHOLD_LSB_REG | 0x2F |
odtulumbedder 0:6be57f391716 214 | LTC2945_MIN_ADIN_THRESHOLD_MSB_REG | 0x30 |
odtulumbedder 0:6be57f391716 215 | LTC2945_MIN_ADIN_THRESHOLD_LSB_REG | 0x31 |
odtulumbedder 0:6be57f391716 216 */
odtulumbedder 0:6be57f391716 217
odtulumbedder 0:6be57f391716 218
odtulumbedder 0:6be57f391716 219
odtulumbedder 0:6be57f391716 220 /*! @name Registers
odtulumbedder 0:6be57f391716 221 @{ */
odtulumbedder 0:6be57f391716 222 // Registers
odtulumbedder 0:6be57f391716 223
odtulumbedder 0:6be57f391716 224 #define LTC2945_CONTROL_REG 0x00
odtulumbedder 0:6be57f391716 225 #define LTC2945_ALERT_REG 0x01
odtulumbedder 0:6be57f391716 226 #define LTC2945_STATUS_REG 0x02
odtulumbedder 0:6be57f391716 227 #define LTC2945_FAULT_REG 0x03
odtulumbedder 0:6be57f391716 228 #define LTC2945_FAULT_CoR_REG 0x04
odtulumbedder 0:6be57f391716 229
odtulumbedder 0:6be57f391716 230 #define LTC2945_POWER_MSB2_REG 0x05
odtulumbedder 0:6be57f391716 231 #define LTC2945_POWER_MSB1_REG 0x06
odtulumbedder 0:6be57f391716 232 #define LTC2945_POWER_LSB_REG 0x07
odtulumbedder 0:6be57f391716 233 #define LTC2945_MAX_POWER_MSB2_REG 0x08
odtulumbedder 0:6be57f391716 234 #define LTC2945_MAX_POWER_MSB1_REG 0x09
odtulumbedder 0:6be57f391716 235 #define LTC2945_MAX_POWER_LSB_REG 0x0A
odtulumbedder 0:6be57f391716 236 #define LTC2945_MIN_POWER_MSB2_REG 0x0B
odtulumbedder 0:6be57f391716 237 #define LTC2945_MIN_POWER_MSB1_REG 0x0C
odtulumbedder 0:6be57f391716 238 #define LTC2945_MIN_POWER_LSB_REG 0x0D
odtulumbedder 0:6be57f391716 239 #define LTC2945_MAX_POWER_THRESHOLD_MSB2_REG 0x0E
odtulumbedder 0:6be57f391716 240 #define LTC2945_MAX_POWER_THRESHOLD_MSB1_REG 0x0F
odtulumbedder 0:6be57f391716 241 #define LTC2945_MAX_POWER_THRESHOLD_LSB_REG 0x10
odtulumbedder 0:6be57f391716 242 #define LTC2945_MIN_POWER_THRESHOLD_MSB2_REG 0x11
odtulumbedder 0:6be57f391716 243 #define LTC2945_MIN_POWER_THRESHOLD_MSB1_REG 0x12
odtulumbedder 0:6be57f391716 244 #define LTC2945_MIN_POWER_THRESHOLD_LSB_REG 0x13
odtulumbedder 0:6be57f391716 245
odtulumbedder 0:6be57f391716 246 #define LTC2945_DELTA_SENSE_MSB_REG 0x14
odtulumbedder 0:6be57f391716 247 #define LTC2945_DELTA_SENSE_LSB_REG 0x15
odtulumbedder 0:6be57f391716 248 #define LTC2945_MAX_DELTA_SENSE_MSB_REG 0x16
odtulumbedder 0:6be57f391716 249 #define LTC2945_MAX_DELTA_SENSE_LSB_REG 0x17
odtulumbedder 0:6be57f391716 250 #define LTC2945_MIN_DELTA_SENSE_MSB_REG 0x18
odtulumbedder 0:6be57f391716 251 #define LTC2945_MIN_DELTA_SENSE_LSB_REG 0x19
odtulumbedder 0:6be57f391716 252 #define LTC2945_MAX_DELTA_SENSE_THRESHOLD_MSB_REG 0x1A
odtulumbedder 0:6be57f391716 253 #define LTC2945_MAX_DELTA_SENSE_THRESHOLD_LSB_REG 0x1B
odtulumbedder 0:6be57f391716 254 #define LTC2945_MIN_DELTA_SENSE_THRESHOLD_MSB_REG 0x1C
odtulumbedder 0:6be57f391716 255 #define LTC2945_MIN_DELTA_SENSE_THRESHOLD_LSB_REG 0x1D
odtulumbedder 0:6be57f391716 256
odtulumbedder 0:6be57f391716 257 #define LTC2945_VIN_MSB_REG 0x1E
odtulumbedder 0:6be57f391716 258 #define LTC2945_VIN_LSB_REG 0x1F
odtulumbedder 0:6be57f391716 259 #define LTC2945_MAX_VIN_MSB_REG 0x20
odtulumbedder 0:6be57f391716 260 #define LTC2945_MAX_VIN_LSB_REG 0x21
odtulumbedder 0:6be57f391716 261 #define LTC2945_MIN_VIN_MSB_REG 0x22
odtulumbedder 0:6be57f391716 262 #define LTC2945_MIN_VIN_LSB_REG 0x23
odtulumbedder 0:6be57f391716 263 #define LTC2945_MAX_VIN_THRESHOLD_MSB_REG 0x24
odtulumbedder 0:6be57f391716 264 #define LTC2945_MAX_VIN_THRESHOLD_LSB_REG 0x25
odtulumbedder 0:6be57f391716 265 #define LTC2945_MIN_VIN_THRESHOLD_MSB_REG 0x26
odtulumbedder 0:6be57f391716 266 #define LTC2945_MIN_VIN_THRESHOLD_LSB_REG 0x27
odtulumbedder 0:6be57f391716 267
odtulumbedder 0:6be57f391716 268 #define LTC2945_ADIN_MSB_REG 0x28
odtulumbedder 0:6be57f391716 269 #define LTC2945_ADIN_LSB_REG_REG 0x29
odtulumbedder 0:6be57f391716 270 #define LTC2945_MAX_ADIN_MSB_REG 0x2A
odtulumbedder 0:6be57f391716 271 #define LTC2945_MAX_ADIN_LSB_REG 0x2B
odtulumbedder 0:6be57f391716 272 #define LTC2945_MIN_ADIN_MSB_REG 0x2C
odtulumbedder 0:6be57f391716 273 #define LTC2945_MIN_ADIN_LSB_REG 0x2D
odtulumbedder 0:6be57f391716 274 #define LTC2945_MAX_ADIN_THRESHOLD_MSB_REG 0x2E
odtulumbedder 0:6be57f391716 275 #define LTC2945_MAX_ADIN_THRESHOLD_LSB_REG 0x2F
odtulumbedder 0:6be57f391716 276 #define LTC2945_MIN_ADIN_THRESHOLD_MSB_REG 0x30
odtulumbedder 0:6be57f391716 277 #define LTC2945_MIN_ADIN_THRESHOLD_LSB_REG 0x31
odtulumbedder 0:6be57f391716 278 //! @}
odtulumbedder 0:6be57f391716 279
odtulumbedder 0:6be57f391716 280 /*!
odtulumbedder 0:6be57f391716 281 | Snapshot Selection Command | Value |
odtulumbedder 0:6be57f391716 282 | :-------------------------------------------- | :---: |
odtulumbedder 0:6be57f391716 283 | LTC2945_DELTA_SENSE_SNAPSHOT | 0x80 |
odtulumbedder 0:6be57f391716 284 | LTC2945_VIN_SNAPSHOT | 0xA0 |
odtulumbedder 0:6be57f391716 285 | LTC2945_ADIN_SNAPSHOT | 0xC0 |
odtulumbedder 0:6be57f391716 286 */
odtulumbedder 0:6be57f391716 287
odtulumbedder 0:6be57f391716 288 /*! @name Selection Command
odtulumbedder 0:6be57f391716 289 @{ */
odtulumbedder 0:6be57f391716 290 // Snapshot Selection Command
odtulumbedder 0:6be57f391716 291 #define LTC2945_DELTA_SENSE_SNAPSHOT 0x80
odtulumbedder 0:6be57f391716 292 #define LTC2945_VIN_SNAPSHOT 0xA0
odtulumbedder 0:6be57f391716 293 #define LTC2945_ADIN_SNAPSHOT 0xC0
odtulumbedder 0:6be57f391716 294 //! @}
odtulumbedder 0:6be57f391716 295
odtulumbedder 0:6be57f391716 296 /*!
odtulumbedder 0:6be57f391716 297 | Command Codes | Value |
odtulumbedder 0:6be57f391716 298 | :-------------------------------------------- | :-------: |
odtulumbedder 0:6be57f391716 299 | LTC2945_CONTINUOUS_MODE | 0x00 |
odtulumbedder 0:6be57f391716 300 | LTC2945_SHUTDOWN_MODE | 0x02 |
odtulumbedder 0:6be57f391716 301 | LTC2945_TEST_MODE | 0x10 |
odtulumbedder 0:6be57f391716 302 | LTC2945_RESET_ALL_FAULTS | 0x00 |
odtulumbedder 0:6be57f391716 303 | LTC2945_SENSE_MULTIPLIER | 0x01 |
odtulumbedder 0:6be57f391716 304 | LTC2945_SENSE_MONITOR | 0x04 |
odtulumbedder 0:6be57f391716 305 | LTC2945_MAX_POWER_MSB2_RESET | 0x00 |
odtulumbedder 0:6be57f391716 306 | LTC2945_MIN_POWER_MSB2_RESET | 0xFF |
odtulumbedder 0:6be57f391716 307 | LTC2945_MAX_DELTA_SENSE_MSB_RESET | 0x00 |
odtulumbedder 0:6be57f391716 308 | LTC2945_MIN_DELTA_SENSE_MSB_RESET | 0xFF |
odtulumbedder 0:6be57f391716 309 | LTC2945_MAX_VIN_MSB_RESET | 0x00 |
odtulumbedder 0:6be57f391716 310 | LTC2945_MIN_VIN_MSB_RESET | 0xFF |
odtulumbedder 0:6be57f391716 311 | LTC2945_MAX_ADIN_MSB_RESET | 0x00 |
odtulumbedder 0:6be57f391716 312 | LTC2945_MIN_ADIN_MSB_RESET | 0xFF |
odtulumbedder 0:6be57f391716 313 | LTC2945_ENABLE_MAX_POWER_ALERT | 0x80 |
odtulumbedder 0:6be57f391716 314 | LTC2945_ENABLE_MIN_POWER_ALERT | 0x40 |
odtulumbedder 0:6be57f391716 315 | LTC2945_DISABLE_MAX_POWER_ALERT | 0x7F |
odtulumbedder 0:6be57f391716 316 | LTC2945_DISABLE_MIN_POWER_ALERT | 0xBF |
odtulumbedder 0:6be57f391716 317 | LTC2945_ENABLE_MAX_DELTA_SENSE_ALERT | 0x20 |
odtulumbedder 0:6be57f391716 318 | LTC2945_ENABLE_MIN_DELTA_SENSE_ALERT | 0x10 |
odtulumbedder 0:6be57f391716 319 | LTC2945_DISABLE_MAX_DELTA_SENSE_ALERT | 0xDF |
odtulumbedder 0:6be57f391716 320 | LTC2945_DISABLE_MIN_DELTA_SENSE_ALERT | 0xEF |
odtulumbedder 0:6be57f391716 321 | LTC2945_ENABLE_MAX_VIN_ALERT | 0x08 |
odtulumbedder 0:6be57f391716 322 | LTC2945_ENABLE_MIN_VIN_ALERT | 0x04 |
odtulumbedder 0:6be57f391716 323 | LTC2945_DISABLE_MAX_VIN_ALERT | 0xF7 |
odtulumbedder 0:6be57f391716 324 | LTC2945_DISABLE_MIN_VIN_ALERT | 0xFB |
odtulumbedder 0:6be57f391716 325 | LTC2945_ENABLE_MAX_ADIN_ALERT | 0x02 |
odtulumbedder 0:6be57f391716 326 | LTC2945_ENABLE_MIN_ADIN_ALERT | 0x01 |
odtulumbedder 0:6be57f391716 327 | LTC2945_DISABLE_MAX_ADIN_ALERT | 0xFD |
odtulumbedder 0:6be57f391716 328 | LTC2945_DISABLE_MIN_ADIN_ALERT | 0xFE |
odtulumbedder 0:6be57f391716 329 */
odtulumbedder 0:6be57f391716 330 /*! @name Command Codes
odtulumbedder 0:6be57f391716 331 @{ */
odtulumbedder 0:6be57f391716 332 // Command Codes
odtulumbedder 0:6be57f391716 333 #define LTC2945_CONTINUOUS_MODE 0x00
odtulumbedder 0:6be57f391716 334 #define LTC2945_SHUTDOWN_MODE 0x02
odtulumbedder 0:6be57f391716 335 #define LTC2945_TEST_MODE 0x10
odtulumbedder 0:6be57f391716 336 #define LTC2945_RESET_ALL_FAULTS 0x00
odtulumbedder 0:6be57f391716 337 #define LTC2945_SENSE_MULTIPLIER 0x01
odtulumbedder 0:6be57f391716 338 #define LTC2945_SENSE_MONITOR 0x04
odtulumbedder 0:6be57f391716 339
odtulumbedder 0:6be57f391716 340 #define LTC2945_MAX_POWER_MSB2_RESET 0x00
odtulumbedder 0:6be57f391716 341 #define LTC2945_MIN_POWER_MSB2_RESET 0xFF
odtulumbedder 0:6be57f391716 342 #define LTC2945_MAX_DELTA_SENSE_MSB_RESET 0x00
odtulumbedder 0:6be57f391716 343 #define LTC2945_MIN_DELTA_SENSE_MSB_RESET 0xFF
odtulumbedder 0:6be57f391716 344 #define LTC2945_MAX_VIN_MSB_RESET 0x00
odtulumbedder 0:6be57f391716 345 #define LTC2945_MIN_VIN_MSB_RESET 0xFF
odtulumbedder 0:6be57f391716 346 #define LTC2945_MAX_ADIN_MSB_RESET 0x00
odtulumbedder 0:6be57f391716 347 #define LTC2945_MIN_ADIN_MSB_RESET 0xFF
odtulumbedder 0:6be57f391716 348
odtulumbedder 0:6be57f391716 349 #define LTC2945_ENABLE_MAX_POWER_ALERT 0x80
odtulumbedder 0:6be57f391716 350 #define LTC2945_ENABLE_MIN_POWER_ALERT 0x40
odtulumbedder 0:6be57f391716 351 #define LTC2945_DISABLE_MAX_POWER_ALERT 0x7F
odtulumbedder 0:6be57f391716 352 #define LTC2945_DISABLE_MIN_POWER_ALERT 0xBF
odtulumbedder 0:6be57f391716 353
odtulumbedder 0:6be57f391716 354 #define LTC2945_ENABLE_MAX_DELTA_SENSE_ALERT 0x20
odtulumbedder 0:6be57f391716 355 #define LTC2945_ENABLE_MIN_DELTA_SENSE_ALERT 0x10
odtulumbedder 0:6be57f391716 356 #define LTC2945_DISABLE_MAX_DELTA_SENSE_ALERT 0xDF
odtulumbedder 0:6be57f391716 357 #define LTC2945_DISABLE_MIN_DELTA_SENSE_ALERT 0xEF
odtulumbedder 0:6be57f391716 358
odtulumbedder 0:6be57f391716 359 #define LTC2945_ENABLE_MAX_VIN_ALERT 0x08
odtulumbedder 0:6be57f391716 360 #define LTC2945_ENABLE_MIN_VIN_ALERT 0x04
odtulumbedder 0:6be57f391716 361 #define LTC2945_DISABLE_MAX_VIN_ALERT 0xF7
odtulumbedder 0:6be57f391716 362 #define LTC2945_DISABLE_MIN_VIN_ALERT 0xFB
odtulumbedder 0:6be57f391716 363
odtulumbedder 0:6be57f391716 364 #define LTC2945_ENABLE_MAX_ADIN_ALERT 0x02
odtulumbedder 0:6be57f391716 365 #define LTC2945_ENABLE_MIN_ADIN_ALERT 0x01
odtulumbedder 0:6be57f391716 366 #define LTC2945_DISABLE_MAX_ADIN_ALERT 0xFD
odtulumbedder 0:6be57f391716 367 #define LTC2945_DISABLE_MIN_ADIN_ALERT 0xFE
odtulumbedder 0:6be57f391716 368 //! @}
odtulumbedder 0:6be57f391716 369
odtulumbedder 0:6be57f391716 370 //! Write an 8-bit code to the LTC2945.
odtulumbedder 0:6be57f391716 371 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
odtulumbedder 0:6be57f391716 372 int8_t LTC2945_write(uint8_t i2c_address, //!< Register address for the LTC2945
odtulumbedder 0:6be57f391716 373 uint8_t adc_command, //!< The "command byte" for the LTC2945
odtulumbedder 0:6be57f391716 374 uint8_t code //!< Value that will be written to the register.
odtulumbedder 0:6be57f391716 375 );
odtulumbedder 0:6be57f391716 376 //! Write a 16-bit code to the LTC2945.
odtulumbedder 0:6be57f391716 377 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
odtulumbedder 0:6be57f391716 378 int8_t LTC2945_write_16_bits(uint8_t i2c_address, //!< Register address for the LTC2945
odtulumbedder 0:6be57f391716 379 uint8_t adc_command, //!< The "command byte" for the LTC2945
odtulumbedder 0:6be57f391716 380 uint16_t code //!< Value that will be written to the register.
odtulumbedder 0:6be57f391716 381 );
odtulumbedder 0:6be57f391716 382
odtulumbedder 0:6be57f391716 383 //! Write a 24-bit code to the LTC2945.
odtulumbedder 0:6be57f391716 384 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
odtulumbedder 0:6be57f391716 385 int8_t LTC2945_write_24_bits(uint8_t i2c_address, //!< Register address for the LTC2945
odtulumbedder 0:6be57f391716 386 uint8_t adc_command, //!< The "command byte" for the LTC2945
odtulumbedder 0:6be57f391716 387 int32_t code //!< Value that will be written to the register.
odtulumbedder 0:6be57f391716 388 );
odtulumbedder 0:6be57f391716 389 //! Reads an 8-bit adc_code from LTC2945
odtulumbedder 0:6be57f391716 390 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
odtulumbedder 0:6be57f391716 391 int8_t LTC2945_read(uint8_t i2c_address, //!< Register address for the LTC2945
odtulumbedder 0:6be57f391716 392 uint8_t adc_command, //!< The "command byte" for the LTC2945
odtulumbedder 0:6be57f391716 393 uint8_t *adc_code //!< Value that will be read from the register.
odtulumbedder 0:6be57f391716 394 );
odtulumbedder 0:6be57f391716 395 //! Reads a 12-bit adc_code from LTC2945
odtulumbedder 0:6be57f391716 396 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
odtulumbedder 0:6be57f391716 397 int8_t LTC2945_read_12_bits(uint8_t i2c_address, //!< Register address for the LTC2945
odtulumbedder 0:6be57f391716 398 uint8_t adc_command, //!< The "command byte" for the LTC2945
odtulumbedder 0:6be57f391716 399 uint16_t *adc_code //!< Value that will be read from the register.
odtulumbedder 0:6be57f391716 400 );
odtulumbedder 0:6be57f391716 401 //! Reads a 16-bit adc_code from LTC2945
odtulumbedder 0:6be57f391716 402 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
odtulumbedder 0:6be57f391716 403 int8_t LTC2945_read_16_bits(uint8_t i2c_address, //!< Register address for the LTC2945
odtulumbedder 0:6be57f391716 404 uint8_t adc_command, //!< The "command byte" for the LTC2945
odtulumbedder 0:6be57f391716 405 uint16_t *adc_code //!< Value that will be read from the register.
odtulumbedder 0:6be57f391716 406 );
odtulumbedder 0:6be57f391716 407 //! Reads a 24-bit adc_code from LTC2945
odtulumbedder 0:6be57f391716 408 //! @return The function returns the state of the acknowledge bit after the I2C address write. 0=acknowledge, 1=no acknowledge.
odtulumbedder 0:6be57f391716 409 int8_t LTC2945_read_24_bits(uint8_t i2c_address, //!< Register address for the LTC2945
odtulumbedder 0:6be57f391716 410 uint8_t adc_command, //!< The "command byte" for the LTC2945
odtulumbedder 0:6be57f391716 411 int32_t *adc_code //!< Value that will be read from the register.
odtulumbedder 0:6be57f391716 412 );
odtulumbedder 0:6be57f391716 413 //! Calculate the LTC2945 VIN voltage
odtulumbedder 0:6be57f391716 414 //! @return Returns the VIN Voltage in Volts
odtulumbedder 0:6be57f391716 415 float LTC2945_VIN_code_to_voltage(uint16_t adc_code, //!< The ADC value
odtulumbedder 0:6be57f391716 416 float LTC2945_VIN_lsb //!< VIN lsb weight
odtulumbedder 0:6be57f391716 417 );
odtulumbedder 0:6be57f391716 418 //! Calculate the LTC2945 ADIN voltage
odtulumbedder 0:6be57f391716 419 //! @return Returns the ADIN Voltage in Volts
odtulumbedder 0:6be57f391716 420 float LTC2945_ADIN_code_to_voltage(uint16_t adc_code, //!< The ADC value
odtulumbedder 0:6be57f391716 421 float LTC2945_ADIN_lsb //!< ADIN lsb weight
odtulumbedder 0:6be57f391716 422 );
odtulumbedder 0:6be57f391716 423 //! Calculate the LTC2945 current with a sense resistor
odtulumbedder 0:6be57f391716 424 //! @return The LTC2945 current
odtulumbedder 0:6be57f391716 425 float LTC2945_code_to_current(uint16_t adc_code, //!< The ADC value
odtulumbedder 0:6be57f391716 426 float resistor, //!< The resistor value
odtulumbedder 0:6be57f391716 427 float LTC2945_DELTA_SENSE_lsb //!< Delta sense lsb weight
odtulumbedder 0:6be57f391716 428 );
odtulumbedder 0:6be57f391716 429 //! Calculate the LTC2945 power
odtulumbedder 0:6be57f391716 430 //! @return The LTC2945 power
odtulumbedder 0:6be57f391716 431 float LTC2945_code_to_power(int32_t adc_code, //!< The ADC value
odtulumbedder 0:6be57f391716 432 float resistor, //!< The resistor value
odtulumbedder 0:6be57f391716 433 float LTC2945_Power_lsb //!< Power lsb weight
odtulumbedder 0:6be57f391716 434 );
odtulumbedder 0:6be57f391716 435 //! Calculate the LTC2945 power with the ADIN
odtulumbedder 0:6be57f391716 436 //! @return The LTC2945 power with the ADIN
odtulumbedder 0:6be57f391716 437 float LTC2945_code_to_ADIN_power(int32_t adc_code, //!< The ADC value
odtulumbedder 0:6be57f391716 438 float resistor, //!< The resistor value
odtulumbedder 0:6be57f391716 439 float LTC2945_ADIN_DELTA_SENSE_lsb //!< Power lsb weight
odtulumbedder 0:6be57f391716 440 );
odtulumbedder 0:6be57f391716 441
odtulumbedder 0:6be57f391716 442 #endif // LTC2945_H