Skip to content

Commit 346f878

Browse files
author
Max 'MaxMax' Mönikes
committed
Implemented Error and Errorpin handling
1 parent 4f254c9 commit 346f878

File tree

2 files changed

+128
-4
lines changed

2 files changed

+128
-4
lines changed

TLE9012.cpp

Lines changed: 109 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,8 @@ TLE9012::TLE9012() //Constructor
4242
errorcallbacks.open_load_error_callback = NULL;
4343
errorcallbacks.overvoltage_callback = NULL;
4444
errorcallbacks.reg_crc_error_callback = NULL;
45-
errorcallbacks.undevoltage_callback = NULL;
45+
errorcallbacks.undervoltage_callback = NULL;
46+
errorcallbacks.ps_error_sleep_callback = NULL;
4647
}
4748

4849
/*
@@ -287,7 +288,7 @@ void TLE9012::wakeUp()
287288
errorcallbacks.overvoltage_callback = errorhandler;
288289
break;
289290
case UNDERVOLTAGE_ERROR:
290-
errorcallbacks.undevoltage_callback = errorhandler;
291+
errorcallbacks.undervoltage_callback = errorhandler;
291292
break;
292293
case ADC_ERROR:
293294
errorcallbacks.adc_error_callback = errorhandler;
@@ -319,9 +320,114 @@ void TLE9012::wakeUp()
319320
void TLE9012::checkErrors(uint8_t nodeID)
320321
{
321322
uint16_t gen_diag = 0;
322-
readRegisterSingle(nodeID,GEN_DIAG,&gen_diag);
323+
(void) readRegisterSingle(nodeID,GEN_DIAG,&gen_diag);
324+
325+
if(gen_diag & 0x8000)
326+
{
327+
uint16_t balancing_oc_flags = 0;
328+
(void) readRegisterSingle(nodeID,BAL_DIAG_OC,&balancing_oc_flags);
329+
if(errorcallbacks.balancing_error_overcurrent_callback != NULL)
330+
errorcallbacks.balancing_error_overcurrent_callback(nodeID,balancing_oc_flags);
331+
}
332+
333+
if(gen_diag & 0x4000)
334+
{
335+
uint16_t balancing_uc_flags = 0;
336+
(void) readRegisterSingle(nodeID,BAL_DIAG_UC,&balancing_uc_flags);
337+
if(errorcallbacks.balancing_error_undercurrent_callback != NULL)
338+
errorcallbacks.balancing_error_undercurrent_callback(nodeID,balancing_uc_flags);
339+
}
340+
341+
if(gen_diag & 0x2000)
342+
{
343+
uint16_t cell_ov_diag = 0;
344+
(void) readRegisterSingle(nodeID,CELL_OV,&cell_ov_diag);
345+
if(errorcallbacks.overvoltage_callback != NULL)
346+
errorcallbacks.overvoltage_callback(nodeID,cell_ov_diag);
347+
}
348+
349+
if(gen_diag & 0x1000)
350+
{
351+
uint16_t cell_uv_diag = 0;
352+
(void) readRegisterSingle(nodeID,CELL_UV,&cell_uv_diag);
353+
if(errorcallbacks.undervoltage_callback != NULL)
354+
errorcallbacks.undervoltage_callback(nodeID,cell_uv_diag);
355+
}
356+
357+
if(gen_diag & 0x0800)
358+
{
359+
uint16_t overtemp = 0;
360+
(void) readRegisterSingle(nodeID,INT_TEMP,&overtemp);
361+
if(errorcallbacks.internal_temp_error_callback != NULL)
362+
errorcallbacks.internal_temp_error_callback(nodeID,overtemp);
363+
}
364+
365+
if(gen_diag & 0x0400)
366+
{
367+
uint16_t ext_temp_err = 0;
368+
(void) readRegisterSingle(nodeID,EXT_TEMP_DIAG,&ext_temp_err);
369+
if(errorcallbacks.external_temp_error_callback != NULL)
370+
errorcallbacks.external_temp_error_callback(nodeID,ext_temp_err);
371+
}
372+
373+
if(gen_diag & 0x0200)
374+
{
375+
uint16_t reg_crc = 0;
376+
(void) readRegisterSingle(nodeID,REG_CRC_ERR,&reg_crc);
377+
if(errorcallbacks.reg_crc_error_callback != NULL)
378+
errorcallbacks.reg_crc_error_callback(nodeID,reg_crc);
379+
}
380+
381+
if(gen_diag & 0x0100)
382+
{
383+
uint16_t ic_error = 0;
384+
if(errorcallbacks.internal_IC_error_callback != NULL)
385+
errorcallbacks.internal_IC_error_callback(nodeID,0x0000);
386+
}
387+
388+
if(gen_diag & 0x0080)
389+
{
390+
uint16_t open_load = 0;
391+
(void) readRegisterSingle(nodeID,DIAG_OL,&open_load);
392+
if(errorcallbacks.open_load_error_callback != NULL)
393+
errorcallbacks.open_load_error_callback(nodeID,open_load);
394+
}
395+
396+
if(gen_diag & 0x0040)
397+
{
398+
if(errorcallbacks.adc_error_callback != NULL)
399+
errorcallbacks.adc_error_callback(nodeID,0x0000);
400+
}
401+
402+
if(gen_diag & 0x0020)
403+
{
404+
if(errorcallbacks.ps_error_sleep_callback != NULL)
405+
errorcallbacks.ps_error_sleep_callback(nodeID,0x0000);
406+
}
323407
}
324408

409+
void TLE9012::resetErrors(uint8_t nodeID)
410+
{
411+
(void) writeRegisterSingle(nodeID,GEN_DIAG,0x0000);
412+
}
413+
414+
void TLE9012::configFaultMasks(uint8_t nodeID, err_emm_error_mask_t err_mask)
415+
{
416+
uint16_t errormask = 0;
417+
errormask |= err_mask.balancing_overcurrent_error<<15;
418+
errormask |= err_mask.balancing_undercurrent_error<<14;
419+
errormask |= err_mask.overvoltage_error << 13;
420+
errormask |= err_mask.undervoltage_error << 12;
421+
errormask |= err_mask.internal_temperature_error << 11;
422+
errormask |= err_mask.external_termperature_error << 10;
423+
errormask |= err_mask.reg_crc_err << 9;
424+
errormask |= err_mask.int_ic_err << 8;
425+
errormask |= err_mask.open_load_error << 7;
426+
errormask |= err_mask.adc_error << 6;
427+
errormask |= err_mask.err_pin << 5;
428+
429+
(void) writeRegisterSingle(nodeID,FAULT_MASK,errormask);
430+
}
325431
//Round Robin Functions
326432

327433
void TLE9012::setRoundRobinErrorHandling(uint8_t nodeID, uint16_t rr_sleep_interval, uint8_t rr_temp_measurement_interval, uint8_t n_errors)

TLE9012.h

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,10 +156,25 @@ typedef struct
156156
uint8_t balancing_overcurrent_error : 1;
157157
} rr_error_mask_t;
158158

159+
typedef struct
160+
{
161+
uint8_t err_pin : 1;
162+
uint8_t adc_error : 1;
163+
uint8_t open_load_error : 1;
164+
uint8_t int_ic_err : 1;
165+
uint8_t reg_crc_err : 1;
166+
uint8_t external_termperature_error : 1;
167+
uint8_t internal_temperature_error : 1;
168+
uint8_t undervoltage_error : 1;
169+
uint8_t overvoltage_error : 1;
170+
uint8_t balancing_undercurrent_error : 1;
171+
uint8_t balancing_overcurrent_error : 1;
172+
} err_emm_error_mask_t;
173+
159174
typedef struct
160175
{
161176
void (*overvoltage_callback)(uint8_t nodeID, uint16_t ov_flags);
162-
void (*undevoltage_callback)(uint8_t nodeID, uint16_t uv_flags);
177+
void (*undervoltage_callback)(uint8_t nodeID, uint16_t uv_flags);
163178
void (*adc_error_callback)(uint8_t nodeID, uint16_t filler);
164179
void (*internal_IC_error_callback)(uint8_t nodeID, uint16_t filler);
165180
void (*open_load_error_callback)(uint8_t nodeID, uint16_t diag_ol);
@@ -168,6 +183,7 @@ typedef struct
168183
void (*internal_temp_error_callback)(uint8_t nodeID, uint16_t internal_temp);
169184
void (*balancing_error_undercurrent_callback)(uint8_t nodeID, uint16_t bal_diag_uc);
170185
void (*balancing_error_overcurrent_callback)(uint8_t nodeID,uint16_t bal_diag_ov);
186+
void (*ps_error_sleep_callback)(uint8_t nodeID, uint16_t filler);
171187

172188
} tle9012_error_callbacks_t;
173189

@@ -234,6 +250,8 @@ typedef struct
234250
void checkDiagnoseResistor(uint8_t nodeID);
235251
void attachErrorHandler(tle9012_error_t errortype, void (*errorhandler)(uint8_t, uint16_t));
236252
void checkErrors(uint8_t nodeID);
253+
void resetErrors(uint8_t nodeID);
254+
void configFaultMasks(uint8_t nodeID, err_emm_error_mask_t err_mask);
237255

238256
//Round Robin Functions
239257

0 commit comments

Comments
 (0)