fromALERTregister.Sharedbetweenloop()andrestore_alert_settings()
//!
InitializeLinduino
voidsetup()
{
chardemo_name[]="DC1812";//!
DemoBoardNamestoredinQuikEvalEEPROM
quikeval_I2C_init();//!
ConfiguretheEEPROMI2Cportfor100kHz
quikeval_I2C_connect();//!
ConnectstomainI2Cport
Serial.begin(115200);//!
InitializetheserialporttothePC
print_title();
demo_board_connected=discover_demo_board(demo_name);if(demo_board_connected)
{
print_prompt();
}
else
{
demo_board_connected=true;
Serial.println("DidnotreadIDString,attemptingtoproceedanyway...\nPleaseensureI2ClinesofLinduinoareconnectedtotheLTCdevice");
}
}
//!
RepeatsLinduinoloop
voidloop(){
int8_tack=0;indicator
//!
I2Cacknowledge
staticuint8_tuser_command;command
//!
Theuserinput
staticuint8_tmAh_or_Coulombs=0;
staticuint8_tcelcius_or_kelvin=0;
staticuint16_tprescalar_mode=LTC2943_PRESCALAR_M_4096;
staticuint16_tprescalarValue=4096;
staticuint16_talcc_mode=LTC2943_ALERT_MODE;
if(demo_board_connected)thedemoboardisnotconnected
//!
Donothingif
{
if(Serial.available())serialisnotavailable
//!
Donothingif
user_command=read_int();command
//!
Readuserinput
if(user_command!
='m')
Serial.println(user_command);Serial.println();
ack=0;
switch(user_command)appropriatesubmenu
//!
Printsthe
case1:
ack|=menu_1_automatic_mode(mAh_or_Coulombs,celcius_or_kelvin,prescalar_mode,prescalarValue,alcc_mode);//!
AutomaticMode
break;
case2:
ack|=menu_2_scan_mode(mAh_or_Coulombs,celcius_or_kelvin,prescalar_mode,prescalarValue,alcc_mode);//!
ScanMode
break;
case3:
ack|=menu_3_manual_mode(mAh_or_Coulombs,celcius_or_kelvin,prescalar_mode,prescalarValue,alcc_mode);//!
ManualMode
break;
case4:
ack|=menu_4_sleep_mode(mAh_or_Coulombs,prescalar_mode,prescalarValue,alcc_mode);//!
SleepMode
break;
case5:
ack|=menu_5_shutdown_mode();
//!
ShutdownMode
break;
case6:
ack|=menu_6_settings(&mAh_or_Coulombs,&celcius_or_kelvin,&prescalar_mode,&prescalarValue,&alcc_mode);//!
SettingsMode
break;
}
if(ack!
=0)//!
Ifackisnotrecievedprintanerror.
Serial.println(ack_error);
Serial.print(F("*************************"print_prompt();
}
}
}
//FunctionDefinitions
//!
Printthetitleblock
voidprint_title()
{
Serial.println(F("\n*****************************************************************"));
Serial.print(F("*DC1812ADemonstrationProgram*\n"));
Serial.print(F("*
*\n"));
Serial.print(F("*ThisprogramcommunicateswiththeLTC2943MulticellCoulomb*\n"));
Serial.print(F("*CounterfoundontheDC1812Ademoboard.*\n"));
Serial.print(F("*Setthebaudrateto115200andselectthenewlineterminator.*\n"));
Serial.print(F("*
*\n"));
Serial.print(F("****************************************************
*************\rH\\・
//!
PrintthePrompt
voidprint_prompt()
{
Serial.print(F("\n1-AutomaticMode\n"));
Serial.print(F("2-ScanMode\n"));
Serial.print(F("3-ManualMode\n"));
Serial.print(F("4-SleepMode\n"));
Serial.print(F("5-ShutdownMode\n"));
Serial.print(F("6-Settings\n"));
Serial.print(F("Enteracommand:
"));
}
//!
AutomaticMode.
int8_tmenu_1_automatic_mode(int8_tmAh_or_Coulombs,int8_tcelcius_or_kelvin,uint16_tprescalar_mode,uint16_tprescalarValue,uint16_talcc_mode)
//!
@returnReturnsthestateoftheacknowledgebitaftertheI2Caddresswrite.0=acknowledge,1=noacknowledge.
{
int8_tLTC2943_mode;
int8_tack=0;
LTC2943_mode=LTC2943_AUTOMATIC_MODE|prescalar_mode|alcc_mode;//!
SetthecontrolregisteroftheLTC2943toautomaticmodeaswellassetprescalarandAL#/CC#pinvalues.
Serial.println();
ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_mode);//!
WritesthesetmodetotheLTC2943controlregister
do
uint8_tstatus_code,hightemp_code,lowtemp_code;
uint16_tcharge_code,current_code,voltage_code,temperature_code;
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_ACCUM_CHARGE_MSB_REG,&charge_code);//!
ReadMSBandLSBAccumulatedChargeRegistersfor16bitchargecode
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_VOLTAGE_MSB_REG,&voltage_code);//!
ReadMSBandLSBVoltageRegistersfor16bitvoltagecode
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_CURRENT_MSB_REG,¤t_code);//!
ReadMSBand
LSBCurrentRegistersfor16bitcurrentcode
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_TEMPERATURE_MSB_REG,&temperature_code);//!
ReadMSBandLSBTemperatureRegistersfor16bittemperaturecode
ack|=LTC2943_read(LTC2943_I2C_ADDRESS,LTC2943_STATUS_REG,&status_code);//!
ReadStatusRegisterfor8bitstatuscode
floatcharge,current,voltage,temperature;
if(mAh_or_Coulombs)
{
charge=LTC2943_code_to_coulombs(charge_code,resistor,prescalarValue);//!
ConvertchargecodetoCoulombsifCoulombunitsaredesired.
Serial.print("Coulombs:
");
Serial.print(charge,4);
Serial.print(F("C\n"));
}
else
{
charge=LTC2943_code_to_mAh(charge_code,resistor,prescalarValue);//!
ConvertchargecodetomAhifmAhunitsaredesired.
Serial.print("mAh:
");
Serial.print(charge,4);
Serial.print(F("mAh\n"));
}
current=LTC2943_code_to_current(current_code,resistor);
//!
ConvertcurrentcodetoAmperes
voltage=LTC2943_code_to_voltage(voltage_code);
//!
ConvertvoltagecodetoVolts
Serial.print(F("Current"));
Serial.print(current,4);
Serial.print(F("A\n"));
Serial.print(F("Voltage"));
Serial.print(voltage,4);
Serial.print(F("V\n"));if(celcius_or_kelvin){
temperature=LTC2943_code_to_kelvin_temperature(temperature_code);//!
Converttemperaturecodetokelvin
Serial.print(F("Temperature"));
Serial.print(temperature,4);
Serial.print(F("K\n"));
}
else
temperature=LTC2943_code_to_celcius_temperature(temperature_code);//!
Converttemperaturecodetocelcius
Serial.print(F("Temperature"));
Serial.print(temperature,4);
Serial.print(F("C\n"));
}
checkAlerts(status_code);
//!
CheckstatuscodeforAlerts.IfanAlerthasbeenset,printoutappropriatemessageintheSerialPrompt.
Serial.print(F("m-MainMenu\n\n"));
Serial.flush();delay(AUTOMATIC_MODE_DISPLAY_DELAY);
//!
Delayfor1sbeforenextpolling
}
while(Serial.available()==false||(ack));
//!
ifSerialisnotavailableandanNACKhasnotbeenrecieved,keeppollingtheregisters.
read_int();//clearstheSerial.available
return(ack);
}
//!
ScanMode
int8_tmenu_2_scan_mode(int8_tmAh_or_Coulombs,int8_tcelcius_or_kelvin,uint16_tprescalar_mode,uint16_tprescalarValue,uint16_talcc_mode)
//!
@returnReturnsthestateoftheacknowledgebitaftertheI2Caddresswrite.0=acknowledge,1=noacknowledge
int8_tLTC2943_mode;
int8_tack=0;
LTC2943_mode=LTC2943_SCAN_MODE|prescalar_mode|alcc_mode;
//!
SetthecontrolmodeoftheLTC2943toscanmodeaswellassetprescalarandAL#/CC#pinvalues.
Serial.println();
ack|=LTC2943_write(LTC2943_I2C_ADDRESS,LTC2943_CONTROL_REG,LTC2943_mode);//!
WritesthesetmodetotheLTC2943
controlregister
do
uint8_tstatus_code;
uint16_tcharge_code,current_code,voltage_code,temperature_code;
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_ACCUM_CHARGE_MSB_REG,&charge_code);//!
ReadMSB
andLSBAccumulatedChargeRegistersfor16bitchargecode
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_VOLTAGE_MSB_REG,&voltage_code);//!
ReadMSB
andLSBVoltageRegistersfor16bitvoltagecode
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_CURRENT_MSB_REG,¤t_code);//!
ReadMSB
andLSBCurrentRegistersfor16bitcurrentcode
ack|=LTC2943_read_16_bits(LTC2943_I2C_ADDRESS,LTC2943_TEMPERATURE_MSB_REG,&temperature_code);//!
ReadMSBandLSBTemperatureRegistersfor16bittemperaturecode
ack|=LTC2943_read(LTC2943_I2C_ADDRESS,LTC2943_STATUS_REG,&status_code);//!
ReadStatusRegistersfor8bitstatuscode
floatcharge,current,voltage,temperature;
if(mAh_or_Coulombs)
{
charge=LTC2943_code_to_coulombs(charge_code,resistor,prescalarValue);//!
Convertchargecode
toCoulombsifCoulombunitsaredesired.
Serial.print("Coulombs:
");
Serial.print(charge,4);
Serial.print(F("C\n"));
}
else
{
charg