84 #define DATALOG_ENABLED 1 85 #define DATALOG_DISABLED 0 177 bool DCCBITS_A[12] = {
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false};
178 bool DCCBITS_B[7]= {
false,
false,
false,
false,
false,
false,
false};
191 Serial.begin(115200);
196 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
212 if (Serial.available())
216 if(user_command==
'm')
222 Serial.println(user_command);
237 uint32_t conv_time = 0;
482 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
494 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
524 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
536 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
575 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
602 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
629 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
645 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
691 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
708 char str_error[]=
"Incorrect Option \n";
723 Serial.println(F(
"Transmit 'm' to quit"));
727 if (Serial.available() > 0)
800 Serial.println(F(
"List of LTC6813 Command:"));
801 Serial.println(F(
"Write and Read Configuration: 1 |Loop measurements with data-log output : 12 |Set Discharge: 23 "));
802 Serial.println(F(
"Read Configuration: 2 |Clear Registers: 13 |Clear Discharge: 24 "));
803 Serial.println(F(
"Start Cell Voltage Conversion: 3 |Run Mux Self Test: 14 |Write and Read of PWM : 25"));
804 Serial.println(F(
"Read Cell Voltages: 4 |Run ADC Self Test: 15 |Write and Read of S control : 26"));
805 Serial.println(F(
"Start Aux Voltage Conversion: 5 |ADC overlap Test : 16 |Clear S control register : 27"));
806 Serial.println(F(
"Read Aux Voltages: 6 |Run Digital Redundancy Test: 17 |SPI Communication : 28"));
807 Serial.println(F(
"Start Stat Voltage Conversion: 7 |Open Wire Test for single cell detection: 18 |I2C Communication Write to Slave :29"));
808 Serial.println(F(
"Read Stat Voltages: 8 |Open Wire Test for multiple cell or two consecutive cells detection:19 |I2C Communication Read from Slave :30"));
809 Serial.println(F(
"Start Combined Cell Voltage and GPIO1, GPIO2 Conversion: 9 |Open wire for Auxiliary Measurement: 20 |Enable MUTE : 31"));
810 Serial.println(F(
"Start Cell Voltage and Sum of cells : 10 |Print PEC Counter: 21 |Disable MUTE : 32"));
811 Serial.println(F(
"Loop Measurements: 11 |Reset PEC Counter: 22 |Set or reset the gpio pins: 33 \n "));
812 Serial.println(F(
"Print 'm' for menu"));
813 Serial.println(F(
"Please enter command: \n "));
824 Serial.println(F(
"Written Configuration A Register: "));
825 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
827 Serial.print(F(
"CFGA IC "));
828 Serial.print(current_ic+1,DEC);
829 for(
int i = 0;
i<6;
i++)
831 Serial.print(F(
", 0x"));
834 Serial.print(F(
", Calculated PEC: 0x"));
835 cfg_pec =
pec15_calc(6,&BMS_IC[current_ic].config.tx_data[0]);
837 Serial.print(F(
", 0x"));
839 Serial.println(
"\n");
851 Serial.println(F(
"Written Configuration B Register: "));
852 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
854 Serial.print(F(
"CFGB IC "));
855 Serial.print(current_ic+1,DEC);
856 for(
int i = 0;
i<6;
i++)
858 Serial.print(F(
", 0x"));
861 Serial.print(F(
", Calculated PEC: 0x"));
862 cfg_pec =
pec15_calc(6,&BMS_IC[current_ic].configb.tx_data[0]);
864 Serial.print(F(
", 0x"));
866 Serial.println(
"\n");
877 Serial.println(F(
"Received Configuration A Register: "));
878 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
880 Serial.print(F(
"CFGA IC "));
881 Serial.print(current_ic+1,DEC);
882 for(
int i = 0;
i < 6;
i++)
884 Serial.print(F(
", 0x"));
887 Serial.print(F(
", Received PEC: 0x"));
889 Serial.print(F(
", 0x"));
891 Serial.println(
"\n");
902 Serial.println(F(
"Received Configuration B Register: "));
903 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
905 Serial.print(F(
"CFGB IC "));
906 Serial.print(current_ic+1,DEC);
907 for(
int i = 0;
i < 6;
i++)
909 Serial.print(F(
", 0x"));
912 Serial.print(F(
", Received PEC: 0x"));
914 Serial.print(F(
", 0x"));
916 Serial.println(
"\n");
926 for (
int current_ic = 0 ; current_ic <
TOTAL_IC; current_ic++)
930 Serial.print(
" IC ");
931 Serial.print(current_ic+1,DEC);
936 Serial.print(
i+1,DEC);
938 Serial.print(BMS_IC[current_ic].cells.c_codes[
i]*0.0001,4);
945 Serial.print(
" Cells, ");
948 Serial.print(BMS_IC[current_ic].cells.c_codes[
i]*0.0001,4);
953 Serial.println(
"\n");
962 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
966 Serial.print(
" IC ");
967 Serial.print(current_ic+1,DEC);
968 for (
int i=0;
i < 5;
i++)
970 Serial.print(F(
" GPIO-"));
971 Serial.print(
i+1,DEC);
973 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
977 for (
int i=6;
i < 10;
i++)
979 Serial.print(F(
" GPIO-"));
982 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
985 Serial.print(F(
" Vref2"));
987 Serial.print(BMS_IC[current_ic].aux.a_codes[5]*0.0001,4);
990 Serial.print(
" OV/UV Flags : 0x");
991 Serial.print((uint8_t)BMS_IC[current_ic].aux.a_codes[11],HEX);
996 Serial.print(
" AUX, ");
998 for (
int i=0;
i < 12;
i++)
1000 Serial.print((uint8_t)BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
1005 Serial.println(
"\n");
1014 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
1018 Serial.print(F(
" IC "));
1019 Serial.print(current_ic+1,DEC);
1020 Serial.print(F(
" SOC:"));
1021 Serial.print(BMS_IC[current_ic].stat.stat_codes[0]*0.0001*30,4);
1022 Serial.print(F(
","));
1023 Serial.print(F(
" Itemp:"));
1024 itmp = (double)((BMS_IC[current_ic].stat.stat_codes[1] * (0.0001 / 0.0076)) - 276);
1025 Serial.print(itmp,4);
1026 Serial.print(F(
","));
1027 Serial.print(F(
" VregA:"));
1028 Serial.print(BMS_IC[current_ic].stat.stat_codes[2]*0.0001,4);
1029 Serial.print(F(
","));
1030 Serial.print(F(
" VregD:"));
1031 Serial.print(BMS_IC[current_ic].stat.stat_codes[3]*0.0001,4);
1033 Serial.print(F(
" OV/UV Flags:"));
1034 Serial.print(F(
", 0x"));
1036 Serial.print(F(
", 0x"));
1038 Serial.print(F(
", 0x"));
1040 Serial.print(F(
"\tMux fail flag:"));
1041 Serial.print(F(
", 0x"));
1043 Serial.print(F(
"\tTHSD:"));
1044 Serial.print(F(
", 0x"));
1048 Serial.println(
"\n");
1058 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
1060 if (datalog_en == 0)
1062 Serial.print(
" IC ");
1063 Serial.print(current_ic+1,DEC);
1064 for (
int i=0;
i < 2;
i++)
1066 Serial.print(F(
" GPIO-"));
1067 Serial.print(
i+1,DEC);
1069 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
1075 Serial.print(
"AUX, ");
1077 for (
int i=0;
i < 12;
i++)
1079 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
1084 Serial.println(
"\n");
1092 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
1094 Serial.print(F(
" IC "));
1095 Serial.print(current_ic+1,DEC);
1096 Serial.print(F(
" SOC:"));
1097 Serial.print(BMS_IC[current_ic].stat.stat_codes[0]*0.0001*30,4);
1098 Serial.print(F(
","));
1100 Serial.println(
"\n");
1110 for (
int ic = 0; ic<
TOTAL_IC; ic++)
1112 Serial.print(
" IC ");
1113 Serial.println(ic+1,DEC);
1114 if (BMS_IC[ic].stat.mux_fail[0] != 0) error++;
1116 if (error==0) Serial.println(F(
"Mux Test: PASS \n"));
1117 else Serial.println(F(
"Mux Test: FAIL \n"));
1129 Serial.println(
"Cell ");
1133 Serial.println(
"Aux ");
1137 Serial.println(
"Stat ");
1139 Serial.print(error, DEC);
1140 Serial.println(F(
" : errors detected in Digital Filter and Memory \n"));
1149 if (error==0) Serial.println(F(
"Overlap Test: PASS \n"));
1150 else Serial.println(F(
"Overlap Test: FAIL \n"));
1161 Serial.println(
"Aux ");
1165 Serial.println(
"Stat ");
1168 Serial.print(error, DEC);
1169 Serial.println(F(
" : errors detected in Measurement \n"));
1177 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
1179 if (BMS_IC[current_ic].system_open_wire == 65535)
1181 Serial.print(
"No Opens Detected on IC ");
1182 Serial.print(current_ic+1, DEC);
1187 Serial.print(F(
"There is an open wire on IC "));
1188 Serial.print(current_ic + 1,DEC);
1189 Serial.print(F(
" Channel: "));
1190 Serial.println(BMS_IC[current_ic].system_open_wire);
1193 Serial.println(
"\n");
1202 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1205 Serial.print(BMS_IC[current_ic].crc_count.pec_count,DEC);
1206 Serial.print(F(
" : PEC Errors Detected on IC"));
1207 Serial.println(current_ic+1,DEC);
1209 Serial.println(
"\n");
1218 int8_t read_s_pin=0;
1220 Serial.print(F(
"Please enter the Spin number: "));
1222 Serial.println(read_s_pin);
1234 Serial.println(F(
"Written PWM Configuration: "));
1235 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1237 Serial.print(F(
"IC "));
1238 Serial.print(current_ic+1,DEC);
1239 for(
int i = 0;
i < 6;
i++)
1241 Serial.print(F(
", 0x"));
1244 Serial.print(F(
", Calculated PEC: 0x"));
1245 pwm_pec =
pec15_calc(6,&BMS_IC[current_ic].pwm.tx_data[0]);
1247 Serial.print(F(
", 0x"));
1249 Serial.println(
"\n");
1259 Serial.println(F(
"Received pwm Configuration:"));
1260 for (uint8_t current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1262 Serial.print(F(
"IC "));
1263 Serial.print(current_ic+1,DEC);
1264 for(
int i = 0;
i < 6;
i++)
1266 Serial.print(F(
", 0x"));
1269 Serial.print(F(
", Received PEC: 0x"));
1271 Serial.print(F(
", 0x"));
1273 Serial.println(
"\n");
1285 Serial.println(F(
"Written Data in Sctrl register: "));
1286 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1288 Serial.print(F(
" IC: "));
1289 Serial.print(current_ic+1,DEC);
1290 Serial.print(F(
" Sctrl register group:"));
1291 for(
int i = 0;
i < 6;
i++)
1293 Serial.print(F(
", 0x"));
1297 Serial.print(F(
", Calculated PEC: 0x"));
1298 sctrl_pec =
pec15_calc(6,&BMS_IC[current_ic].sctrl.tx_data[0]);
1300 Serial.print(F(
", 0x"));
1302 Serial.println(
"\n");
1312 Serial.println(F(
"Received Data:"));
1313 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1315 Serial.print(F(
" IC "));
1316 Serial.print(current_ic+1,DEC);
1318 for(
int i = 0;
i < 6;
i++)
1320 Serial.print(F(
", 0x"));
1324 Serial.print(F(
", Received PEC: 0x"));
1326 Serial.print(F(
", 0x"));
1328 Serial.println(
"\n");
1341 Serial.println(F(
" PWM/S control register group B: "));
1342 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1346 Serial.print(F(
" IC: "));
1347 Serial.println(current_ic+1,DEC);
1348 Serial.print(F(
" 0x"));
1350 Serial.print(F(
", 0x"));
1352 Serial.print(F(
", 0x"));
1355 Serial.print(F(
", Calculated PEC: 0x"));
1356 psb_pec =
pec15_calc(6,&BMS_IC[current_ic].pwmb.tx_data[0]);
1358 Serial.print(F(
", 0x"));
1360 Serial.println(
"\n");
1364 Serial.print(F(
" IC: "));
1365 Serial.println(current_ic+1,DEC);
1366 Serial.print(F(
" 0x"));
1368 Serial.print(F(
", 0x"));
1370 Serial.print(F(
", 0x"));
1373 Serial.print(F(
", Calculated PEC: 0x"));
1374 psb_pec =
pec15_calc(6,&BMS_IC[current_ic].sctrlb.tx_data[0]);
1376 Serial.print(F(
", 0x"));
1378 Serial.println(
"\n");
1391 Serial.println(F(
" PWM/S control register group B:"));
1394 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1396 Serial.print(F(
" IC: "));
1397 Serial.println(current_ic+1,DEC);
1398 Serial.print(F(
" 0x"));
1400 Serial.print(F(
", 0x"));
1402 Serial.print(F(
", 0x"));
1405 Serial.print(F(
", Received PEC: 0x"));
1407 Serial.print(F(
", 0x"));
1409 Serial.println(
"\n");
1414 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1416 Serial.print(F(
" IC: "));
1417 Serial.println(current_ic+1,DEC);
1418 Serial.print(F(
" 0x"));
1420 Serial.print(F(
", 0x"));
1422 Serial.print(F(
", 0x"));
1425 Serial.print(F(
", Received PEC: 0x"));
1427 Serial.print(F(
", 0x"));
1429 Serial.println(
"\n");
1442 Serial.println(F(
"Written Data in COMM Register: "));
1443 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1445 Serial.print(F(
" IC- "));
1446 Serial.print(current_ic+1,DEC);
1448 for(
int i = 0;
i < 6;
i++)
1450 Serial.print(F(
", 0x"));
1453 Serial.print(F(
", Calculated PEC: 0x"));
1454 comm_pec =
pec15_calc(6,&BMS_IC[current_ic].com.tx_data[0]);
1456 Serial.print(F(
", 0x"));
1458 Serial.println(
"\n");
1468 Serial.println(F(
"Received Data in COMM register:"));
1469 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1471 Serial.print(F(
" IC- "));
1472 Serial.print(current_ic+1,DEC);
1474 for(
int i = 0;
i < 6;
i++)
1476 Serial.print(F(
", 0x"));
1479 Serial.print(F(
", Received PEC: 0x"));
1481 Serial.print(F(
", 0x"));
1483 Serial.println(
"\n");
1493 for (
int current_ic = 0 ; current_ic <
TOTAL_IC; current_ic++)
1495 Serial.print(F(
" Mute bit in Configuration Register B: 0x"));
1497 Serial.println(
"\n");
1507 uint16_t m_factor=1000;
1509 Serial.print(F(
"Conversion completed in:"));
1510 Serial.print(((
float)conv_time/m_factor), 1);
1511 Serial.println(F(
"ms \n"));
1522 Serial.println(F(
"A PEC error was detected in the received data"));
1532 Serial.println(data);
1544 Serial.print((byte)data,HEX);
1547 Serial.print((byte)data,HEX);
1555 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F' 1563 '0',
'x',
'0',
'0',
'\0' 1596 while (Serial.available() <= 0);
1597 return(Serial.read());
int8_t LTC6813_rdaux(uint8_t reg, uint8_t total_ic, cell_asic *ic)
Reads and parses the LTC6813 auxiliary registers.
int16_t LTC6813_run_adc_redundancy_st(uint8_t adc_mode, uint8_t adc_reg, uint8_t total_ic, cell_asic *ic)
Helper function that runs the ADC Digital Redundancy commands and checks output for errors...
const uint8_t READ_CONFIG
This is to ENABLED or DISABLED reading the configuration registers in a continuous loop...
static void print_wrsctrl(void)
const uint8_t MEASURE_AUX
This is to ENABLED or DISABLED reading the auxiliary registers in a continuous loop.
uint32_t LTC6813_pollAdc()
This function will block operation until the ADC has finished it's conversion.
bool DCCBITS_A[12]
Discharge cell switch //Dcc 1,2,3,4,5,6,7,8,9,10,11,12.
const uint8_t PRINT_PEC
This is to ENABLED or DISABLED printing the PEC Error Count in a continuous loop. ...
void LTC6813_wrpsb(uint8_t total_ic, cell_asic *ic)
Write the 6813 PWM/Sctrl Register B.
cell_asic BMS_IC[TOTAL_IC]
Global Battery Variable.
const uint8_t SEL_REG_A
Register Selection.
unsigned char user_command
uint8_t tx_data[6]
Stores data to be transmitted.
#define CELL_CH_ALL
CH Dec Channels to convert 0000 All Cells 0011 Cell 1 and Cell 7 0102 Cell 2 and Cell 8 0113 Cell 3 ...
bool PSBITS[2]
Digital Redundancy Path Selection//ps-0,1.
const uint8_t WRITE_CONFIG
This is to ENABLED or DISABLED writing into to configuration registers in a continuous loop...
static void serial_print_hex(uint8_t data)
const uint8_t TOTAL_IC
Number of ICs in the daisy chain.
const uint8_t ADC_CONVERSION_MODE
ADC Mode.
void LTC6813_adcvsc(uint8_t MD, uint8_t DCP)
Starts cell voltage and Sum of cells conversion.
static void check_mute_bit(void)
const uint8_t ADC_OPT
ADC Mode option bit.
static void print_aux1(uint8_t datalog_en)
static void check_mux_fail(void)
Header File for Linduino Libraries and Demo Code.
void LTC6813_init_cfgb(uint8_t total_ic, cell_asic *ic)
Helper Function to initialize the CFGR B data structures.
void LTC6813_init_reg_limits(uint8_t total_ic, cell_asic *ic)
Helper function to initialize register limits.
static void print_rxconfig(void)
void LTC6813_wrsctrl(uint8_t total_ic, uint8_t sctrl_reg, cell_asic *ic)
Write the LTC6813 Sctrl register.
#define AUX_CH_ALL
CHG Dec Channels to convert 000 0 All GPIOS and 2nd Ref 001 1 GPIO 1 010 2 GPIO 2 011 3 GPIO 3 100 4...
bool ADCOPT
ADC Mode option bit.
void LTC6813_set_discharge(int Cell, uint8_t total_ic, cell_asic *ic)
Helper Function to Set DCC bits in the CFGR Registers.
const uint8_t SEL_ALL_REG
Register Selection.
void spi_enable(uint8_t spi_clock_divider)
Setup the processor for hardware SPI communication.
void LTC6813_run_openwire_single(uint8_t total_ic, cell_asic *ic)
Helper function that runs the data sheet algorithm for open wire for single cell detection.
char hex_to_byte_buffer[5]
void LTC6813_adcvax(uint8_t MD, uint8_t DCP)
Starts cell voltage and GPIO 1 & 2 conversion.
void LTC6813_adcv(uint8_t MD, uint8_t DCP, uint8_t CH)
Starts cell voltage conversion.
static void print_sumofcells(void)
const uint16_t UV_THRESHOLD
Under voltage threshold ADC Code.
void LTC6813_adstat(uint8_t MD, uint8_t CHST)
Start a Status ADC Conversion.
void LTC6813_set_cfgr(uint8_t nIC, cell_asic *ic, bool refon, bool adcopt, bool gpio[5], bool dcc[12], bool dcto[4], uint16_t uv, uint16_t ov)
Helper function to set appropriate bits in CFGR register based on bit function.
int8_t LTC6813_rdcfg(uint8_t total_ic, cell_asic *ic)
Reads configuration register A of a LTC6813 daisy chain.
const uint16_t OV_THRESHOLD
Over voltage threshold ADC Code.
const uint16_t MEASUREMENT_LOOP_TIME
Loop Time in milliseconds(ms)
static uint16_t UV
Under voltage Comparison Voltage.
void LTC6813_adax(uint8_t MD, uint8_t CHG)
Start a GPIO and Vref2 Conversion.
static void print_rxconfigb(void)
union LT_union_int32_4bytes data
static void print_rxpwm(void)
void LTC6813_clrstat()
Clears the LTC6813 Stat registers.
uint8_t LTC6813_rdcv(uint8_t reg, uint8_t total_ic, cell_asic *ic)
Reads and parses the LTC6813 cell voltage registers.
bool GPIOBITS_A[5]
GPIO Pin Control // Gpio 1,2,3,4,5.
bool DTMEN
Enable Discharge Timer Monitor.
static void serial_print_text(char data[])
uint8_t LTC6813_rdpsb(uint8_t total_ic, cell_asic *ic)
Reading pwm/s control register B.
static void print_wrcomm(void)
void LTC6813_stcomm(uint8_t len)
Issues a stcomm command and clocks data out of the COMM register.
static void check_error(int error)
static uint16_t OV
Over voltage Comparison Voltage.
static void run_command(uint32_t cmd)
static void measurement_loop(uint8_t datalog_en)
static void print_overlap_results(int8_t error)
void LTC6813_mute()
Mutes the LTC6813 discharge transistors.
void LTC6813_wrcfg(uint8_t total_ic, cell_asic *ic)
Write the LTC6813 configuration register A.
static void print_conv_time(uint32_t conv_time)
const uint8_t STAT_CH_TO_CONVERT
Channel Selection for ADC conversion.
static void print_wrpwm(void)
const uint8_t CELL_CH_TO_CONVERT
Channel Selection for ADC conversion.
#define input(pin)
Return the state of pin "pin".
static void print_pec_error_count(void)
uint8_t cell_channels
Number of Cell channels.
static void print_cells(uint8_t datalog_en)
uint16_t LTC6813_run_adc_overlap(uint8_t total_ic, cell_asic *ic)
Helper Function that runs the ADC Overlap test.
bool FDRF
Force Digital Redundancy Failure Bit.
bool GPIOBITS_B[4]
GPIO Pin Control // Gpio 6,7,8,9.
uint16_t pec15_calc(uint8_t len, uint8_t *data)
void LTC6813_clraux()
Clears the LTC6813 Auxiliary registers.
void LTC6813_reset_crc_count(uint8_t total_ic, cell_asic *ic)
Helper Function that resets the PEC error counters.
const uint8_t MEASURE_CELL
This is to ENABLED or DISABLED measuring the cell voltages in a continuous loop.
static void print_stat(void)
static void print_wrconfigb(void)
LT_SPI: Routines to communicate with ATmega328P's hardware SPI port.
void LTC6813_clrsctrl()
Clears the LTC6813 Sctrl registers.
static void print_open_wires(void)
static void print_menu(void)
int8_t LTC6813_rdcfgb(uint8_t total_ic, cell_asic *ic)
Reads configuration register B of a LTC6813 daisy chain.
void LTC6813_clrcell()
Clears the LTC6813 cell voltage registers.
void LTC6813_set_cfgrb(uint8_t nIC, cell_asic *ic, bool fdrf, bool dtmen, bool ps[2], bool gpiobits[4], bool dccbits[7])
Helper function to set appropriate bits in CFGR register based on bit function.
int8_t LTC6813_rdstat(uint8_t reg, uint8_t total_ic, cell_asic *ic)
Reads and parses the LTC6813 stat registers.
const uint8_t AUX_CH_TO_CONVERT
Channel Selection for ADC conversion.
void LTC6813_wrcomm(uint8_t total_ic, cell_asic *ic)
Write the LTC6813 COMM register.
int8_t LTC6813_rdsctrl(uint8_t total_ic, uint8_t sctrl_reg, cell_asic *ic)
Reads sctrl registers of a LTC6813 daisy chain.
static void print_digital_redundancy_errors(uint8_t adc_reg, int8_t error)
static void print_selftest_errors(uint8_t adc_reg, int8_t error)
bool DCCBITS_B[7]
Discharge cell switch //Dcc 0,13,14,15.
void LTC6813_wrcfgb(uint8_t total_ic, cell_asic *ic)
Write the LTC6813 configuration register B.
void quikeval_SPI_connect()
Connect SPI pins to QuikEval connector through the Linduino MUX. This will disconnect I2C...
const uint8_t MEASURE_STAT
This is to ENABLED or DISABLED reading the status registers in a continuous loop. ...
void LTC6813_stsctrl()
Start Sctrl data communication This command will start the sctrl pulse communication over the spins...
void LTC6813_init_cfg(uint8_t total_ic, cell_asic *ic)
Helper Function to initialize the CFGR data structures.
LTC6813: Multicell Battery Monitors.
static int8_t select_s_pin(void)
static void print_rxpsb(uint8_t type)
void LTC6813_unmute()
Clears the LTC6813 Mute Discharge.
int8_t LTC6813_rdpwm(uint8_t total_ic, uint8_t pwmReg, cell_asic *ic)
Reads pwm registers of a LTC6813 daisy chain.
char byte_to_hex_buffer[3]
static void print_wrconfig(void)
static void print_aux(uint8_t datalog_en)
static void print_wrpsb(uint8_t type)
int16_t LTC6813_run_cell_adc_st(uint8_t adc_reg, uint8_t total_ic, cell_asic *ic, uint8_t md, bool adcopt)
Helper function that runs the ADC Self Tests.
static void print_rxsctrl(void)
bool REFON
Reference Powered Up Bit.
const uint8_t ADC_DCP
Discharge Permitted.
int8_t LTC6813_rdcomm(uint8_t total_ic, cell_asic *ic)
Reads comm registers of a LTC6813 daisy chain.
static void print_rxcomm(void)
bool DCTOBITS[4]
Discharge time value //Dcto 0,1,2,3 // Programed for 4 min.
const uint8_t SEL_REG_B
Register Selection.
void LTC6813_clear_discharge(uint8_t total_ic, cell_asic *ic)
Helper Function to clear DCC bits in the CFGR Registers.
void LTC6813_run_openwire_multi(uint8_t total_ic, cell_asic *ic)
Helper function that runs open wire for multiple cell and two consecutive cells detection.
void LTC6813_wrpwm(uint8_t total_ic, uint8_t pwmReg, cell_asic *ic)
Write the LTC6813 PWM register.
void LTC6813_diagn()
Starts the Mux Decoder diagnostic self test Running this command will start the Mux Decoder Diagnosti...
void LTC6813_run_gpio_openwire(uint8_t total_ic, cell_asic *ic)
Runs open wire for GPIOs.