Library to interface Lineair LTC2990 battery monitor.

Committer:
gizmo69the2nd
Date:
Wed Aug 07 19:55:21 2013 +0000
Revision:
0:8cb0dbc1b2ba
Library to interface Lineair LTC2990 battery monitor.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
gizmo69the2nd 0:8cb0dbc1b2ba 1 /*
gizmo69the2nd 0:8cb0dbc1b2ba 2 * LTC2990 voltage/temprature monitor library
gizmo69the2nd 0:8cb0dbc1b2ba 3 *
gizmo69the2nd 0:8cb0dbc1b2ba 4 *
gizmo69the2nd 0:8cb0dbc1b2ba 5 * Copyright (c) 2013 Davy Van Belle, MIT License
gizmo69the2nd 0:8cb0dbc1b2ba 6 *
gizmo69the2nd 0:8cb0dbc1b2ba 7 * Permission is hereby granted, free of charge, to any person obtaining a copy of this software
gizmo69the2nd 0:8cb0dbc1b2ba 8 * and associated documentation files (the "Software"), to deal in the Software without restriction,
gizmo69the2nd 0:8cb0dbc1b2ba 9 * including without limitation the rights to use, copy, modify, merge, publish, distribute,
gizmo69the2nd 0:8cb0dbc1b2ba 10 * sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is
gizmo69the2nd 0:8cb0dbc1b2ba 11 * furnished to do so, subject to the following conditions:
gizmo69the2nd 0:8cb0dbc1b2ba 12 *
gizmo69the2nd 0:8cb0dbc1b2ba 13 * The above copyright notice and this permission notice shall be included in all copies or
gizmo69the2nd 0:8cb0dbc1b2ba 14 * substantial portions of the Software.
gizmo69the2nd 0:8cb0dbc1b2ba 15 *
gizmo69the2nd 0:8cb0dbc1b2ba 16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING
gizmo69the2nd 0:8cb0dbc1b2ba 17 * BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
gizmo69the2nd 0:8cb0dbc1b2ba 18 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
gizmo69the2nd 0:8cb0dbc1b2ba 19 * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
gizmo69the2nd 0:8cb0dbc1b2ba 20 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
gizmo69the2nd 0:8cb0dbc1b2ba 21 */
gizmo69the2nd 0:8cb0dbc1b2ba 22
gizmo69the2nd 0:8cb0dbc1b2ba 23 /** @file
gizmo69the2nd 0:8cb0dbc1b2ba 24 * @brief LTC29990 I2C
gizmo69the2nd 0:8cb0dbc1b2ba 25 */
gizmo69the2nd 0:8cb0dbc1b2ba 26
gizmo69the2nd 0:8cb0dbc1b2ba 27 #ifndef LTC2990_H
gizmo69the2nd 0:8cb0dbc1b2ba 28 #define LTC2990_H
gizmo69the2nd 0:8cb0dbc1b2ba 29
gizmo69the2nd 0:8cb0dbc1b2ba 30 #include "mbed.h"
gizmo69the2nd 0:8cb0dbc1b2ba 31
gizmo69the2nd 0:8cb0dbc1b2ba 32 #define STATUS 0x00
gizmo69the2nd 0:8cb0dbc1b2ba 33 #define CONTROL 0x01
gizmo69the2nd 0:8cb0dbc1b2ba 34 #define TRIGGER 0x02
gizmo69the2nd 0:8cb0dbc1b2ba 35
gizmo69the2nd 0:8cb0dbc1b2ba 36 #define TINT_MSB 0x04
gizmo69the2nd 0:8cb0dbc1b2ba 37 #define TINT_LSB 0x05
gizmo69the2nd 0:8cb0dbc1b2ba 38
gizmo69the2nd 0:8cb0dbc1b2ba 39 #define V1_MSB 0x06
gizmo69the2nd 0:8cb0dbc1b2ba 40 #define V1_LSB 0x07
gizmo69the2nd 0:8cb0dbc1b2ba 41
gizmo69the2nd 0:8cb0dbc1b2ba 42 #define V2_MSB 0x08
gizmo69the2nd 0:8cb0dbc1b2ba 43 #define V2_LSB 0x09
gizmo69the2nd 0:8cb0dbc1b2ba 44
gizmo69the2nd 0:8cb0dbc1b2ba 45 #define V3_MSB 0x0A
gizmo69the2nd 0:8cb0dbc1b2ba 46 #define V3_LSB 0x0B
gizmo69the2nd 0:8cb0dbc1b2ba 47
gizmo69the2nd 0:8cb0dbc1b2ba 48 #define V4_MSB 0x0C
gizmo69the2nd 0:8cb0dbc1b2ba 49 #define V4_LSB 0x0D
gizmo69the2nd 0:8cb0dbc1b2ba 50
gizmo69the2nd 0:8cb0dbc1b2ba 51 #define VCC_MSB 0x0E
gizmo69the2nd 0:8cb0dbc1b2ba 52 #define VCC_LSB 0x0F
gizmo69the2nd 0:8cb0dbc1b2ba 53
gizmo69the2nd 0:8cb0dbc1b2ba 54 #define SINGLE 0.00030518 //LSB factor for single ended measurments (305.18µV)
gizmo69the2nd 0:8cb0dbc1b2ba 55 #define DIFF 0.00001942 //LSB factor for differential measurments (19.42µV)
gizmo69the2nd 0:8cb0dbc1b2ba 56
gizmo69the2nd 0:8cb0dbc1b2ba 57
gizmo69the2nd 0:8cb0dbc1b2ba 58 enum T_SOURCE {
gizmo69the2nd 0:8cb0dbc1b2ba 59 INT,
gizmo69the2nd 0:8cb0dbc1b2ba 60 TR1,
gizmo69the2nd 0:8cb0dbc1b2ba 61 TR2,
gizmo69the2nd 0:8cb0dbc1b2ba 62 };
gizmo69the2nd 0:8cb0dbc1b2ba 63
gizmo69the2nd 0:8cb0dbc1b2ba 64 enum V_SOURCE {
gizmo69the2nd 0:8cb0dbc1b2ba 65 V1,
gizmo69the2nd 0:8cb0dbc1b2ba 66 V2,
gizmo69the2nd 0:8cb0dbc1b2ba 67 V3,
gizmo69the2nd 0:8cb0dbc1b2ba 68 V4,
gizmo69the2nd 0:8cb0dbc1b2ba 69 VCC,
gizmo69the2nd 0:8cb0dbc1b2ba 70 V1_V2,
gizmo69the2nd 0:8cb0dbc1b2ba 71 V3_V4,
gizmo69the2nd 0:8cb0dbc1b2ba 72 };
gizmo69the2nd 0:8cb0dbc1b2ba 73
gizmo69the2nd 0:8cb0dbc1b2ba 74
gizmo69the2nd 0:8cb0dbc1b2ba 75 /** LTC2990 class
gizmo69the2nd 0:8cb0dbc1b2ba 76 */
gizmo69the2nd 0:8cb0dbc1b2ba 77 class LTC2990 {
gizmo69the2nd 0:8cb0dbc1b2ba 78 public:
gizmo69the2nd 0:8cb0dbc1b2ba 79 /** init LTC2990 class
gizmo69the2nd 0:8cb0dbc1b2ba 80 * @param *i2c pointer to I2C serial interface
gizmo69the2nd 0:8cb0dbc1b2ba 81 * @param addr sensor I2C address
gizmo69the2nd 0:8cb0dbc1b2ba 82 */
gizmo69the2nd 0:8cb0dbc1b2ba 83 LTC2990 (I2C* i2c, char addr);
gizmo69the2nd 0:8cb0dbc1b2ba 84
gizmo69the2nd 0:8cb0dbc1b2ba 85 /** Initiate the device
gizmo69the2nd 0:8cb0dbc1b2ba 86 * @param control desired control register bits
gizmo69the2nd 0:8cb0dbc1b2ba 87 */
gizmo69the2nd 0:8cb0dbc1b2ba 88 void init (char control);
gizmo69the2nd 0:8cb0dbc1b2ba 89
gizmo69the2nd 0:8cb0dbc1b2ba 90 /** Get device STATUS register
gizmo69the2nd 0:8cb0dbc1b2ba 91 */
gizmo69the2nd 0:8cb0dbc1b2ba 92 char status();
gizmo69the2nd 0:8cb0dbc1b2ba 93
gizmo69the2nd 0:8cb0dbc1b2ba 94 /** Start a conversion
gizmo69the2nd 0:8cb0dbc1b2ba 95 */
gizmo69the2nd 0:8cb0dbc1b2ba 96 void start();
gizmo69the2nd 0:8cb0dbc1b2ba 97
gizmo69the2nd 0:8cb0dbc1b2ba 98 /** Get temperature in °C or °K
gizmo69the2nd 0:8cb0dbc1b2ba 99 * @param source define which temperature to measure (INT, TR1, TR2)
gizmo69the2nd 0:8cb0dbc1b2ba 100 */
gizmo69the2nd 0:8cb0dbc1b2ba 101 float getTemperature(T_SOURCE source);
gizmo69the2nd 0:8cb0dbc1b2ba 102
gizmo69the2nd 0:8cb0dbc1b2ba 103 /** Get voltage
gizmo69the2nd 0:8cb0dbc1b2ba 104 * @param source define which voltage te measure (V1, V2, V3, V4, VCC, V1-V2, V3-V4)
gizmo69the2nd 0:8cb0dbc1b2ba 105 */
gizmo69the2nd 0:8cb0dbc1b2ba 106 float getVoltage(V_SOURCE source);
gizmo69the2nd 0:8cb0dbc1b2ba 107
gizmo69the2nd 0:8cb0dbc1b2ba 108 /**
gizmo69the2nd 0:8cb0dbc1b2ba 109 *@param *ack pointer to return succesfull acknowledgement
gizmo69the2nd 0:8cb0dbc1b2ba 110 *@return True: Converion in progress
gizmo69the2nd 0:8cb0dbc1b2ba 111 *@return False: Acquisition Cycle Complete
gizmo69the2nd 0:8cb0dbc1b2ba 112 */
gizmo69the2nd 0:8cb0dbc1b2ba 113 bool isBusy();
gizmo69the2nd 0:8cb0dbc1b2ba 114
gizmo69the2nd 0:8cb0dbc1b2ba 115 /**
gizmo69the2nd 0:8cb0dbc1b2ba 116 *@return True: Register contains new data
gizmo69the2nd 0:8cb0dbc1b2ba 117 *@return False: Register contains old data
gizmo69the2nd 0:8cb0dbc1b2ba 118 *@param source define which register to check (V1, V2, V3, V4, VCC, V1-V2, V3-V4)
gizmo69the2nd 0:8cb0dbc1b2ba 119 */
gizmo69the2nd 0:8cb0dbc1b2ba 120 bool isReady(V_SOURCE source);
gizmo69the2nd 0:8cb0dbc1b2ba 121
gizmo69the2nd 0:8cb0dbc1b2ba 122 /**
gizmo69the2nd 0:8cb0dbc1b2ba 123 $@return True: Register contains new data
gizmo69the2nd 0:8cb0dbc1b2ba 124 *@return False: Register contains old data
gizmo69the2nd 0:8cb0dbc1b2ba 125 *@param source define which register to check (INT, TR1, TR2)
gizmo69the2nd 0:8cb0dbc1b2ba 126 */
gizmo69the2nd 0:8cb0dbc1b2ba 127 bool isReady(T_SOURCE source);
gizmo69the2nd 0:8cb0dbc1b2ba 128
gizmo69the2nd 0:8cb0dbc1b2ba 129 protected:
gizmo69the2nd 0:8cb0dbc1b2ba 130
gizmo69the2nd 0:8cb0dbc1b2ba 131
gizmo69the2nd 0:8cb0dbc1b2ba 132 private:
gizmo69the2nd 0:8cb0dbc1b2ba 133 char _addr;
gizmo69the2nd 0:8cb0dbc1b2ba 134 I2C *_i2c;
gizmo69the2nd 0:8cb0dbc1b2ba 135
gizmo69the2nd 0:8cb0dbc1b2ba 136 };
gizmo69the2nd 0:8cb0dbc1b2ba 137
gizmo69the2nd 0:8cb0dbc1b2ba 138 #endif