Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
LTC294X.h
00001 #ifndef LTC294X_H 00002 #define LTC294X_H 00003 00004 #include "mbed.h" 00005 00006 #define LTC_CONSOLE_OUTOUT 1 /* Set this if you need debug messages on the console; */ 00007 /* it will have an impact on code-size and power consumption. */ 00008 00009 #if LTC_CONSOLE_OUTOUT 00010 //Serial usb(USBTX, USBRX); // tx, rx 00011 extern Serial pc; 00012 #define DEBUG(...) { pc.printf(__VA_ARGS__); } 00013 #else 00014 #define DEBUG(...) /* nothing */ 00015 #endif /* #if NEED_CONSOLE_OUTPUT */ 00016 00017 //gets a bit position by shifting 1 00018 #define _BV(x) (1 << x) 00019 00020 // sbi sets a particular bit and cbi clears the bit (target byte-word, bit position) 00021 #define sbi(y,x); y|=_BV(x) 00022 #define cbi(y,x); y&=~_BV(x) 00023 00024 00025 //BIT 7-6 ADC MODE SELECTOR 00026 #define ADC_AUTO 0x00 00027 #define ADC_VOLT 0x01 00028 #define ADC_TEMP 0x02 00029 #define ADC_SLEEP 0x03 00030 00031 //BIT 2-1 AL/CC MODE SELECTOR 00032 #define ALCC_ALERT 0x04 00033 #define ALCC_CCOMP 0x05 00034 #define ALCC_OFF 0x06 00035 00036 //STATUS REGISTER.. READ BIT VALUES ONLY 00037 #define CHIP_ID _BV(7) 00038 #define RESERVE _BV(6) 00039 #define CHARGE_OVUV_ALERT _BV(5) 00040 #define TEMPERATURE_ALERT _BV(4) 00041 #define CHARGE_HIGH_ALERT _BV(3) 00042 #define CHARGE_LOW_ALERT _BV(2) 00043 #define VOLT_ALERT _BV(1) 00044 #define UVLO_ALERT _BV(0) 00045 00046 00047 //prescaler options 00048 #define PRESCALE_128 7 00049 #define PRESCALE_64 6 00050 #define PRESCALE_32 5 00051 #define PRESCALE_16 4 00052 #define PRESCALE_8 3 00053 #define PRESCALE_4 2 00054 #define PRESCALE_2 1 00055 #define PRESCALE_1 0 00056 00057 //CONTROL REGISTER.. BIT LOCATIONS 00058 #define ADC_VOLT_MODE 7 00059 #define ADC_TEMP_MODE 6 00060 #define PRESCALER_2 5 00061 #define PRESCALER_1 4 00062 #define PRESCALER_0 3 00063 #define ALCC_ALERT_MODE 2 00064 #define ALCC_CHRGC_MODE 1 00065 #define IC_SHUTDOWN 0 00066 00067 //I2C REGISTER ADDRESSES 00068 #define REG_STATUS 0x00 // 00h A Status R See Below 00069 #define REG_CONTROL 0x01 // 01h B Control R/W 3Ch 00070 #define ACC_MSB 0x02 // 02h C Accumulated Charge MSB R/W 7Fh 00071 #define ACC_LSB 0x03 // 03h D Accumulated Charge LSB R/W FFh 00072 #define CHRG_THH_MSB 0x04 // 04h E Charge Threshold High MSB R/W FFh 00073 #define CHRG_THH_LSB 0x05 // 05h F Charge Threshold High LSB R/W FFh 00074 #define CHRG_THL_MSB 0x06 // 06h G Charge Threshold Low MSB R/W 00h 00075 #define CHRG_THL_LSB 0x07 // 07h H Charge Threshold Low LSB R/W 00h 00076 #define VOLT_MSB 0x08 // 08h I Voltage MSB R XXh 00077 #define VOLT_LSB 0x09 // 09h J Voltage LSB R XXh 00078 #define VOLT_THH 0x0A // 0Ah K Voltage Threshold High R/W FFh 00079 #define VOLT_THL 0x0B // 0Bh L Voltage Threshold Low R/W 00h 00080 #define TEMP_MSB 0x0C // 0Ch M Temperature MSB R XXh 00081 #define TEMP_LSB 0x0D // 0Dh N Temperature LSB R XXh 00082 #define TEMPERATURE_THH 0x0E // 0Eh O Temperature Threshold High R/W FFh 00083 #define TEMPERATURE_THL 0x0F // 0Fh P Temperature Threshold Low R/W 00h 00084 00085 00086 /** LTC29421 class. 00087 * interface LTC29421 coloumb counter on i2c port with interrupt, function name (and battery capacity in Ah Amp-hour). 00088 * 00089 * Example: 00090 * @code 00091 * #include "mbed.h" 00092 * #include "LTC29421.h" 00093 * 00094 * LTC29421 ltc(PTC9, PTC8, PTA4, &interrDOWN, 0.560); 00095 * 00096 * int main() { 00097 * float chLevel = ltc.accumulatedCharge(); 00098 * } 00099 * @endcode 00100 */ 00101 00102 class LTC29421{ 00103 public: 00104 /** create LTC29421 instance based on I2C, WARNING! use setPrescAndBattCap() to set Battery Capacity 00105 * 00106 * @param pin sda 00107 * @param pin scl 00108 * @param pin al/cc interrupt 00109 */ 00110 LTC29421(PinName, PinName, PinName, void (*interruptFunc)(void)); 00111 00112 /** create LTC29421 instance based on I2C, 00113 * this will computer internal M prescale value and set internal max charge level 00114 * 00115 * @param pin sda 00116 * @param pin scl 00117 * @param pin al/cc interrupt 00118 * @param float battery capacity in Ah (Amp-hour) 00119 */ 00120 LTC29421(PinName, PinName, PinName, void (*interruptFunc)(void), float); 00121 00122 00123 /** select an ADC measurement option for voltage / temperature 00124 * 00125 * @param ADC_x 00126 */ 00127 void setADCMode(int); 00128 00129 /** select a prescaler value (not required if object initialized with battery capacity 00130 * 00131 * @param PRESCALE_x 00132 */ 00133 void setPrescaler(int); 00134 00135 /** returns prescale value in integer 00136 * 00137 * @returns int prescale value 00138 */ 00139 int getPrescaler(); 00140 00141 /** configure the AL/CC interrupt: TODO works as Alarm only 00142 * 00143 * @param ALCC_x 00144 */ 00145 void configALCC(int); 00146 00147 /** shutsdown the analog section of LTC2942, also used to read accumulated charge registers 00148 * 00149 * @param none 00150 */ 00151 void shutdown(); 00152 00153 /** wakes the analog section of LTC2942 00154 * 00155 * @param none 00156 */ 00157 void wake(); 00158 00159 /** wakes the analog section of LTC2942 00160 * 00161 * @param none 00162 */ 00163 00164 /** amend the battery capacity, also computers prescaler M and adjusts internal Max battery capacity 00165 * 00166 * @param battery capacity in Ah (Amp-hour) 00167 */ 00168 void setPrescAndBattCap(float); 00169 00170 /** returns the 2 Byte accumulated charge register 00171 * 00172 * @return accumulated charge read as 2 byte hex value 00173 */ 00174 int accumulatedChargeReg(); 00175 00176 /** write into the 2 Byte accumulated charge register 00177 * 00178 * @param accumulated charge write as 2 byte hex value 00179 */ 00180 void accumulatedChargeReg(int); 00181 00182 /** reads the accumulated charge register as a percent value computed from max battery capacity 00183 * 00184 * @return accumulated charge read as percent 00185 */ 00186 float accumulatedCharge(); 00187 00188 /** writes the accumulated charge register as a percent value computed from max battery capacity 00189 * use this to initialise the battery capacity if known, 00190 * or set it to 50% or set it to 100% if battery capacity reaches max 00191 * 00192 * @param accumulated charge as percent (0-100) 00193 */ 00194 void accumulatedCharge(float); 00195 00196 /** set low battery capacity threshhold 00197 * 00198 * @param float percent remaining value(0-100) 00199 */ 00200 void setChargeThresholdLow(float); 00201 00202 /** set high battery capacity threshhold 00203 * 00204 * @param float percent remaining value(0-100) 00205 */ 00206 void setChargeThresholdHigh(float); 00207 00208 /** obtains battery voltage at (sense-) pin 00209 * if required ADC is set 00210 * 00211 * @return battery level in Volts 00212 */ 00213 float voltage(); 00214 00215 /** set low battery level threshhold 00216 * 00217 * @param Voltage level in Volts 00218 */ 00219 void setVoltageThresholdLow(float); 00220 00221 /** set high battery level threshhold 00222 * 00223 * @param Voltage level in Volts 00224 */ 00225 void setVoltageThresholdHigh(float); 00226 00227 /** obtains IC temperature, if required ADC is set 00228 * 00229 * @return temperature in centigrade 00230 */ 00231 float temperature(); 00232 00233 /** set IC temperature low threshold 00234 * 00235 * @param temperauture in centigrade 00236 */ 00237 void setTemperatureThresholdLow(float); 00238 00239 /** set IC temperature high threshold 00240 * 00241 * @param temperauture in centigrade 00242 */ 00243 void setTemperatureThresholdHigh(float); 00244 00245 00246 /** reads all LTC2942 register values prints on serial terminal 00247 * 00248 * @param none 00249 */ 00250 void readAll(); 00251 00252 /** reads the status register first 00253 * uses the ARA alert response protocol for SMBus to clear AL/CC pin 00254 * 00255 * int resp = ic.alertResponse(); 00256 * if((resp & TEMPERATURE_ALERT) == TEMPERATURE_ALERT) { } 00257 * 00258 * @return STATUS register 00259 */ 00260 int alertResponse(); 00261 00262 private: 00263 char getStatusReg(); 00264 char getControlReg(); 00265 void setControlReg(char); 00266 00267 I2C _i2c; 00268 InterruptIn _alcc; 00269 00270 char _addr; 00271 float _battCap; 00272 float _battMax; 00273 float _presc; 00274 }; 00275 00276 00277 #endif
Generated on Sat Jul 16 2022 08:04:36 by
1.7.2