85 #define DATALOG_ENABLED 1 86 #define DATALOG_DISABLED 0 176 bool DCCBITS_A[12] = {
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false,
false};
190 Serial.begin(115200);
195 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
211 if (Serial.available())
215 if(user_command==
'm')
221 Serial.println(user_command);
235 uint32_t conv_time = 0;
480 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
492 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++)
578 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
605 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
632 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
648 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
694 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC;current_ic++)
711 char str_error[]=
"Incorrect Option \n";
726 Serial.println(F(
"Transmit 'm' to quit"));
730 if (Serial.available() > 0)
803 Serial.println(F(
"List of LTC6812 Command:"));
804 Serial.println(F(
"Write and Read Configuration: 1 |Loop measurements with data-log output : 12 |Set Discharge: 23 "));
805 Serial.println(F(
"Read Configuration: 2 |Clear Registers: 13 |Clear Discharge: 24 "));
806 Serial.println(F(
"Start Cell Voltage Conversion: 3 |Run Mux Self Test: 14 |Write and Read of PWM : 25"));
807 Serial.println(F(
"Read Cell Voltages: 4 |Run ADC Self Test: 15 |Write and Read of S control : 26"));
808 Serial.println(F(
"Start Aux Voltage Conversion: 5 |ADC overlap Test : 16 |Clear S control register : 27"));
809 Serial.println(F(
"Read Aux Voltages: 6 |Run Digital Redundancy Test: 17 |SPI Communication : 28"));
810 Serial.println(F(
"Start Stat Voltage Conversion: 7 |Open Wire Test for single cell detection: 18 |I2C Communication Write to Slave :29"));
811 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"));
812 Serial.println(F(
"Start Combined Cell Voltage and GPIO1, GPIO2 Conversion: 9 |Open wire for Auxiliary Measurement: 20 |Enable MUTE : 31"));
813 Serial.println(F(
"Start Cell Voltage and Sum of cells : 10 |Print PEC Counter: 21 |Disable MUTE : 32"));
814 Serial.println(F(
"Loop Measurements: 11 |Reset PEC Counter: 22 |Set or reset the gpio pins: 33 \n "));
815 Serial.println(F(
"Print 'm' for menu"));
816 Serial.println(F(
"Please enter command: \n "));
827 Serial.println(F(
"Written Configuration A Register: "));
828 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
830 Serial.print(F(
"CFGA IC "));
831 Serial.print(current_ic+1,DEC);
832 for(
int i = 0;
i<6;
i++)
834 Serial.print(F(
", 0x"));
837 Serial.print(F(
", Calculated PEC: 0x"));
838 cfg_pec =
pec15_calc(6,&BMS_IC[current_ic].config.tx_data[0]);
840 Serial.print(F(
", 0x"));
842 Serial.println(
"\n");
854 Serial.println(F(
"Written Configuration B Register: "));
855 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
857 Serial.print(F(
"CFGB IC "));
858 Serial.print(current_ic+1,DEC);
859 for(
int i = 0;
i<6;
i++)
861 Serial.print(F(
", 0x"));
864 Serial.print(F(
", Calculated PEC: 0x"));
865 cfg_pec =
pec15_calc(6,&BMS_IC[current_ic].configb.tx_data[0]);
867 Serial.print(F(
", 0x"));
869 Serial.println(
"\n");
880 Serial.println(F(
"Received Configuration A Register: "));
881 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
883 Serial.print(F(
"CFGA IC "));
884 Serial.print(current_ic+1,DEC);
885 for(
int i = 0;
i < 6;
i++)
887 Serial.print(F(
", 0x"));
890 Serial.print(F(
", Received PEC: 0x"));
892 Serial.print(F(
", 0x"));
894 Serial.println(
"\n");
905 Serial.println(F(
"Received Configuration B Register: "));
906 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
908 Serial.print(F(
"CFGB IC "));
909 Serial.print(current_ic+1,DEC);
910 for(
int i = 0;
i < 6;
i++)
912 Serial.print(F(
", 0x"));
915 Serial.print(F(
", Received PEC: 0x"));
917 Serial.print(F(
", 0x"));
919 Serial.println(
"\n");
929 for (
int current_ic = 0 ; current_ic <
TOTAL_IC; current_ic++)
933 Serial.print(
" IC ");
934 Serial.print(current_ic+1,DEC);
939 Serial.print(
i+1,DEC);
941 Serial.print(BMS_IC[current_ic].cells.c_codes[
i]*0.0001,4);
948 Serial.print(
" Cells, ");
951 Serial.print(BMS_IC[current_ic].cells.c_codes[
i]*0.0001,4);
956 Serial.println(
"\n");
965 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
969 Serial.print(
" IC ");
970 Serial.print(current_ic+1,DEC);
973 for (
int i = 0;
i < 5;
i++)
975 Serial.print(F(
" GPIO-"));
976 Serial.print(
i+1,DEC);
978 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
982 for (
int i=6;
i < 10;
i++)
984 Serial.print(F(
" GPIO-"));
987 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
991 Serial.print(F(
" Vref2 :"));
992 Serial.print(BMS_IC[current_ic].aux.a_codes[5]*0.0001,4);
995 Serial.print(
" OV/UV Flags : 0x");
996 Serial.print((uint8_t)BMS_IC[current_ic].aux.a_codes[11],HEX);
1001 Serial.print(
" AUX : ");
1003 for (
int i=0;
i < 12;
i++)
1005 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
1010 Serial.println(
"\n");
1021 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
1023 Serial.print(F(
" IC "));
1024 Serial.print(current_ic+1,DEC);
1025 Serial.print(F(
" SOC:"));
1026 Serial.print(BMS_IC[current_ic].stat.stat_codes[0]*0.0001*30,4);
1027 Serial.print(F(
","));
1028 Serial.print(F(
" Itemp:"));
1029 itmp = (double)((BMS_IC[current_ic].stat.stat_codes[1] * (0.0001 / 0.0076)) - 276);
1030 Serial.print(itmp,4);
1031 Serial.print(F(
","));
1032 Serial.print(F(
" VregA:"));
1033 Serial.print(BMS_IC[current_ic].stat.stat_codes[2]*0.0001,4);
1034 Serial.print(F(
","));
1035 Serial.print(F(
" VregD:"));
1036 Serial.println(BMS_IC[current_ic].stat.stat_codes[3]*0.0001,4);
1037 Serial.print(F(
" OV/UV Flags: 0x"));
1039 Serial.print(F(
", 0x"));
1041 Serial.print(F(
", 0x"));
1043 Serial.print(F(
",\t Mux fail flag:"));
1044 Serial.print(F(
" 0x"));
1046 Serial.print(F(
",\t THSD:"));
1047 Serial.print(F(
" 0x"));
1049 Serial.println(
"\n");
1060 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
1062 if (datalog_en == 0)
1064 Serial.print(
" IC ");
1065 Serial.print(current_ic+1,DEC);
1066 for (
int i=0;
i < 2;
i++)
1068 Serial.print(F(
" GPIO-"));
1069 Serial.print(
i+1,DEC);
1071 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
1077 Serial.print(
"AUX, ");
1079 for (
int i=0;
i < 6;
i++)
1081 Serial.print(BMS_IC[current_ic].aux.a_codes[
i]*0.0001,4);
1086 Serial.println(
"\n");
1095 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
1097 Serial.print(F(
" IC "));
1098 Serial.print(current_ic+1,DEC);
1099 Serial.print(F(
": SOC:"));
1100 Serial.print(BMS_IC[current_ic].stat.stat_codes[0]*0.0001*30,4);
1101 Serial.print(F(
","));
1103 Serial.println(
"\n");
1113 for (
int ic = 0; ic<
TOTAL_IC; ic++)
1115 Serial.print(
" IC ");
1116 Serial.println(ic+1,DEC);
1117 if (BMS_IC[ic].stat.mux_fail[0] != 0) error++;
1119 if (error==0) Serial.println(F(
"Mux Test: PASS \n"));
1120 else Serial.println(F(
"Mux Test: FAIL \n"));
1132 Serial.println(
"Cell ");
1136 Serial.println(
"Aux ");
1140 Serial.println(
"Stat ");
1142 Serial.print(error, DEC);
1143 Serial.println(F(
" : errors detected in Digital Filter and Memory \n"));
1152 if (error==0) Serial.println(F(
"Overlap Test: PASS \n"));
1153 else Serial.println(F(
"Overlap Test: FAIL \n"));
1164 Serial.println(
"Aux ");
1168 Serial.println(
"Stat ");
1171 Serial.print(error, DEC);
1172 Serial.println(F(
" : errors detected in Measurement \n"));
1181 for (
int current_ic =0 ; current_ic <
TOTAL_IC; current_ic++)
1183 if (BMS_IC[current_ic].system_open_wire == 65535)
1185 Serial.print(
"No Opens Detected on IC ");
1186 Serial.print(current_ic+1, DEC);
1191 Serial.print(F(
"There is an open wire on IC "));
1192 Serial.print(current_ic + 1,DEC);
1193 Serial.print(F(
" Channel: "));
1194 Serial.println(BMS_IC[current_ic].system_open_wire);
1197 Serial.println(
"\n");
1206 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1209 Serial.print(BMS_IC[current_ic].crc_count.pec_count,DEC);
1210 Serial.print(F(
" : PEC Errors Detected on IC"));
1211 Serial.println(current_ic+1,DEC);
1213 Serial.println(
"\n");
1222 int8_t read_s_pin=0;
1224 Serial.print(F(
"Please enter the Spin number: "));
1226 Serial.println(read_s_pin);
1238 Serial.println(F(
"Write PWM Register A: "));
1239 for (uint8_t current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1241 Serial.print(F(
"IC "));
1242 Serial.print(current_ic+1,DEC);
1243 for(
int i = 0;
i < 6;
i++)
1245 Serial.print(F(
", 0x"));
1248 Serial.print(F(
", Calculated PEC: 0x"));
1249 pwm_pec =
pec15_calc(6,&BMS_IC[current_ic].pwm.tx_data[0]);
1251 Serial.print(F(
", 0x"));
1253 Serial.println(
"\n");
1263 Serial.println(F(
"Receive PWM Register A data:"));
1264 for (uint8_t current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1266 Serial.print(F(
"IC "));
1267 Serial.print(current_ic+1,DEC);
1268 for(
int i = 0;
i < 6;
i++)
1270 Serial.print(F(
", 0x"));
1273 Serial.print(F(
", Received PEC: 0x"));
1275 Serial.print(F(
", 0x"));
1277 Serial.println(
"\n");
1289 Serial.println(F(
"Written Data in Sctrl register A: "));
1290 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1292 Serial.print(F(
" IC "));
1293 Serial.print(current_ic+1,DEC);
1295 for(
int i = 0;
i < 6;
i++)
1297 Serial.print(F(
", 0x"));
1301 Serial.print(F(
", Calculated PEC: 0x"));
1302 sctrl_pec =
pec15_calc(6,&BMS_IC[current_ic].sctrl.tx_data[0]);
1304 Serial.print(F(
", 0x"));
1306 Serial.println(
"\n");
1316 Serial.println(F(
"Received Data from Sctrl register A:"));
1317 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1319 Serial.print(F(
" IC "));
1320 Serial.print(current_ic+1,DEC);
1322 for(
int i = 0;
i < 6;
i++)
1324 Serial.print(F(
", 0x"));
1328 Serial.print(F(
", Received PEC: 0x"));
1330 Serial.print(F(
", 0x"));
1332 Serial.println(
"\n");
1345 Serial.println(F(
"PWM/S control register group B: "));
1346 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1350 Serial.print(F(
"IC "));
1351 Serial.print(current_ic+1,DEC);
1352 Serial.print(F(
": 0x"));
1354 Serial.print(F(
", 0x"));
1356 Serial.print(F(
", 0x"));
1358 Serial.print(F(
", 0x"));
1360 Serial.print(F(
", 0x"));
1362 Serial.print(F(
", 0x"));
1365 Serial.print(F(
", Calculated PEC: 0x"));
1366 psb_pec =
pec15_calc(6,&BMS_IC[current_ic].pwmb.tx_data[0]);
1368 Serial.print(F(
", 0x"));
1370 Serial.println(
"\n");
1374 Serial.print(F(
"IC "));
1375 Serial.print(current_ic+1,DEC);
1376 Serial.print(F(
": 0x"));
1378 Serial.print(F(
", 0x"));
1380 Serial.print(F(
", 0x"));
1382 Serial.print(F(
", 0x"));
1384 Serial.print(F(
", 0x"));
1386 Serial.print(F(
", 0x"));
1390 Serial.print(F(
", Calculated PEC: 0x"));
1391 psb_pec =
pec15_calc(6,&BMS_IC[current_ic].sctrlb.tx_data[0]);
1393 Serial.print(F(
", 0x"));
1395 Serial.println(
"\n");
1408 Serial.println(F(
"PWM/S control register group B:"));
1411 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1413 Serial.print(F(
"IC "));
1414 Serial.print(current_ic+1,DEC);
1415 Serial.print(F(
": 0x"));
1417 Serial.print(F(
", 0x"));
1419 Serial.print(F(
", 0x"));
1421 Serial.print(F(
", 0x"));
1423 Serial.print(F(
", 0x"));
1425 Serial.print(F(
", 0x"));
1428 Serial.print(F(
", Received PEC: 0x"));
1430 Serial.print(F(
", 0x"));
1432 Serial.println(
"\n");
1437 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1439 Serial.print(F(
" IC "));
1440 Serial.print(current_ic+1,DEC);
1441 Serial.print(F(
": 0x"));
1443 Serial.print(F(
", 0x"));
1445 Serial.print(F(
", 0x"));
1447 Serial.print(F(
", 0x"));
1449 Serial.print(F(
", 0x"));
1451 Serial.print(F(
", 0x"));
1454 Serial.print(F(
", Received PEC: 0x"));
1456 Serial.print(F(
", 0x"));
1458 Serial.println(
"\n");
1471 Serial.println(F(
"Written Data in COMM Register: "));
1472 for (
int current_ic = 0; current_ic<
TOTAL_IC; current_ic++)
1474 Serial.print(F(
" IC- "));
1475 Serial.print(current_ic+1,DEC);
1477 for(
int i = 0;
i < 6;
i++)
1479 Serial.print(F(
", 0x"));
1482 Serial.print(F(
", Calculated PEC: 0x"));
1483 comm_pec =
pec15_calc(6,&BMS_IC[current_ic].com.tx_data[0]);
1485 Serial.print(F(
", 0x"));
1487 Serial.println(
"\n");
1497 Serial.println(F(
"Received Data in COMM register:"));
1498 for (
int current_ic=0; current_ic<
TOTAL_IC; current_ic++)
1500 Serial.print(F(
" IC- "));
1501 Serial.print(current_ic+1,DEC);
1503 for(
int i = 0;
i < 6;
i++)
1505 Serial.print(F(
", 0x"));
1508 Serial.print(F(
", Received PEC: 0x"));
1510 Serial.print(F(
", 0x"));
1512 Serial.println(
"\n");
1522 for (
int current_ic = 0 ; current_ic <
TOTAL_IC; current_ic++)
1524 Serial.print(F(
" Mute bit in Configuration Register B: 0x"));
1526 Serial.println(
"\n");
1536 uint16_t m_factor=1000;
1538 Serial.print(F(
"Conversion completed in:"));
1539 Serial.print(((
float)conv_time/m_factor), 1);
1540 Serial.println(F(
"ms \n"));
1551 Serial.println(F(
"A PEC error was detected in the received data"));
1561 Serial.println(data);
1573 Serial.print((byte)data,HEX);
1576 Serial.print((byte)data,HEX);
1584 '0',
'1',
'2',
'3',
'4',
'5',
'6',
'7',
'8',
'9',
'A',
'B',
'C',
'D',
'E',
'F' 1592 '0',
'x',
'0',
'0',
'\0' 1625 while (Serial.available() <= 0);
1626 return(Serial.read());
static void print_wrsctrl(void)
void LTC6812_diagn()
Starts the Mux Decoder diagnostic self test Running this command will start the Mux Decoder Diagnosti...
void LTC6812_wrcfg(uint8_t total_ic, cell_asic *ic)
Write the LTC6812 configuration register.
const uint8_t SEL_REG_B
Register Selection.
void LTC6812_adstat(uint8_t MD, uint8_t CHST)
Start a Status ADC Conversion.
const uint8_t MEASURE_AUX
This is to ENABLED or DISABLED reading the auxiliary registers in a continuous loop.
int16_t LTC6812_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...
cell_asic BMS_IC[TOTAL_IC]
Global Battery Variable.
unsigned char user_command
uint8_t tx_data[6]
Stores data to be transmitted.
void LTC6812_set_discharge(int Cell, uint8_t total_ic, cell_asic *ic)
Helper function to set discharge bit in CFG register.
const uint8_t SEL_REG_A
Register Selection.
#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 ...
uint16_t LTC6812_run_adc_overlap(uint8_t total_ic, cell_asic *ic)
Helper Function that runs the ADC Overlap test.
LTC6812: Multicell Battery Monitors.
void LTC6812_reset_crc_count(uint8_t total_ic, cell_asic *ic)
Helper Function that resets the PEC error counters.
const uint8_t READ_CONFIG
This is to ENABLED or DISABLED reading the configuration registers in a continuous loop...
const uint8_t PRINT_PEC
This is to ENABLED or DISABLED printing the PEC Error Count in a continuous loop. ...
void LTC6812_init_cfgb(uint8_t total_ic, cell_asic *ic)
Helper Function to initialize the CFGR B data structures.
void LTC6812_run_gpio_openwire(uint8_t total_ic, cell_asic *ic)
Runs open wire for GPIOs.
static void check_mute_bit(void)
const uint8_t WRITE_CONFIG
This is to ENABLED or DISABLED writing into to configuration registers in a continuous loop...
const uint8_t SEL_ALL_REG
Register Selection.
static void serial_print_hex(uint8_t data)
static void print_rxconfig(void)
const uint8_t ADC_OPT
ADC Mode option bit.
const uint8_t TOTAL_IC
Number of ICs in the daisy chain.
const uint8_t ADC_CONVERSION_MODE
ADC Mode.
Header File for Linduino Libraries and Demo Code.
void LTC6812_unmute()
Clears the LTC6812 Mute Discharge.
static void check_mux_fail(void)
int8_t LTC6812_rdstat(uint8_t reg, uint8_t total_ic, cell_asic *ic)
Reads and parses the LTC6812 stat registers.
#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...
static void print_sumofcells(void)
void spi_enable(uint8_t spi_clock_divider)
Setup the processor for hardware SPI communication.
bool ADCOPT
ADC Mode option bit.
const uint16_t OV_THRESHOLD
Over voltage threshold ADC Code.
const uint16_t UV_THRESHOLD
Under voltage threshold ADC Code.
int8_t LTC6812_rdsctrl(uint8_t total_ic, uint8_t sctrl_reg, cell_asic *ic)
Reads sctrl registers of a LTC6812 daisy chain.
void LTC6812_adcvsc(uint8_t MD, uint8_t DCP)
Starts cell voltage and SOC conversion.
void LTC6812_stsctrl()
Start Sctrl data communication This command will start the sctrl pulse communication over the spins...
char hex_to_byte_buffer[5]
union LT_union_int32_4bytes data
static void measurement_loop(uint8_t datalog_en)
void LTC6812_init_reg_limits(uint8_t total_ic, cell_asic *ic)
Initialize the Register limits.
static uint16_t UV
Under voltage Comparison Voltage.
bool DTMEN
Enable Discharge Timer Monitor.
static void print_conv_time(uint32_t conv_time)
static void print_rxpwm(void)
const uint8_t STAT_CH_TO_CONVERT
Channel Selection for ADC conversion.
void LTC6812_run_openwire_multi(uint8_t total_ic, cell_asic *ic)
Runs the data sheet algorithm for open wire for multiple cell and two consecutive cells detection...
static uint16_t OV
Over voltage Comparison Voltage.
void LTC6812_clrsctrl()
Clears the LTC6812 Sctrl registers.
static void run_command(uint32_t cmd)
bool GPIOBITS_A[5]
GPIO Pin Control // Gpio 1,2,3,4,5.
const uint16_t MEASUREMENT_LOOP_TIME
Loop Time in milliseconds(ms)
uint32_t LTC6812_pollAdc()
This function will block operation until the ADC has finished it's conversion.
void LTC6812_set_cfgrb(uint8_t nIC, cell_asic *ic, bool fdrf, bool dtmen, bool ps[2], bool gpiobits[4], bool dccbits[4])
Helper function to set appropriate bits in CFGR register based on bit function.
static void print_rxconfigb(void)
void LTC6812_clear_discharge(uint8_t total_ic, cell_asic *ic)
Clears all of the DCC bits in the configuration registers.
int16_t LTC6812_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_cells(uint8_t datalog_en)
bool FDRF
Force Digital Redundancy Failure Bit.
static void print_overlap_results(int8_t error)
static void serial_print_text(char data[])
void LTC6812_wrpwm(uint8_t total_ic, uint8_t pwmReg, cell_asic *ic)
Write the LTC6812 PWM register.
static void print_wrcomm(void)
static void check_error(int error)
#define input(pin)
Return the state of pin "pin".
static void print_wrpwm(void)
void LTC6812_run_openwire_single(uint8_t total_ic, cell_asic *ic)
Runs the data sheet algorithm for open wire for single cell detection.
uint8_t cell_channels
Number of Cell channels.
static void print_stat(void)
void LTC6812_init_cfg(uint8_t total_ic, cell_asic *ic)
Helper Function to initialize the CFGR data structures.
const uint8_t CELL_CH_TO_CONVERT
Channel Selection for ADC conversion.
static void print_pec_error_count(void)
void LTC6812_clrcell()
Clears the LTC6812 cell voltage registers.
void LTC6812_adcvax(uint8_t MD, uint8_t DCP)
Starts cell voltage and GPIO 1&2 conversion.
const uint8_t MEASURE_CELL
This is to ENABLED or DISABLED measuring the cell voltages in a continuous loop.
void LTC6812_adax(uint8_t MD, uint8_t CHG)
Start a GPIO and Vref2 Conversion.
int8_t LTC6812_rdcfgb(uint8_t total_ic, cell_asic *ic)
Reads configuration registers of a LTC6812 daisy chain.
void LTC6812_wrsctrl(uint8_t total_ic, uint8_t sctrl_reg, cell_asic *ic)
Write the LTC6812 Sctrl register.
uint16_t pec15_calc(uint8_t len, uint8_t *data)
void LTC6812_stcomm(uint8_t len)
Issues a stcomm command and clocks data out of the COMM register.
bool PSBits[2]
Digital Redundancy Path Selection//ps-0,1.
bool GPIOBITS_B[4]
GPIO Pin Control // Gpio 6,7,8,9.
LT_SPI: Routines to communicate with ATmega328P's hardware SPI port.
void LTC6812_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.
static void print_open_wires(void)
static void print_menu(void)
const uint8_t AUX_CH_TO_CONVERT
Channel Selection for ADC conversion.
void LTC6812_mute()
Mutes the LTC6812 discharge transistors.
static void print_wrconfigb(void)
int8_t LTC6812_rdcfg(uint8_t total_ic, cell_asic *ic)
Reads configuration registers of a LTC6812 daisy chain.
int8_t LTC6812_rdpsb(uint8_t total_ic, cell_asic *ic)
Reading pwm/s control register b.
static void print_selftest_errors(uint8_t adc_reg, int8_t error)
void quikeval_SPI_connect()
Connect SPI pins to QuikEval connector through the Linduino MUX. This will disconnect I2C...
bool DCCBITS_B[7]
Discharge cell switch //Dcc 0,13,14,15.
int8_t LTC6812_rdpwm(uint8_t total_ic, uint8_t pwmReg, cell_asic *ic)
Reads pwm registers of a LTC6811 daisy chain.
const uint8_t MEASURE_STAT
This is to ENABLED or DISABLED reading the status registers in a continuous loop. ...
static void print_digital_redundancy_errors(uint8_t adc_reg, int8_t error)
static int8_t select_s_pin(void)
void LTC6812_wrcfgb(uint8_t total_ic, cell_asic *ic)
Write the LTC6812 configuration register B.
void LTC6812_clraux()
Clears the LTC6812 Auxiliary registers.
static void print_rxsctrl(void)
static void print_wrconfig(void)
static void print_aux1(void)
bool DCTOBITS[4]
Discharge time value //Dcto 0,1,2,3 // Programed for 4 min.
void LTC6812_clrstat()
Clears the LTC6812 Stat registers.
void LTC6812_wrcomm(uint8_t total_ic, cell_asic *ic)
Write the LTC6812 COMM register.
static void print_rxpsb(uint8_t type)
bool REFON
Reference Powered Up Bit.
int8_t LTC6812_rdcomm(uint8_t total_ic, cell_asic *ic)
Reads comm registers of a LTC6812 daisy chain.
static void print_aux(uint8_t datalog_en)
int8_t LTC6812_rdaux(uint8_t reg, uint8_t total_ic, cell_asic *ic)
Reads and parses the LTC6812 auxiliary registers.
void LTC6812_adcv(uint8_t MD, uint8_t DCP, uint8_t CH)
Starts cell voltage conversion.
void LTC6812_wrpsb(uint8_t total_ic, cell_asic *ic)
Write the 6812 PWM/Sctrl Register B.
char byte_to_hex_buffer[3]
const uint8_t ADC_DCP
Discharge Permitted.
static void print_wrpsb(uint8_t type)
bool DCCBITS_A[12]
Discharge cell switch //Dcc 1,2,3,4,5,6,7,8,9,10,11,12.
uint8_t LTC6812_rdcv(uint8_t reg, uint8_t total_ic, cell_asic *ic)
Reads and parses the LTC6812 cell voltage registers.
static void print_rxcomm(void)