8#include "dev_iso_voltage_sense.h"
9#include "../sources/fault/fault_common.h"
28static uint16_t interrupt_counter = 0;
51void Dev_Iso_Voltage_Sens_Callback(
void);
52void Dev_Iso_Voltage_Sens_Calculate_Average(
void);
53uint16_t Iso_Calculate_Average(uint16_t * buffer, uint16_t length);
54void default_faultcallback_max(
FAULT_OBJ_T* faultInput);
55void default_faultcallback_min(
FAULT_OBJ_T* faultInput);
70void Dev_Iso_Voltage_Sens_Init(){
71 dev_iso_voltage_data.over_voltage_flag = 0;
72 dev_iso_voltage_data.under_voltage_flag = 0;
73 dev_iso_voltage_data.no_signal_flag = 0;
74 dev_iso_voltage_data.buffer_full = 0;
75 dev_iso_voltage_data.voltage_buffer_idx = 0;
80 UV_LOWER_THRESHOLD_WITH_HYST,
81 FAULT_PERSISTENCE_COUNT,
82 FAULT_PERSISTENCE_COUNT
88 OV_UPPER_THRESHOLD_WITH_HYST,
89 FAULT_PERSISTENCE_COUNT,
90 FAULT_PERSISTENCE_COUNT ) ;
92 InputCapture_CallbackRegister(Dev_Iso_Voltage_Sens_Callback);
104void Dev_Iso_Voltage_Task_1ms(
void) {
106 if (interrupt_counter < INTERRUPT_COUNTS_MIN || interrupt_counter > INTERRUPT_COUNTS_MAX)
107 dev_iso_voltage_data.no_signal_flag = 1;
109 dev_iso_voltage_data.no_signal_flag = 0;
111 interrupt_counter = 0;
123void Dev_Reset_Average_Buffer() {
124 dev_iso_voltage_data.voltage_buffer_idx = 0;
125 dev_iso_voltage_data.buffer_full = 0;
136uint16_t Dev_Get_Iso_Voltage_avg(
void)
138 if (dev_iso_voltage_data.buffer_full)
139 return Iso_Calculate_Average(dev_iso_voltage_data.voltage_buffer, MAX_NUM_SAMPLES_ISO_BUFFER);
151uint16_t Dev_Get_Iso_Voltage(
void)
153 return dev_iso_voltage_data.voltage_raw;
164uint8_t Dev_Iso_Voltage_Is_OV(
void)
166 return dev_iso_voltage_data.over_voltage_flag;
176uint8_t Dev_Iso_Voltage_Is_UV(
void)
178 return dev_iso_voltage_data.under_voltage_flag;
202void Dev_Iso_Voltage_Sens_Callback() {
204 static uint16_t vdd_sens_buff[CCP_INPUT_CAPTURE_BUFFER];
206 if (InputCapture_bufferoverflow)
209 while ((!InputCapture_BufferEmpty) || (i < CCP_INPUT_CAPTURE_BUFFER))
211 vdd_sens_buff[i++] = CCP_BUF_L;
213 dev_iso_voltage_data.voltage_raw = vdd_sens_buff[2] - vdd_sens_buff[1];
214 dev_iso_voltage_data.voltage_buffer[dev_iso_voltage_data.voltage_buffer_idx++] = dev_iso_voltage_data.voltage_raw ;
216 CCP_TIMER_HIGH_REG = 0;
217 CCP_TIMER_LOW_REG = 0;
219 CCP_INTERRUPT_FLAG = 0;
221 interrupt_counter++ ;
223 if (dev_iso_voltage_data.voltage_buffer_idx >= (MAX_NUM_SAMPLES_ISO_BUFFER - 1)) {
224 dev_iso_voltage_data.voltage_buffer_idx = 0;
225 dev_iso_voltage_data.buffer_full = 1;
228 if(
FAULT_CheckMax(&Vin_Fault_Max, dev_iso_voltage_data.voltage_raw, NULL ))
230 dev_iso_voltage_data.over_voltage_flag = 1;
234 dev_iso_voltage_data.over_voltage_flag = 0;
237 if(
FAULT_CheckMin(&Vin_Fault_Min, dev_iso_voltage_data.voltage_raw, NULL ))
239 dev_iso_voltage_data.under_voltage_flag = 1;
243 dev_iso_voltage_data.under_voltage_flag = 0;
257uint16_t Iso_Calculate_Average(uint16_t * buffer, uint16_t length) {
260 for (index = 0; index <length; index++)
262 return (sum >> MAX_NUM_SAMPLES_ISO_BUFFER_AS_EXP_OF_TWO);
bool FAULT_CheckMax(FAULT_OBJ_T *faultInput, int16_t faultSource, FAULT_CALLBACK callback)
This function compares the fault source value with the threshold limits and sets (or) resets the faul...
bool FAULT_CheckMin(FAULT_OBJ_T *faultInput, int16_t faultSource, FAULT_CALLBACK callback)
This function compares the fault source value with the threshold limits and sets (or) resets the faul...
void FAULT_Init(FAULT_OBJ_T *faultInput, int16_t threshold, int16_t hysLimit, uint16_t thresholdCnt, uint32_t hysCnt)
This function initializes the fault object data structure with the values that required to detect a f...
The Fault object data structure contains a list of elements/variables that are used to detect/check a...
a custom data type for isolated voltage measurement