A feature complete driver for the MAX17048 lithium fuel gauge from Maxim.
Dependents: MAX17048_HelloWorld ECGAFE_copy MAX17048_HelloWorld Orion_newPCB_test_LV ... more
Now fully tested!
MAX17048.h@4:e61b2723d2cf, 2013-09-16 (annotated)
- Committer:
- neilt6
- Date:
- Mon Sep 16 22:02:40 2013 +0000
- Revision:
- 4:e61b2723d2cf
- Parent:
- 3:32087cca331f
- Child:
- 5:ffce4fe12ed1
Added new function for reading the state of charge measurement as an integer, added float and int operator overrides for state of charge measurements, improved example
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
neilt6 | 0:abc480f8eeab | 1 | /* MAX17048 Driver Library |
neilt6 | 0:abc480f8eeab | 2 | * Copyright (c) 2013 Neil Thiessen |
neilt6 | 0:abc480f8eeab | 3 | * |
neilt6 | 0:abc480f8eeab | 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
neilt6 | 0:abc480f8eeab | 5 | * you may not use this file except in compliance with the License. |
neilt6 | 0:abc480f8eeab | 6 | * You may obtain a copy of the License at |
neilt6 | 0:abc480f8eeab | 7 | * |
neilt6 | 0:abc480f8eeab | 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
neilt6 | 0:abc480f8eeab | 9 | * |
neilt6 | 0:abc480f8eeab | 10 | * Unless required by applicable law or agreed to in writing, software |
neilt6 | 0:abc480f8eeab | 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
neilt6 | 0:abc480f8eeab | 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
neilt6 | 0:abc480f8eeab | 13 | * See the License for the specific language governing permissions and |
neilt6 | 0:abc480f8eeab | 14 | * limitations under the License. |
neilt6 | 0:abc480f8eeab | 15 | */ |
neilt6 | 0:abc480f8eeab | 16 | |
neilt6 | 0:abc480f8eeab | 17 | #ifndef MAX17048_H |
neilt6 | 0:abc480f8eeab | 18 | #define MAX17048_H |
neilt6 | 0:abc480f8eeab | 19 | |
neilt6 | 0:abc480f8eeab | 20 | #include "mbed.h" |
neilt6 | 0:abc480f8eeab | 21 | |
neilt6 | 0:abc480f8eeab | 22 | /** MAX17048 class. |
neilt6 | 0:abc480f8eeab | 23 | * Used for controlling a MAX17048 fuel gauge connected via I2C. |
neilt6 | 0:abc480f8eeab | 24 | * |
neilt6 | 0:abc480f8eeab | 25 | * Example: |
neilt6 | 0:abc480f8eeab | 26 | * @code |
neilt6 | 0:abc480f8eeab | 27 | * #include "mbed.h" |
neilt6 | 0:abc480f8eeab | 28 | * #include "MAX17048.h" |
neilt6 | 0:abc480f8eeab | 29 | * |
neilt6 | 0:abc480f8eeab | 30 | * MAX17048 gauge(p28, p27); |
neilt6 | 0:abc480f8eeab | 31 | * |
neilt6 | 3:32087cca331f | 32 | * int main() |
neilt6 | 3:32087cca331f | 33 | * { |
neilt6 | 3:32087cca331f | 34 | * //Try to open the MAX17048 |
neilt6 | 3:32087cca331f | 35 | * if (gauge.open()) { |
neilt6 | 3:32087cca331f | 36 | * printf("Device detected!\n"); |
neilt6 | 0:abc480f8eeab | 37 | * |
neilt6 | 3:32087cca331f | 38 | * while (1) { |
neilt6 | 4:e61b2723d2cf | 39 | * //Print the current state of charge |
neilt6 | 4:e61b2723d2cf | 40 | * printf("SOC = %f%%\n", (float)gauge); |
neilt6 | 3:32087cca331f | 41 | * |
neilt6 | 3:32087cca331f | 42 | * //Sleep for 0.5 seconds |
neilt6 | 3:32087cca331f | 43 | * wait(0.5); |
neilt6 | 3:32087cca331f | 44 | * } |
neilt6 | 3:32087cca331f | 45 | * } else { |
neilt6 | 4:e61b2723d2cf | 46 | * error("Device not detected!\n"); |
neilt6 | 0:abc480f8eeab | 47 | * } |
neilt6 | 0:abc480f8eeab | 48 | * } |
neilt6 | 0:abc480f8eeab | 49 | * @endcode |
neilt6 | 0:abc480f8eeab | 50 | */ |
neilt6 | 0:abc480f8eeab | 51 | class MAX17048 |
neilt6 | 0:abc480f8eeab | 52 | { |
neilt6 | 0:abc480f8eeab | 53 | public: |
neilt6 | 0:abc480f8eeab | 54 | /** Represents the different alert flags for the MAX17048 |
neilt6 | 0:abc480f8eeab | 55 | */ |
neilt6 | 0:abc480f8eeab | 56 | enum AlertFlags { |
neilt6 | 0:abc480f8eeab | 57 | ALERT_RI = (1 << 0), /**< Reset indicator */ |
neilt6 | 0:abc480f8eeab | 58 | ALERT_VH = (1 << 1), /**< Voltage high alert */ |
neilt6 | 0:abc480f8eeab | 59 | ALERT_VL = (1 << 2), /**< Voltage low alert */ |
neilt6 | 0:abc480f8eeab | 60 | ALERT_VR = (1 << 3), /**< Voltage reset alert */ |
neilt6 | 0:abc480f8eeab | 61 | ALERT_HD = (1 << 4), /**< SOC low alert */ |
neilt6 | 0:abc480f8eeab | 62 | ALERT_SC = (1 << 5) /**< SOC change alert */ |
neilt6 | 0:abc480f8eeab | 63 | }; |
neilt6 | 0:abc480f8eeab | 64 | |
neilt6 | 0:abc480f8eeab | 65 | /** Create a MAX17048 object connected to the specified I2C pins |
neilt6 | 0:abc480f8eeab | 66 | * |
neilt6 | 1:734b1a089a9c | 67 | * @param sda The I2C data pin. |
neilt6 | 1:734b1a089a9c | 68 | * @param scl The I2C clock pin. |
neilt6 | 0:abc480f8eeab | 69 | */ |
neilt6 | 0:abc480f8eeab | 70 | MAX17048(PinName sda, PinName scl); |
neilt6 | 0:abc480f8eeab | 71 | |
neilt6 | 3:32087cca331f | 72 | /** Probe for the MAX17048 and load the default RCOMP value if present |
neilt6 | 3:32087cca331f | 73 | * |
neilt6 | 3:32087cca331f | 74 | * @returns |
neilt6 | 3:32087cca331f | 75 | * 'true' if the device exists on the bus, |
neilt6 | 3:32087cca331f | 76 | * 'false' if the device doesn't exist on the bus. |
neilt6 | 3:32087cca331f | 77 | */ |
neilt6 | 3:32087cca331f | 78 | bool open(void); |
neilt6 | 3:32087cca331f | 79 | |
neilt6 | 0:abc480f8eeab | 80 | /** Command the MAX17048 to perform a power-on reset |
neilt6 | 0:abc480f8eeab | 81 | */ |
neilt6 | 0:abc480f8eeab | 82 | void reset(void); |
neilt6 | 0:abc480f8eeab | 83 | |
neilt6 | 0:abc480f8eeab | 84 | /** Command the MAX17048 to perform a QuickStart |
neilt6 | 0:abc480f8eeab | 85 | */ |
neilt6 | 0:abc480f8eeab | 86 | void quickStart(void); |
neilt6 | 0:abc480f8eeab | 87 | |
neilt6 | 0:abc480f8eeab | 88 | /** Determine whether sleep mode is enabled on the MAX17048 |
neilt6 | 0:abc480f8eeab | 89 | * |
neilt6 | 0:abc480f8eeab | 90 | * @returns |
neilt6 | 0:abc480f8eeab | 91 | * 'true' if sleep mode is enabled, |
neilt6 | 0:abc480f8eeab | 92 | * 'false' if sleep mode is disabled. |
neilt6 | 0:abc480f8eeab | 93 | */ |
neilt6 | 2:0a98e081b48c | 94 | bool sleepEnabled(void); |
neilt6 | 0:abc480f8eeab | 95 | |
neilt6 | 0:abc480f8eeab | 96 | /** Enable or disable sleep mode on the MAX17048 |
neilt6 | 0:abc480f8eeab | 97 | * |
neilt6 | 0:abc480f8eeab | 98 | * @param enabled Whether or not sleep mode is enabled. |
neilt6 | 0:abc480f8eeab | 99 | */ |
neilt6 | 2:0a98e081b48c | 100 | void sleepEnabled(bool enabled); |
neilt6 | 2:0a98e081b48c | 101 | |
neilt6 | 0:abc480f8eeab | 102 | /** Determine whether or not the MAX17048 is hibernating |
neilt6 | 0:abc480f8eeab | 103 | * |
neilt6 | 0:abc480f8eeab | 104 | * @returns |
neilt6 | 0:abc480f8eeab | 105 | * 'true' if hibernating, |
neilt6 | 0:abc480f8eeab | 106 | * 'false' if not hibernating. |
neilt6 | 0:abc480f8eeab | 107 | */ |
neilt6 | 2:0a98e081b48c | 108 | bool hibernating(void); |
neilt6 | 2:0a98e081b48c | 109 | |
neilt6 | 0:abc480f8eeab | 110 | /** Get the current hibernate threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 111 | * |
neilt6 | 0:abc480f8eeab | 112 | * @returns The current hibernate threshold in \%/hr. |
neilt6 | 0:abc480f8eeab | 113 | */ |
neilt6 | 2:0a98e081b48c | 114 | float hibernateThreshold(void); |
neilt6 | 2:0a98e081b48c | 115 | |
neilt6 | 0:abc480f8eeab | 116 | /** Set the hibernate threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 117 | * |
neilt6 | 0:abc480f8eeab | 118 | * @param threshold The new hibernate threshold in \%/hr. |
neilt6 | 0:abc480f8eeab | 119 | */ |
neilt6 | 2:0a98e081b48c | 120 | void hibernateThreshold(float threshold); |
neilt6 | 2:0a98e081b48c | 121 | |
neilt6 | 0:abc480f8eeab | 122 | /** Get the current active threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 123 | * |
neilt6 | 0:abc480f8eeab | 124 | * @returns The current active threshold in volts. |
neilt6 | 0:abc480f8eeab | 125 | */ |
neilt6 | 2:0a98e081b48c | 126 | float activeThreshold(void); |
neilt6 | 2:0a98e081b48c | 127 | |
neilt6 | 0:abc480f8eeab | 128 | /** Set the active threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 129 | * |
neilt6 | 0:abc480f8eeab | 130 | * @param threshold The new active threshold in volts. |
neilt6 | 0:abc480f8eeab | 131 | */ |
neilt6 | 2:0a98e081b48c | 132 | void activeThreshold(float threshold); |
neilt6 | 2:0a98e081b48c | 133 | |
neilt6 | 0:abc480f8eeab | 134 | /** Get the production version of the MAX17048 |
neilt6 | 0:abc480f8eeab | 135 | * |
neilt6 | 0:abc480f8eeab | 136 | * @returns The 16-bit production version. |
neilt6 | 0:abc480f8eeab | 137 | */ |
neilt6 | 2:0a98e081b48c | 138 | unsigned short version(void); |
neilt6 | 2:0a98e081b48c | 139 | |
neilt6 | 0:abc480f8eeab | 140 | /** Set the cell temperature compensation of the MAX17048 |
neilt6 | 0:abc480f8eeab | 141 | * |
neilt6 | 0:abc480f8eeab | 142 | * @param temp The current cell temperature in °C. |
neilt6 | 0:abc480f8eeab | 143 | */ |
neilt6 | 2:0a98e081b48c | 144 | void tempCompensation(float temp); |
neilt6 | 2:0a98e081b48c | 145 | |
neilt6 | 0:abc480f8eeab | 146 | /** Determine whether or not the MAX17048 is in sleep mode |
neilt6 | 0:abc480f8eeab | 147 | * |
neilt6 | 0:abc480f8eeab | 148 | * @returns |
neilt6 | 0:abc480f8eeab | 149 | * 'true' if in sleep mode, |
neilt6 | 0:abc480f8eeab | 150 | * 'false' if not in sleep mode. |
neilt6 | 0:abc480f8eeab | 151 | */ |
neilt6 | 2:0a98e081b48c | 152 | bool sleeping(void); |
neilt6 | 2:0a98e081b48c | 153 | |
neilt6 | 0:abc480f8eeab | 154 | /** Enter or exit sleep mode on the MAX17048 (sleep mode must be enabled first) |
neilt6 | 0:abc480f8eeab | 155 | * |
neilt6 | 0:abc480f8eeab | 156 | * @param sleep Whether or not to sleep. |
neilt6 | 0:abc480f8eeab | 157 | */ |
neilt6 | 2:0a98e081b48c | 158 | void sleep(bool sleep); |
neilt6 | 2:0a98e081b48c | 159 | |
neilt6 | 0:abc480f8eeab | 160 | /** Determine whether or not the SOC 1% change alert is enabled on the MAX17048 |
neilt6 | 0:abc480f8eeab | 161 | * |
neilt6 | 0:abc480f8eeab | 162 | * @returns |
neilt6 | 0:abc480f8eeab | 163 | * 'true' if enabled, |
neilt6 | 0:abc480f8eeab | 164 | * 'false' if not enabled. |
neilt6 | 0:abc480f8eeab | 165 | */ |
neilt6 | 2:0a98e081b48c | 166 | bool socChangeAlertEnabled(void); |
neilt6 | 2:0a98e081b48c | 167 | |
neilt6 | 0:abc480f8eeab | 168 | /** Enable or disable the SOC 1% change alert on the MAX17048 |
neilt6 | 0:abc480f8eeab | 169 | * |
neilt6 | 0:abc480f8eeab | 170 | * @param enabled Whether or the SOC 1% change alert is enabled. |
neilt6 | 0:abc480f8eeab | 171 | */ |
neilt6 | 2:0a98e081b48c | 172 | void socChangeAlertEnabled(bool enabled); |
neilt6 | 2:0a98e081b48c | 173 | |
neilt6 | 0:abc480f8eeab | 174 | /** Determine whether or not the MAX17048 is asserting the ALRT pin |
neilt6 | 0:abc480f8eeab | 175 | * |
neilt6 | 0:abc480f8eeab | 176 | * @returns |
neilt6 | 0:abc480f8eeab | 177 | * 'true' if alerting, |
neilt6 | 0:abc480f8eeab | 178 | * 'false' if not alerting. |
neilt6 | 0:abc480f8eeab | 179 | */ |
neilt6 | 2:0a98e081b48c | 180 | bool alerting(void); |
neilt6 | 2:0a98e081b48c | 181 | |
neilt6 | 0:abc480f8eeab | 182 | /** Command the MAX17048 to de-assert the ALRT pin |
neilt6 | 0:abc480f8eeab | 183 | */ |
neilt6 | 0:abc480f8eeab | 184 | void clearAlert(void); |
neilt6 | 2:0a98e081b48c | 185 | |
neilt6 | 0:abc480f8eeab | 186 | /** Get the current SOC empty alert threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 187 | * |
neilt6 | 0:abc480f8eeab | 188 | * @returns The current SOC empty alert threshold in %. |
neilt6 | 0:abc480f8eeab | 189 | */ |
neilt6 | 2:0a98e081b48c | 190 | char emptyAlertThreshold(void); |
neilt6 | 2:0a98e081b48c | 191 | |
neilt6 | 0:abc480f8eeab | 192 | /** Set the SOC empty alert threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 193 | * |
neilt6 | 0:abc480f8eeab | 194 | * @param threshold The new SOC empty alert threshold in %. |
neilt6 | 0:abc480f8eeab | 195 | */ |
neilt6 | 2:0a98e081b48c | 196 | void emptyAlertThreshold(char threshold); |
neilt6 | 2:0a98e081b48c | 197 | |
neilt6 | 0:abc480f8eeab | 198 | /** Get the current low voltage alert threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 199 | * |
neilt6 | 0:abc480f8eeab | 200 | * @returns The current low voltage alert threshold in volts. |
neilt6 | 0:abc480f8eeab | 201 | */ |
neilt6 | 2:0a98e081b48c | 202 | float vAlertMinThreshold(void); |
neilt6 | 2:0a98e081b48c | 203 | |
neilt6 | 0:abc480f8eeab | 204 | /** Set the low voltage alert threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 205 | * |
neilt6 | 0:abc480f8eeab | 206 | * @param threshold The new low voltage alert threshold in volts. |
neilt6 | 0:abc480f8eeab | 207 | */ |
neilt6 | 2:0a98e081b48c | 208 | void vAlertMinThreshold(float threshold); |
neilt6 | 2:0a98e081b48c | 209 | |
neilt6 | 0:abc480f8eeab | 210 | /** Get the current high voltage alert threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 211 | * |
neilt6 | 0:abc480f8eeab | 212 | * @returns The current high voltage alert threshold in volts. |
neilt6 | 0:abc480f8eeab | 213 | */ |
neilt6 | 2:0a98e081b48c | 214 | float vAlertMaxThreshold(void); |
neilt6 | 2:0a98e081b48c | 215 | |
neilt6 | 0:abc480f8eeab | 216 | /** Set the high voltage alert threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 217 | * |
neilt6 | 0:abc480f8eeab | 218 | * @param threshold The new high voltage alert threshold in volts. |
neilt6 | 0:abc480f8eeab | 219 | */ |
neilt6 | 2:0a98e081b48c | 220 | void vAlertMaxThreshold(float threshold); |
neilt6 | 2:0a98e081b48c | 221 | |
neilt6 | 0:abc480f8eeab | 222 | /** Get the current reset voltage threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 223 | * |
neilt6 | 0:abc480f8eeab | 224 | * @returns The current reset voltage threshold in volts. |
neilt6 | 0:abc480f8eeab | 225 | */ |
neilt6 | 2:0a98e081b48c | 226 | float vResetThreshold(void); |
neilt6 | 2:0a98e081b48c | 227 | |
neilt6 | 0:abc480f8eeab | 228 | /** Set the reset voltage threshold of the MAX17048 |
neilt6 | 0:abc480f8eeab | 229 | * |
neilt6 | 0:abc480f8eeab | 230 | * @param threshold The new reset voltage threshold in volts. |
neilt6 | 0:abc480f8eeab | 231 | */ |
neilt6 | 2:0a98e081b48c | 232 | void vResetThreshold(float threshold); |
neilt6 | 2:0a98e081b48c | 233 | |
neilt6 | 0:abc480f8eeab | 234 | /** Determine whether or not the reset voltage comparator is enabled on the MAX17048 |
neilt6 | 0:abc480f8eeab | 235 | * |
neilt6 | 0:abc480f8eeab | 236 | * @returns |
neilt6 | 0:abc480f8eeab | 237 | * 'true' if enabled, |
neilt6 | 0:abc480f8eeab | 238 | * 'false' if not enabled. |
neilt6 | 0:abc480f8eeab | 239 | */ |
neilt6 | 2:0a98e081b48c | 240 | bool comparatorEnabled(void); |
neilt6 | 2:0a98e081b48c | 241 | |
neilt6 | 0:abc480f8eeab | 242 | /** Enable or disable the reset voltage comparator on the MAX17048 |
neilt6 | 0:abc480f8eeab | 243 | * |
neilt6 | 0:abc480f8eeab | 244 | * @param enabled Whether or not the reset voltage comparator is enabled. |
neilt6 | 0:abc480f8eeab | 245 | */ |
neilt6 | 2:0a98e081b48c | 246 | void comparatorEnabled(bool enabled); |
neilt6 | 2:0a98e081b48c | 247 | |
neilt6 | 0:abc480f8eeab | 248 | /** Get the factory programmed 8-bit ID of the MAX17048 |
neilt6 | 0:abc480f8eeab | 249 | * |
neilt6 | 0:abc480f8eeab | 250 | * @returns The 8-bit ID. |
neilt6 | 0:abc480f8eeab | 251 | */ |
neilt6 | 2:0a98e081b48c | 252 | char id(void); |
neilt6 | 2:0a98e081b48c | 253 | |
neilt6 | 0:abc480f8eeab | 254 | /** Determine whether or not the voltage reset alert is enabled on the MAX17048 |
neilt6 | 0:abc480f8eeab | 255 | * |
neilt6 | 0:abc480f8eeab | 256 | * @returns |
neilt6 | 0:abc480f8eeab | 257 | * 'true' if enabled, |
neilt6 | 0:abc480f8eeab | 258 | * 'false' if not enabled. |
neilt6 | 0:abc480f8eeab | 259 | */ |
neilt6 | 2:0a98e081b48c | 260 | bool vResetAlertEnabled(void); |
neilt6 | 2:0a98e081b48c | 261 | |
neilt6 | 0:abc480f8eeab | 262 | /** Enable or disable the voltage reset alert on the MAX17048 |
neilt6 | 0:abc480f8eeab | 263 | * |
neilt6 | 0:abc480f8eeab | 264 | * @param enabled Whether or the voltage reset alert is enabled. |
neilt6 | 0:abc480f8eeab | 265 | */ |
neilt6 | 2:0a98e081b48c | 266 | void vResetAlertEnabled(bool enabled); |
neilt6 | 2:0a98e081b48c | 267 | |
neilt6 | 0:abc480f8eeab | 268 | /** Get the current alert flags on the MAX17048 |
neilt6 | 0:abc480f8eeab | 269 | * |
neilt6 | 0:abc480f8eeab | 270 | * @returns The current alert flags as AlertFlags enum values OR'd together. |
neilt6 | 0:abc480f8eeab | 271 | */ |
neilt6 | 2:0a98e081b48c | 272 | char alertFlags(void); |
neilt6 | 2:0a98e081b48c | 273 | |
neilt6 | 0:abc480f8eeab | 274 | /** Clear the specified alert flags on the MAX17048 |
neilt6 | 0:abc480f8eeab | 275 | * |
neilt6 | 0:abc480f8eeab | 276 | * @param flags The alert flags to clear as AlertFlags enum values OR'd together. |
neilt6 | 0:abc480f8eeab | 277 | */ |
neilt6 | 0:abc480f8eeab | 278 | void clearAlertFlags(char flags); |
neilt6 | 0:abc480f8eeab | 279 | |
neilt6 | 0:abc480f8eeab | 280 | /** Get the current cell voltage measurement of the MAX17048 |
neilt6 | 0:abc480f8eeab | 281 | * |
neilt6 | 0:abc480f8eeab | 282 | * @returns The cell voltage measurement as a float. |
neilt6 | 0:abc480f8eeab | 283 | */ |
neilt6 | 2:0a98e081b48c | 284 | float vcell(void); |
neilt6 | 0:abc480f8eeab | 285 | |
neilt6 | 4:e61b2723d2cf | 286 | /** Get the current state of charge measurement of the MAX17048 as a float |
neilt6 | 0:abc480f8eeab | 287 | * |
neilt6 | 0:abc480f8eeab | 288 | * @returns The state of charge measurement as a float. |
neilt6 | 0:abc480f8eeab | 289 | */ |
neilt6 | 2:0a98e081b48c | 290 | float soc(void); |
neilt6 | 0:abc480f8eeab | 291 | |
neilt6 | 4:e61b2723d2cf | 292 | /** Get the current state of charge measurement of the MAX17048 as an int |
neilt6 | 4:e61b2723d2cf | 293 | * |
neilt6 | 4:e61b2723d2cf | 294 | * @returns The state of charge measurement as an int. |
neilt6 | 4:e61b2723d2cf | 295 | */ |
neilt6 | 4:e61b2723d2cf | 296 | int socInt(void); |
neilt6 | 4:e61b2723d2cf | 297 | |
neilt6 | 0:abc480f8eeab | 298 | /** Get the current C rate measurement of the MAX17048 |
neilt6 | 0:abc480f8eeab | 299 | * |
neilt6 | 0:abc480f8eeab | 300 | * @returns The C rate measurement as a float. |
neilt6 | 0:abc480f8eeab | 301 | */ |
neilt6 | 2:0a98e081b48c | 302 | float crate(void); |
neilt6 | 0:abc480f8eeab | 303 | |
neilt6 | 4:e61b2723d2cf | 304 | #ifdef MBED_OPERATORS |
neilt6 | 4:e61b2723d2cf | 305 | /** A shorthand for soc() |
neilt6 | 4:e61b2723d2cf | 306 | * |
neilt6 | 4:e61b2723d2cf | 307 | * @returns The state of charge measurement as a float. |
neilt6 | 4:e61b2723d2cf | 308 | */ |
neilt6 | 4:e61b2723d2cf | 309 | operator float() { |
neilt6 | 4:e61b2723d2cf | 310 | return soc(); |
neilt6 | 4:e61b2723d2cf | 311 | } |
neilt6 | 4:e61b2723d2cf | 312 | |
neilt6 | 4:e61b2723d2cf | 313 | /** A shorthand for socInt() |
neilt6 | 4:e61b2723d2cf | 314 | * |
neilt6 | 4:e61b2723d2cf | 315 | * @returns The state of charge measurement as an int. |
neilt6 | 4:e61b2723d2cf | 316 | */ |
neilt6 | 4:e61b2723d2cf | 317 | operator int() { |
neilt6 | 4:e61b2723d2cf | 318 | return socInt(); |
neilt6 | 4:e61b2723d2cf | 319 | } |
neilt6 | 4:e61b2723d2cf | 320 | #endif |
neilt6 | 4:e61b2723d2cf | 321 | |
neilt6 | 0:abc480f8eeab | 322 | private: |
neilt6 | 2:0a98e081b48c | 323 | //I2C register addresses |
neilt6 | 2:0a98e081b48c | 324 | enum Register { |
neilt6 | 2:0a98e081b48c | 325 | REG_VCELL = 0x02, |
neilt6 | 2:0a98e081b48c | 326 | REG_SOC = 0x04, |
neilt6 | 2:0a98e081b48c | 327 | REG_MODE = 0x06, |
neilt6 | 2:0a98e081b48c | 328 | REG_VERSION = 0x08, |
neilt6 | 2:0a98e081b48c | 329 | REG_HIBRT = 0x0A, |
neilt6 | 2:0a98e081b48c | 330 | REG_CONFIG = 0x0C, |
neilt6 | 2:0a98e081b48c | 331 | REG_VALRT = 0x14, |
neilt6 | 2:0a98e081b48c | 332 | REG_CRATE = 0x16, |
neilt6 | 2:0a98e081b48c | 333 | REG_VRESET_ID = 0x18, |
neilt6 | 2:0a98e081b48c | 334 | REG_STATUS = 0x1A, |
neilt6 | 2:0a98e081b48c | 335 | REG_TABLE = 0x40, |
neilt6 | 2:0a98e081b48c | 336 | REG_CMD = 0xFE |
neilt6 | 2:0a98e081b48c | 337 | }; |
neilt6 | 2:0a98e081b48c | 338 | |
neilt6 | 2:0a98e081b48c | 339 | //Member constants |
neilt6 | 2:0a98e081b48c | 340 | static const int m_ADDR = (0x36 << 1); |
neilt6 | 2:0a98e081b48c | 341 | static const int m_RCOMP0 = 0x97; |
neilt6 | 2:0a98e081b48c | 342 | |
neilt6 | 2:0a98e081b48c | 343 | //Member variables |
neilt6 | 2:0a98e081b48c | 344 | I2C m_I2C; |
neilt6 | 2:0a98e081b48c | 345 | |
neilt6 | 2:0a98e081b48c | 346 | //Internal functions |
neilt6 | 2:0a98e081b48c | 347 | unsigned short read(char reg); |
neilt6 | 2:0a98e081b48c | 348 | void write(char reg, unsigned short data); |
neilt6 | 2:0a98e081b48c | 349 | void writeRCOMP(char rcomp); |
neilt6 | 0:abc480f8eeab | 350 | }; |
neilt6 | 0:abc480f8eeab | 351 | |
neilt6 | 0:abc480f8eeab | 352 | #endif |