15 changed files with 119 additions and 746 deletions
Binary file not shown.
@ -1,418 +0,0 @@ |
|||||
////////////////////////////////////////////////////////////////////////////
|
|
||||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|
||||
///-------------------------------------------------------------------------
|
|
||||
/// @file bsp_drv.c
|
|
||||
/// @brief bsp @ driver config
|
|
||||
///-------------------------------------------------------------------------
|
|
||||
/// @version 1.0
|
|
||||
/// @author CC
|
|
||||
/// @date 20180331
|
|
||||
/// @note cc_AS_stc02
|
|
||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||
|
|
||||
#include "task_adc.h" |
|
||||
#include "../bsp/bsp_config.h" |
|
||||
#include "../bsp/cs1232.h" |
|
||||
#include "../msp/uart0.h" |
|
||||
|
|
||||
//=============================================
|
|
||||
|
|
||||
//S_TASK_ADC_CHANNEL_BLUR ts_adc_channel_blurs[D_ADC_CHANNEL_NUM];
|
|
||||
//S_TASK_ADC_CHANNEL_SHOW ts_adc_channel_show;
|
|
||||
|
|
||||
S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM]; |
|
||||
//S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
|
|
||||
S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM]; |
|
||||
S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM]; |
|
||||
S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM]; |
|
||||
S_TASK_ADC_BLUR_SHOW ts_adc_blur_show; |
|
||||
|
|
||||
static U8 count_n(u8 n,u8 d) |
|
||||
{ |
|
||||
if(n < d) |
|
||||
{ |
|
||||
return MAX_OUT_NUM + n - d ; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
return n-d; |
|
||||
} |
|
||||
} |
|
||||
|
|
||||
U32 Abs(S32 a) |
|
||||
{ |
|
||||
if(a < 0) |
|
||||
{ |
|
||||
a = -a; |
|
||||
} |
|
||||
return a; |
|
||||
} |
|
||||
//ch是0123,代表4通道
|
|
||||
void L3_task_adc_init(U8 ch) |
|
||||
{ |
|
||||
//通道采集任务初始化
|
|
||||
// L1_task_init(&ts_adc_channel_samples[ch].task);
|
|
||||
// L3_task_s_go(ts_adc_channel_samples[ch],D_task_init);
|
|
||||
// ts_adc_channel_samples[ch].status = (R.p.adc_ch_status >> ch) & 0x1;
|
|
||||
// ts_adc_channel_samples[ch].pool = 0;
|
|
||||
// ts_adc_channel_samples[ch].adcval = 0;
|
|
||||
// ts_adc_channel_samples[ch].n = 0;
|
|
||||
// ts_adc_channel_samples[ch].ch = D_ADCCH_1 + ch;
|
|
||||
|
|
||||
#if 0 |
|
||||
//通道中值滤波任务初始化
|
|
||||
L1_task_init(&ts_adc_blur_mid[ch].task); |
|
||||
L3_task_s_go(ts_adc_blur_mid[ch],D_task_init); |
|
||||
ts_adc_blur_mid[ch].n = 0; |
|
||||
ts_adc_blur_mid[ch].max = R.p.adc_blur_mid; |
|
||||
ts_adc_blur_mid[ch].ch = D_ADCCH_1 + ch; |
|
||||
#endif |
|
||||
|
|
||||
//通道均值滤波任务初始化
|
|
||||
L1_task_init(&ts_adc_blur_avg[ch].task); |
|
||||
L3_task_s_go(ts_adc_blur_avg[ch],D_task_init); |
|
||||
ts_adc_blur_avg[ch].max = R.p.adc_blur_avg; |
|
||||
ts_adc_blur_avg[ch].avgval = 0; |
|
||||
ts_adc_blur_avg[ch].n = 0; |
|
||||
ts_adc_blur_avg[ch].ch = D_ADCCH_1 + ch; |
|
||||
|
|
||||
//通道移位滤波任务初始化
|
|
||||
L1_task_init(&ts_adc_blur_shift[ch].task); |
|
||||
L3_task_s_go(ts_adc_blur_shift[ch],D_task_init); |
|
||||
ts_adc_blur_shift[ch].n = 0; |
|
||||
ts_adc_blur_shift[ch].h = 0; |
|
||||
ts_adc_blur_shift[ch].shiftreg[0] = R.p.adc_blur_shift[0]; |
|
||||
ts_adc_blur_shift[ch].shiftreg[1] = R.p.adc_blur_shift[1]; |
|
||||
ts_adc_blur_shift[ch].shiftreg[2] = R.p.adc_blur_shift[2]; |
|
||||
ts_adc_blur_shift[ch].sum[0] = 0; |
|
||||
ts_adc_blur_shift[ch].sum[1] = 0; |
|
||||
ts_adc_blur_shift[ch].sum[2] = 0; |
|
||||
ts_adc_blur_shift[ch].shiftval[0] = 0; |
|
||||
ts_adc_blur_shift[ch].shiftval[1] = 0; |
|
||||
ts_adc_blur_shift[ch].shiftval[2] = 0; |
|
||||
ts_adc_blur_shift[ch].ch = D_ADCCH_1 + ch; |
|
||||
|
|
||||
//输出判定任务初始化
|
|
||||
L1_task_init(&ts_adc_blur_out[ch].task); |
|
||||
L3_task_s_go(ts_adc_blur_out[ch],D_task_init); |
|
||||
ts_adc_blur_out[ch].h= 0; |
|
||||
ts_adc_blur_out[ch].threshold[0] = D_COUNT_ADC(R.p.adc_blur_threshold[0]); //2KG
|
|
||||
ts_adc_blur_out[ch].threshold[1] = D_COUNT_ADC(R.p.adc_blur_threshold[1]); //0.5KG
|
|
||||
ts_adc_blur_out[ch].newnum = 0; |
|
||||
ts_adc_blur_out[ch].oldnum = 0; |
|
||||
ts_adc_blur_out[ch].newout = 0; |
|
||||
ts_adc_blur_out[ch].n = 0; |
|
||||
ts_adc_blur_out[ch].ch = D_ADCCH_1 + ch; |
|
||||
|
|
||||
#if 0 |
|
||||
//通道切换任务初始化
|
|
||||
//L1_task_init(&ts_adc_channel_switch.task);
|
|
||||
L3_task_s_go(ts_adc_channel_switch,D_task_init); |
|
||||
#endif |
|
||||
|
|
||||
} |
|
||||
|
|
||||
|
|
||||
void L3_task_show_init(void) |
|
||||
{ |
|
||||
//显示任务初始化
|
|
||||
L1_task_init(&ts_adc_blur_show.task); |
|
||||
L3_task_s_go(ts_adc_blur_show,D_task_init); |
|
||||
ts_adc_blur_show.rough_weight = 0; |
|
||||
} |
|
||||
|
|
||||
|
|
||||
//ADC Channel 采样任务
|
|
||||
#define D_task_ADC_CHx_SAMPLE_WAIT_LOW 0x53 |
|
||||
#define D_task_ADC_CHx_SAMPLE_READ 0x54 |
|
||||
#define D_task_ADC_CHx_SAMPLE_OUT 0x55 |
|
||||
void L3_task_adc_channel_sample(S_TASK_ADC_CHANNEL_SAMPLE *s) |
|
||||
{ |
|
||||
TTSS_Task_init() |
|
||||
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_WAIT_LOW) |
|
||||
if(s->status == ADC_CHANNEL_STATUS_READY) //需要判断status是否ready,ready则读取,否则使用pool值
|
|
||||
{ |
|
||||
if(0 == L0_2dc_DOUT_AT(s->ch)) |
|
||||
{ |
|
||||
L2_task_go(D_task_ADC_CHx_SAMPLE_READ); |
|
||||
} |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
s->adcval = s->pool; |
|
||||
L2_task_go_Tdelay(D_task_ADC_CHx_SAMPLE_OUT,D_Tdelay_Msec(15)); //延时15ms,模拟一次采样过程
|
|
||||
} |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_READ) |
|
||||
if(s->status == ADC_CHANNEL_STATUS_READY) //需要重新判断status是否ready,因为channel_switch任务随时可能修改status状态
|
|
||||
{ |
|
||||
s->adcval = Abs(L0_ADS1231_readCH(s->ch)); |
|
||||
L2_task_go(D_task_ADC_CHx_SAMPLE_OUT); |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW); |
|
||||
} |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_SAMPLE_OUT) |
|
||||
//不判断ready,不管是采集到的真实数据还是pool数据,都继续执行
|
|
||||
s->pool = s->adcval; |
|
||||
s->out[s->n] = s->adcval; |
|
||||
//R.adval[s->ch] = s->out[s->n];
|
|
||||
//L0_uart0_ulhex(R.adval[s->ch]);L0_uart0_0d0a();
|
|
||||
s->n++; |
|
||||
#if 0 |
|
||||
L0_uart0_ulhex(s->out[count_n(s->n,1)]); |
|
||||
L0_uart0_uc(' '); |
|
||||
//L0_uart0_ulhex(ts_adc_blur_mid[s->ch].out[count_n(ts_adc_blur_mid[s->ch].n,1)]);
|
|
||||
//L0_uart0_uc(' ');
|
|
||||
L0_uart0_ulhex(ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n,1)]); |
|
||||
L0_uart0_uc(' '); |
|
||||
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[0]); |
|
||||
L0_uart0_uc(' '); |
|
||||
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[1]); |
|
||||
L0_uart0_uc(' '); |
|
||||
L0_uart0_ulhex(ts_adc_blur_shift[s->ch].shiftval[2]); |
|
||||
L0_uart0_uc(' '); |
|
||||
L0_uart0_ulhex(R.adval[s->ch]); |
|
||||
L0_uart0_uc(' '); |
|
||||
L0_uart0_ulhex(ts_adc_blur_out[s->ch].oldnum); |
|
||||
L0_uart0_0d0a(); |
|
||||
#endif |
|
||||
|
|
||||
if(s->n >= MAX_OUT_NUM) |
|
||||
{ |
|
||||
s->n = 0; |
|
||||
} |
|
||||
L2_task_go(D_task_ADC_CHx_SAMPLE_WAIT_LOW); |
|
||||
|
|
||||
TTSS_Task_end(); |
|
||||
} |
|
||||
|
|
||||
#if 0 |
|
||||
//中值滤波任务
|
|
||||
#define D_task_ADC_CHx_FILTER_MID_GET 0x50 |
|
||||
#define D_task_ADC_CHx_FILTER_MID_COUNT 0x51 |
|
||||
#define D_task_ADC_CHx_FILTER_MID_OUT 0x52 |
|
||||
void L3_task_adc_filter_mid(S_TASK_ADC_BLUR_MID *s) |
|
||||
{ |
|
||||
TTSS_Task_init() |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_GET) |
|
||||
if(ts_adc_channel_samples[s->ch].n >= s->max) |
|
||||
{ |
|
||||
U8 i = 0; |
|
||||
for(i=0;i<s->max;i++) |
|
||||
{ |
|
||||
s->in[i] = ts_adc_channel_samples[s->ch].out[i]; |
|
||||
} |
|
||||
ts_adc_channel_samples[s->ch].n = 0; |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_MID_COUNT); |
|
||||
} |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_COUNT) |
|
||||
s->midval = Lc_vS32_media(s->in, s->max); |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_MID_OUT); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_MID_OUT) |
|
||||
s->out[s->n] = s->midval; |
|
||||
//R.adval[s->ch] = s->out[s->n];
|
|
||||
s->n++; |
|
||||
if(s->n >= MAX_OUT_NUM) |
|
||||
{ |
|
||||
s->n = 0; |
|
||||
} |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET); |
|
||||
|
|
||||
TTSS_Task_end(); |
|
||||
} |
|
||||
#endif |
|
||||
|
|
||||
|
|
||||
//均值滤波任务
|
|
||||
#define D_task_ADC_CHx_FILTER_AVG_GET 0x50 |
|
||||
#define D_task_ADC_CHx_FILTER_AVG_COUNT 0x51 |
|
||||
#define D_task_ADC_CHx_FILTER_AVG_OUT 0x52 |
|
||||
void L3_task_adc_filter_avg(S_TASK_ADC_BLUR_AVG *s) |
|
||||
{ |
|
||||
TTSS_Task_init() |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_GET) |
|
||||
if(ts_adc_channel_samples[s->ch].n >= s->max) |
|
||||
{ |
|
||||
U8 i = 0; |
|
||||
ts_adc_channel_samples[s->ch].n = 0; |
|
||||
for(i=0;i<s->max;i++) |
|
||||
{ |
|
||||
s->in[i] = ts_adc_channel_samples[s->ch].out[i]; |
|
||||
} |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_AVG_COUNT); |
|
||||
} |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_COUNT) |
|
||||
s->avgval = Lc_vU32_avg(s->in,s->max); |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_AVG_OUT); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_OUT) |
|
||||
s->out[s->n] = s->avgval; |
|
||||
//R.adval[s->ch] = s->out[s->n];
|
|
||||
s->n++; |
|
||||
if(s->n >= MAX_OUT_NUM) |
|
||||
{ |
|
||||
s->n = 0; |
|
||||
} |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_AVG_GET); |
|
||||
|
|
||||
TTSS_Task_end(); |
|
||||
|
|
||||
|
|
||||
} |
|
||||
|
|
||||
|
|
||||
//移位滤波任务
|
|
||||
#define D_task_ADC_CHx_FILTER_SHIFT_GET 0x50 |
|
||||
#define D_task_ADC_CHx_FILTER_SHIFT_COUNT 0x51 |
|
||||
#define D_task_ADC_CHx_FILTER_SHIFT_OUT 0x52 |
|
||||
void L3_task_adc_filter_shift(S_TASK_ADC_BLUR_SHIFT *s) |
|
||||
{ |
|
||||
TTSS_Task_init() |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_GET) |
|
||||
if(s->h != ts_adc_blur_avg[s->ch].n) |
|
||||
{ |
|
||||
s->in = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n,1)]; |
|
||||
s->h = ts_adc_blur_avg[s->ch].n; |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_COUNT); |
|
||||
} |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_COUNT) |
|
||||
s->sum[0] -= s->shiftval[0]; |
|
||||
s->sum[0] += s->in; |
|
||||
s->shiftval[0] = s->sum[0] >> s->shiftreg[0]; |
|
||||
s->sum[1] -= s->shiftval[1]; |
|
||||
s->sum[1] += s->in; |
|
||||
s->shiftval[1] = s->sum[1] >> s->shiftreg[1]; |
|
||||
s->sum[2] -= s->shiftval[2]; |
|
||||
s->sum[2] += s->in; |
|
||||
s->shiftval[2] = s->sum[2] >> s->shiftreg[2]; |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_OUT); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_OUT) |
|
||||
s->out[0][s->n] = s->shiftval[0]; |
|
||||
s->out[1][s->n] = s->shiftval[1]; |
|
||||
s->out[2][s->n] = s->shiftval[2]; |
|
||||
|
|
||||
|
|
||||
//R.adval[s->ch] = s->out[0][s->n] = s->shiftval[0];
|
|
||||
s->n++; |
|
||||
if(s->n >= MAX_OUT_NUM) |
|
||||
{ |
|
||||
s->n = 0; |
|
||||
} |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET); |
|
||||
|
|
||||
TTSS_Task_end(); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
//输出判定任务
|
|
||||
#define D_task_ADC_CHx_FILTER_OUT_GET 0x50 |
|
||||
#define D_task_ADC_CHx_FILTER_OUT_COUNT 0x51 |
|
||||
#define D_task_ADC_CHx_FILTER_OUT_CHANGE 0x52 |
|
||||
#define D_task_ADC_CHx_FILTER_OUT_OUT 0x53 |
|
||||
void L3_task_adc_filter_out(S_TASK_ADC_BLUR_OUT *s) |
|
||||
{ |
|
||||
TTSS_Task_init() |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_GET) |
|
||||
if(s->h != ts_adc_blur_shift[s->ch].n) |
|
||||
{ |
|
||||
s->h = ts_adc_blur_shift[s->ch].n; |
|
||||
s->in[0] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 1)]; |
|
||||
s->in[1] = ts_adc_blur_avg[s->ch].out[count_n(ts_adc_blur_avg[s->ch].n, 2)]; |
|
||||
//获取输出曲线val
|
|
||||
s->newout = ts_adc_blur_shift[s->ch].out[s->oldnum][count_n(ts_adc_blur_shift[s->ch].n, 1)]; |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_COUNT); |
|
||||
} |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_COUNT) //根据阀值选择输出的曲线
|
|
||||
//判断选择新曲线
|
|
||||
if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[0])//2KG
|
|
||||
{ |
|
||||
s->newnum = 0; |
|
||||
} |
|
||||
else if(Lc_abs(s->in[0] , s->in[1]) >= s->threshold[1]) //0.5KG
|
|
||||
{ |
|
||||
s->newnum = 1; |
|
||||
} |
|
||||
else |
|
||||
{ |
|
||||
s->newnum = 2; |
|
||||
} |
|
||||
//L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT);
|
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_CHANGE); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_CHANGE) |
|
||||
if(s->newnum != s->oldnum)//切换移位滤波时调整其他滤波的SUM
|
|
||||
{ |
|
||||
s->oldnum = s->newnum; //不能只调整新值,所有曲线都要一起调整
|
|
||||
//ts_adc_blur_shift[s->ch].sum[1] = (ts_adc_blur_avg[s->ch].out[ts_adc_blur_avg[s->ch].n] * R.adc_blur_avg);
|
|
||||
ts_adc_blur_shift[s->ch].sum[0] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[0]; |
|
||||
ts_adc_blur_shift[s->ch].shiftval[0] = s->newout; |
|
||||
ts_adc_blur_shift[s->ch].sum[1] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[1]; |
|
||||
ts_adc_blur_shift[s->ch].shiftval[1] = s->newout; |
|
||||
ts_adc_blur_shift[s->ch].sum[2] = s->newout << ts_adc_blur_shift[s->ch].shiftreg[2]; |
|
||||
ts_adc_blur_shift[s->ch].shiftval[2] = s->newout; |
|
||||
} |
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_OUT); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_FILTER_OUT_OUT) |
|
||||
R.adval[s->ch] = s->newout; |
|
||||
//R.adval[s->ch] = ts_adc_channel_samples[s->ch].adcval;
|
|
||||
L2_task_go(D_task_ADC_CHx_FILTER_OUT_GET); |
|
||||
|
|
||||
TTSS_Task_end(); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
|
|
||||
//显示任务
|
|
||||
#define D_task_ADC_CHx_SHOW 0x50 |
|
||||
void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s) |
|
||||
{ |
|
||||
TTSS_Task_init() |
|
||||
L2_task_go(D_task_ADC_CHx_SHOW); |
|
||||
|
|
||||
TTSS_Task_step(D_task_ADC_CHx_SHOW) |
|
||||
R.ch_weight[0] = D_COUNT_WEIGHT(R.adval[0]); |
|
||||
R.ch_weight[1] = D_COUNT_WEIGHT(R.adval[1]); |
|
||||
R.ch_weight[2] = D_COUNT_WEIGHT(R.adval[2]); |
|
||||
R.ch_weight[3] = D_COUNT_WEIGHT(R.adval[3]); |
|
||||
s->rough_weight = R.ch_weight[0] + R.ch_weight[1] + R.ch_weight[2] + R.ch_weight[3]; //毛重
|
|
||||
if( ABS(R.rough_weight,s->rough_weight) >= 50) //变化超过0.05KG
|
|
||||
{ |
|
||||
R.rough_weight = s->rough_weight; |
|
||||
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
|
|
||||
} |
|
||||
L2_task_go_Tdelay(D_task_ADC_CHx_SHOW,D_Tdelay_Msec(15)); //延时15ms
|
|
||||
|
|
||||
TTSS_Task_end(); |
|
||||
} |
|
||||
|
|
||||
void L3_task_adc_handler(u8 ch) |
|
||||
{ |
|
||||
L3_task_adc_channel_sample(&ts_adc_channel_samples[ch]); |
|
||||
//L3_task_adc_filter_mid(&ts_adc_blur_mid[ch]);
|
|
||||
L3_task_adc_filter_avg(&ts_adc_blur_avg[ch]); |
|
||||
L3_task_adc_filter_shift(&ts_adc_blur_shift[ch]); |
|
||||
L3_task_adc_filter_out(&ts_adc_blur_out[ch]); |
|
||||
} |
|
||||
|
|
||||
|
|
||||
|
|
@ -1,119 +0,0 @@ |
|||||
////////////////////////////////////////////////////////////////////////////
|
|
||||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|
||||
///-------------------------------------------------------------------------
|
|
||||
/// @file bsp_drv.h
|
|
||||
/// @brief bsp @ driver config
|
|
||||
///-------------------------------------------------------------------------
|
|
||||
/// @version 1.0
|
|
||||
/// @author CC
|
|
||||
/// @date 20180331
|
|
||||
/// @note cc_AS_stc02
|
|
||||
|
|
||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||
|
|
||||
#ifndef _APP_TASK_ADC_H |
|
||||
#define _APP_TASK_ADC_H |
|
||||
|
|
||||
#include "../app/app_config.h" |
|
||||
#include "../ctask/task.h" |
|
||||
#include "../clib/clib.h" |
|
||||
|
|
||||
|
|
||||
#define ADC_CHANNEL_STATUS_UNREADY 0 //UnReady状态,不能读取
|
|
||||
#define ADC_CHANNEL_STATUS_READY 1 //ready状态,可以读取
|
|
||||
|
|
||||
//AD_CHANNEL_SAMPLE 采样
|
|
||||
#define MAX_OUT_NUM 6 |
|
||||
typedef struct _s_task_adc_channel_sample |
|
||||
{ |
|
||||
TS_task task; |
|
||||
vU8 status; |
|
||||
vU8 ch; |
|
||||
vU32 adcval; |
|
||||
vU32 pool; |
|
||||
vU8 n; |
|
||||
vU32 out[MAX_OUT_NUM]; |
|
||||
}S_TASK_ADC_CHANNEL_SAMPLE; |
|
||||
|
|
||||
//AD_BLUR_MID 中值滤波
|
|
||||
typedef struct _s_task_adc_blur_mid |
|
||||
|
|
||||
{ |
|
||||
TS_task task; |
|
||||
vU8 ch; |
|
||||
vU8 max; |
|
||||
vU32 in[MAX_OUT_NUM]; |
|
||||
vU32 midval; |
|
||||
vU8 n; |
|
||||
vU32 out[MAX_OUT_NUM]; |
|
||||
}S_TASK_ADC_BLUR_MID; |
|
||||
|
|
||||
//AD_BLUR_AVG 均值滤波
|
|
||||
typedef struct _s_task_adc_blur_avg |
|
||||
{ |
|
||||
TS_task task; |
|
||||
vU8 ch; |
|
||||
vU8 max; |
|
||||
vU32 in[MAX_OUT_NUM]; |
|
||||
vU32 avgval; |
|
||||
vU8 n; |
|
||||
vU32 out[MAX_OUT_NUM]; |
|
||||
}S_TASK_ADC_BLUR_AVG; |
|
||||
|
|
||||
//AD_BLUR_SHIFT 移位滤波
|
|
||||
typedef struct _s_task_adc_blur_shift |
|
||||
{ |
|
||||
TS_task task; |
|
||||
vU8 ch; |
|
||||
vU8 n; |
|
||||
vU8 h; |
|
||||
vU8 shiftreg[3]; |
|
||||
//vU8 max;
|
|
||||
vU32 in; |
|
||||
vU32 sum[3]; |
|
||||
vU32 shiftval[3]; |
|
||||
vU32 out[3][MAX_OUT_NUM]; |
|
||||
}S_TASK_ADC_BLUR_SHIFT; |
|
||||
|
|
||||
//AD_BLUR_DECIDE 输出判定
|
|
||||
typedef struct _s_task_adc_blur_out |
|
||||
{ |
|
||||
TS_task task; |
|
||||
vU8 ch; |
|
||||
vU32 in[2]; |
|
||||
U32 threshold[2]; |
|
||||
vU8 h; |
|
||||
vU8 oldnum; |
|
||||
vU8 newnum; |
|
||||
vU32 newout; |
|
||||
vU8 n; |
|
||||
}S_TASK_ADC_BLUR_OUT; |
|
||||
|
|
||||
//AD_BLUR_SHOW 显示
|
|
||||
typedef struct _s_task_adc_blur_show |
|
||||
{ |
|
||||
TS_task task; |
|
||||
vU32 rough_weight; |
|
||||
}S_TASK_ADC_BLUR_SHOW; |
|
||||
|
|
||||
|
|
||||
extern S_TASK_ADC_CHANNEL_SAMPLE ts_adc_channel_samples[D_ADC_CHANNEL_NUM]; |
|
||||
//extern S_TASK_ADC_BLUR_MID ts_adc_blur_mid[D_ADC_CHANNEL_NUM];
|
|
||||
extern S_TASK_ADC_BLUR_AVG ts_adc_blur_avg[D_ADC_CHANNEL_NUM]; |
|
||||
extern S_TASK_ADC_BLUR_SHIFT ts_adc_blur_shift[D_ADC_CHANNEL_NUM]; |
|
||||
extern S_TASK_ADC_BLUR_OUT ts_adc_blur_out[D_ADC_CHANNEL_NUM]; |
|
||||
extern S_TASK_ADC_BLUR_SHOW ts_adc_blur_show; |
|
||||
|
|
||||
|
|
||||
extern void L3_task_adc_init(U8 ch); |
|
||||
extern void L3_task_show_init(void); |
|
||||
extern void L3_task_adc_handler(U8 ch); |
|
||||
extern void L3_task_adc_init_handler(void); |
|
||||
extern void L3_task_adc_channel_switch_handler(void); |
|
||||
extern void L3_task_adc_filter_show(S_TASK_ADC_BLUR_SHOW *s); |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
#endif // #ifndef _APP_TASK_ADC_H
|
|
||||
|
|
@ -1,63 +0,0 @@ |
|||||
////////////////////////////////////////////////////////////////////////////
|
|
||||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|
||||
///-------------------------------------------------------------------------
|
|
||||
/// @file bsp_drv.c
|
|
||||
/// @brief bsp @ driver config
|
|
||||
///-------------------------------------------------------------------------
|
|
||||
/// @version 1.0
|
|
||||
/// @author CC
|
|
||||
/// @date 20180331
|
|
||||
/// @note cc_AS_stc02
|
|
||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||
|
|
||||
#include "task_register.h" |
|
||||
#include "../app/app_config.h" |
|
||||
#include "../bsp/bsp_config.h" |
|
||||
#include "../msp/uart0.h" |
|
||||
|
|
||||
//=============================================
|
|
||||
|
|
||||
S_TASK_REGVAL_LISTEN s_task_reglisten; |
|
||||
|
|
||||
void L3_task_reglisten_init(void) |
|
||||
{ |
|
||||
L1_task_init(&s_task_reglisten.task); |
|
||||
L3_task_s_go(s_task_reglisten,D_task_init); |
|
||||
} |
|
||||
|
|
||||
//清零任务
|
|
||||
#define D_task_WEIGHT_COUNT 0x50 |
|
||||
#define D_task_IAP 0x51 |
|
||||
void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s) |
|
||||
{ |
|
||||
|
|
||||
TTSS_Task_init() |
|
||||
L2_task_go(D_task_WEIGHT_COUNT); |
|
||||
|
|
||||
TTSS_Task_step(D_task_WEIGHT_COUNT) |
|
||||
if(R.zero != 0) |
|
||||
{ |
|
||||
R.total_zweight = R.rough_weight; //皮重 = 毛重
|
|
||||
R.total_weight = (R.rough_weight > R.total_zweight) ? (R.rough_weight - R.total_zweight) : (0);//净重
|
|
||||
R.zero = 0; |
|
||||
} |
|
||||
L2_task_go(D_task_IAP); //延时100ms
|
|
||||
|
|
||||
|
|
||||
TTSS_Task_step(D_task_IAP) |
|
||||
if(R.status_eep_save != 0) |
|
||||
{ |
|
||||
R.status_eep_save = 0; |
|
||||
L3_reg_2_iap();//写入IAP
|
|
||||
} |
|
||||
L2_task_go_Tdelay(D_task_WEIGHT_COUNT,D_Tdelay_Msec(100)); //延时100ms
|
|
||||
|
|
||||
|
|
||||
TTSS_Task_end(); |
|
||||
|
|
||||
} |
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -1,32 +0,0 @@ |
|||||
////////////////////////////////////////////////////////////////////////////
|
|
||||
///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|
||||
///-------------------------------------------------------------------------
|
|
||||
/// @file bsp_drv.h
|
|
||||
/// @brief bsp @ driver config
|
|
||||
///-------------------------------------------------------------------------
|
|
||||
/// @version 1.0
|
|
||||
/// @author CC
|
|
||||
/// @date 20180331
|
|
||||
/// @note cc_AS_stc02
|
|
||||
|
|
||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||
|
|
||||
#ifndef _APP_TASK_REG_H |
|
||||
#define _APP_TASK_REG_H |
|
||||
|
|
||||
#include "../ctask/task.h" |
|
||||
#include "../clib/clib.h" |
|
||||
|
|
||||
typedef struct _s_task_reglisten |
|
||||
{ |
|
||||
TS_task task; |
|
||||
}S_TASK_REGVAL_LISTEN; |
|
||||
|
|
||||
extern S_TASK_REGVAL_LISTEN s_task_reglisten; |
|
||||
|
|
||||
extern void L3_task_reglisten_init(void); |
|
||||
extern void L3_task_reglisten_handle(S_TASK_REGVAL_LISTEN *s); |
|
||||
|
|
||||
|
|
||||
#endif // #ifndef _APP_TASK_ADC_H
|
|
||||
|
|
Loading…
Reference in new issue