You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
214 lines
3.8 KiB
214 lines
3.8 KiB
#ifndef APP_TASK_ADC_H
|
|
#define APP_TASK_ADC_H
|
|
|
|
#include "common.h"
|
|
#include "../ctask/task.h"
|
|
#include "../bsp/bsp_cs1232.h"
|
|
#include "../bsp/bsp_config.h"
|
|
|
|
|
|
#define D_ADC_BLUR_MID_MAX 5
|
|
|
|
enum D_TASK_ADC_CHANNEL
|
|
{
|
|
TS_ADC_CH_01 = 0x00,
|
|
TS_ADC_CH_02 = 0x01,
|
|
TS_ADC_CH_03 = 0x02,
|
|
TS_ADC_CH_04 = 0x03,
|
|
};
|
|
|
|
//对每一路进行采样
|
|
#define D_ADC_CH_SAMPLE_BUF_MAX 50
|
|
#define D_ADC_CH_BLUE_POOL_NUM 3
|
|
#define MAX_OUT_NUM 10
|
|
|
|
typedef struct
|
|
{
|
|
TS_task task;
|
|
vU8 pending_ch;
|
|
}TS_ADC_CH_SWITCH;
|
|
|
|
typedef struct
|
|
{
|
|
TS_task task;
|
|
vS32 adcval;
|
|
vS32 status;
|
|
vS32 pool;
|
|
vU8 ch;
|
|
vU8 n;
|
|
vU32 out[MAX_OUT_NUM];
|
|
}TS_ADC_CH_SAMPLE;
|
|
|
|
//中值滤波
|
|
typedef struct ts_adc_ch_mid_blur
|
|
|
|
{
|
|
TS_task task;
|
|
vU8 ch;
|
|
vU8 max;
|
|
vU32 in[MAX_OUT_NUM];
|
|
vU32 midval;
|
|
vU8 n;
|
|
vU32 out[MAX_OUT_NUM];
|
|
}TS_ADC_CH_MID_BLUR;
|
|
|
|
// 均值滤波
|
|
typedef struct ts_adc_ch_avg_blur
|
|
{
|
|
TS_task task;
|
|
vU8 ch;
|
|
vU8 max;
|
|
vU32 in[MAX_OUT_NUM];
|
|
vU32 avgval;
|
|
vU8 n;
|
|
vU32 out[MAX_OUT_NUM];
|
|
}TS_ADC_CH_AVG_BLUR;
|
|
|
|
// 移位滤波
|
|
typedef struct ts_adc_ch_shift_blur
|
|
{
|
|
TS_task task;
|
|
vU8 ch;
|
|
vU8 h;//均值有数值
|
|
vU8 n;//移位有值
|
|
vU8 max;
|
|
vU32 in;
|
|
vU32 sum;
|
|
vU32 shiftval;
|
|
vU32 out[MAX_OUT_NUM];
|
|
}TS_ADC_CH_SHIFT_BLUR;
|
|
|
|
#if 0
|
|
//对每一路进行滤波
|
|
typedef struct
|
|
{
|
|
TS_task task;
|
|
vU8 ch;
|
|
vU8 ch_n;
|
|
|
|
//平均滤波
|
|
vS32 SA_sum;
|
|
vS32 SA_avg;
|
|
vS32 SA_n;
|
|
|
|
//移位滤波
|
|
vS32 SHA_sum;
|
|
vS32 SHA_avg;
|
|
|
|
vU8 n;
|
|
}TS_ADC_CH_BLUR;
|
|
#endif
|
|
|
|
//和值滤波
|
|
typedef struct
|
|
{
|
|
TS_task task;
|
|
vU8 n;
|
|
vS32 sum;
|
|
|
|
vS32 SHA_sum_0;
|
|
vS32 SHA_avg_0;
|
|
vS32 SHA_pool_0[D_ADC_CH_BLUE_POOL_NUM];
|
|
|
|
vS32 SHA_sum_1;
|
|
vS32 SHA_avg_1;
|
|
//vS32 SHA_pool_1[D_ADC_CH_BLUE_POOL_NUM];
|
|
}TS_ADC_ALL_BLUR;
|
|
|
|
//和值阈值判定(滤波方式切换)决定输出
|
|
#define D_ADC_ALL_OUT_POOL_NUM 5
|
|
typedef struct
|
|
{
|
|
TS_task task;
|
|
vS32 val;
|
|
vS32 SHA_pool[D_ADC_CH_BLUE_POOL_NUM];
|
|
vU32 SHA_diff[D_ADC_CH_BLUE_POOL_NUM-1];
|
|
vU32 SHA_ddiff[D_ADC_CH_BLUE_POOL_NUM-2];
|
|
vU8 n;
|
|
vS32 sum;
|
|
}TS_ADC_ALL_OUT;
|
|
|
|
typedef struct
|
|
{
|
|
TS_task task;
|
|
vS8 pool_gt;
|
|
vS32 pool_val;
|
|
vS32 val;
|
|
vU16 u16_v;
|
|
U32 diff_val;
|
|
vU8 times[D_weight_show_limit_num];
|
|
U8 stable;
|
|
}TS_ADC_SHOW;
|
|
|
|
typedef struct
|
|
{
|
|
TS_task task;
|
|
U8 cnt1;//不稳定判定次数
|
|
U8 cnt2;//稳定判定次数
|
|
vS32 r_val;//实际值
|
|
vS32 s_val;//显示值
|
|
vS32 r_val_pool;//上一个实际值
|
|
vU8 n;
|
|
}TS_ADC_STABLE;
|
|
|
|
|
|
#if 0
|
|
typedef struct _TS_ADC_SampleM_
|
|
{
|
|
//中值滤波
|
|
vS32 mid[D_ADC_BLUR_MID_MAX];
|
|
vS32 midv;
|
|
|
|
//均值滤波
|
|
vS32 SA_sum;
|
|
vS32 SA_avg;
|
|
|
|
//移位滤波
|
|
vS32 SHA_sum;
|
|
vS32 SHA_avg;
|
|
}TS_ADC_SampleM;
|
|
|
|
typedef struct
|
|
{
|
|
TS_task task;
|
|
vU8 error;
|
|
vU8 m_n;
|
|
vU8 a_n;
|
|
vU8 ch;
|
|
vU8 ch_n;
|
|
vU16 u16_v;
|
|
TS_ADC_SampleM ts_sample;
|
|
}TS_task_ADC_;
|
|
#endif
|
|
|
|
extern TS_ADC_CH_SWITCH ts_adc_ch_switch;
|
|
extern TS_ADC_CH_SAMPLE ts_adc_ch_sample[D_ch_max_num];
|
|
extern TS_ADC_CH_MID_BLUR ts_adc_ch_mid_blur[D_ch_max_num];
|
|
extern TS_ADC_CH_AVG_BLUR ts_adc_ch_avg_blur[D_ch_max_num];
|
|
extern TS_ADC_CH_SHIFT_BLUR ts_adc_ch_shift_blur[D_ch_max_num];
|
|
|
|
//extern TS_ADC_CH_BLUR ts_adc_ch_blur[D_ch_max_num];
|
|
extern TS_ADC_ALL_BLUR ts_adc_all_blur;
|
|
extern TS_ADC_ALL_OUT ts_adc_all_out;
|
|
extern TS_ADC_SHOW ts_adc_show;
|
|
extern TS_ADC_STABLE ts_adc_stable;
|
|
|
|
|
|
extern void L3_task_adc_init(U8 ch);
|
|
extern void L3_task_adc_ch_sample(TS_ADC_CH_SAMPLE *s);
|
|
//extern void L3_task_adc_all_blur(TS_ADC_ALL_BLUR *s);
|
|
//extern void L3_task_adc_all_out(TS_ADC_ALL_OUT *s);
|
|
extern void L3_task_adc_show(TS_ADC_SHOW *s);
|
|
extern void L3_task_show_times_reset();
|
|
//extern void L3_task_weight_stable(TS_ADC_STABLE *s);
|
|
extern void L3_task_weight_init(void);
|
|
//extern void L3_task_adc_ch_mid_blur(TS_ADC_CH_MID_BLUR *s);
|
|
//extern void L3_task_adc_ch_avg_blur(TS_ADC_CH_AVG_BLUR *s);
|
|
//extern void L3_task_adc_ch_shift_blur(TS_ADC_CH_SHIFT_BLUR *s);
|
|
extern void L3_task_adc_handler(u8 ch);
|
|
extern void L3_task_all_adc_handler(void);
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|