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.
789 lines
35 KiB
789 lines
35 KiB
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 1
|
|
|
|
|
|
C51 COMPILER V9.54, COMPILATION OF MODULE ASP_SCHAIN
|
|
OBJECT MODULE PLACED IN ..\out\asp_schain.obj
|
|
COMPILER INVOKED BY: E:\KeilC51\C51\BIN\C51.EXE ..\source\asp\asp_schain.c LARGE OMF2 OPTIMIZE(0,SIZE) BROWSE ORDER NOIN
|
|
-TPROMOTE INCDIR(..\source\bsp;..\source\msp;..\source\app;..\source\clib;..\source\cpu;..\source\ctask;..\source\tpc;..\
|
|
-source\asp;..\source\debug;..\source\msp\uart;..\source\msp\simiic;..\source\bsp\oled;..\source\bsp\TTSSbsp) DEBUG PRINT
|
|
-(..\out\asp_schain.lst) TABS(2) OBJECT(..\out\asp_schain.obj)
|
|
|
|
line level source
|
|
|
|
1 ////////////////////////////////////////////////////////////////////////////
|
|
2 ///@copyright Copyright (c) 2018, 传控科技 All rights reserved.
|
|
3 ///-------------------------------------------------------------------------
|
|
4 /// @file bsp_drv.c
|
|
5 /// @brief bsp @ driver config
|
|
6 ///-------------------------------------------------------------------------
|
|
7 /// @version 1.0
|
|
8 /// @author CC
|
|
9 /// @date 20180331
|
|
10 /// @note cc_AS_stc02
|
|
11 //////////////////////////////////////////////////////////////////////////////
|
|
12
|
|
13 #include "asp_schain.h"
|
|
*** WARNING C320 IN LINE 51 OF ..\source\bsp\TTSSbsp\bsp_config.h: "MainFre_22M"
|
|
14 ///#include "common.h"
|
|
15 #include "msp_uart1.h"
|
|
16 #include "bsp_cs1232.h"
|
|
17 #include "debug_drv.h"
|
|
18
|
|
19 #define D_sensor_up_down 1/// 称重传感器上下镜像选择
|
|
20
|
|
21 //=============================================
|
|
22 ///打开adc输出监控,0kg的试试每一路的输出就是 0kg_out1_adc FF77 FFB3 00A4 FFEA
|
|
23 #define D_ch1_0kg_out1_adc (vS16)0xFF77
|
|
24 #define D_ch2_0kg_out1_adc (vS16)0xFFB3
|
|
25 #define D_ch3_0kg_out1_adc (vS16)0x00A4
|
|
26 #define D_ch4_0kg_out1_adc (vS16)0xFFEA
|
|
27 /////需要通过测试配置 如果不在意符号位 可以优化 diao
|
|
28 #define D_ch1_out1_offset (vS16)(D_ch1_wantline-D_ch1_0kg_out1_adc)
|
|
29 #define D_ch2_out1_offset (vS16)(D_ch2_wantline-D_ch2_0kg_out1_adc)
|
|
30 #define D_ch3_out1_offset (vS16)(D_ch3_wantline-D_ch3_0kg_out1_adc)
|
|
31 #define D_ch4_out1_offset (vS16)(D_ch4_wantline-D_ch4_0kg_out1_adc)
|
|
32
|
|
33 #define D_ch1_wantline (vS16)0x18da
|
|
34 #define D_ch2_wantline (vS16)0x18da
|
|
35 #define D_ch3_wantline (vS16)0x18da
|
|
36 #define D_ch4_wantline (vS16)0x18da
|
|
37
|
|
38 ///cc 2023/04/06--7:39:40 每个传感器放置10kg
|
|
39 ///应变片传感器10kg的adc值,选择这个是因为10kg容易获得 并且有一定的重量差
|
|
40 ///这个值需要实验获得
|
|
41 #define D_ch1_10kg_out1_adc (vS16)0x0584
|
|
42 #define D_ch2_10kg_out1_adc (vS16)0x05DE
|
|
43 #define D_ch3_10kg_out1_adc (vS16)0x0731
|
|
44 #define D_ch4_10kg_out1_adc (vS16)0x066C
|
|
45
|
|
46 #define D_Rsensor_per_10kg ((vS16)10)
|
|
47 #define D_adc_per_kg ((D_ch1_10kg_out1_adc-D_ch1_0kg_out1_adc)/D_Rsensor_per_10kg)
|
|
48 #define D_adc_zeroout (10*D_adc_per_kg) ///零点都拉到10kg
|
|
49
|
|
50 TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM]=
|
|
51 {
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 2
|
|
|
|
52
|
|
53 'A',//0 1 u8 rev1;
|
|
54 0,//2 3 u8 ch;
|
|
55 D_ch1_wantline,///vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力��
|
|
-�时想要输出的adc的值
|
|
56 D_ch1_out1_offset,//3 4 vU16 offset;
|
|
57 2,//4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
|
58 5,//5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
|
|
59
|
|
60 'A',//0 1 u8 rev1;
|
|
61 1,//2 3 u8 ch;
|
|
62 D_ch1_wantline,///vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力��
|
|
-�时想要输出的adc的值
|
|
63 D_ch2_out1_offset,//3 4 vU16 offset;
|
|
64 2,//4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
|
65 5,//5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
|
|
66
|
|
67 'A',//0 1 u8 rev1;
|
|
68 2,//2 3 u8 ch;
|
|
69 D_ch1_wantline,///vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力��
|
|
-�时想要输出的adc的值
|
|
70 D_ch3_out1_offset,//3 4 vU16 offset;
|
|
71 2,//4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
|
72 5,//5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
|
|
73
|
|
74
|
|
75 'A',//0 1 u8 rev1;
|
|
76 3,//2 3 u8 ch;
|
|
77 D_ch1_wantline,///vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力��
|
|
-�时想要输出的adc的值
|
|
78 D_ch4_out1_offset,//3 4 vU16 offset;
|
|
79 2,//4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16
|
|
80 5//5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16
|
|
81
|
|
82
|
|
83 };
|
|
84
|
|
85
|
|
86 TS_task_adc_sample ts_adc_samples[D_ADC_CHANNEL_NUM];
|
|
87
|
|
88 //ch是0123,代表4通道
|
|
89 void L2_task_adc_init(U8 ch)
|
|
90 {
|
|
91 1 //通道采集任务初始化
|
|
92 1 L1_task_reg_clear(&ts_adc_samples[ch].task);
|
|
93 1 L3_task_s_go(ts_adc_samples[ch],D_task_init);
|
|
94 1
|
|
95 1
|
|
96 1 ts_adc_samples[ch].pSPara = &TS_adc_SPara[ch];
|
|
97 1 ts_adc_samples[ch].firstRun = 1;
|
|
98 1
|
|
99 1
|
|
100 1 }
|
|
101
|
|
102 //ADC Channel 采样任务
|
|
103 #define D_task_ADC_CHx_SAMPLE_JITTER_START_SAMPLE 0x53
|
|
104 #define D_task_ADC_CHx_JITTER 0x63
|
|
105 #define D_task_ADC_CHx_PIANYI 0x93
|
|
106 #define D_task_ADC_CHx_JITTER2 0x83
|
|
107 #define D_task_ADC_CHx_despiking_shift 0x94
|
|
108 #define D_task_ADC_CHx_SAMPLE_WAIT_LOW 0x73
|
|
109 #define D_task_ADC_CHx_SAMPLE_READ 0x54
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 3
|
|
|
|
110 #define D_task_ADC_CHx_SAMPLE_OUT 0x55
|
|
111 #define D_task_ADC_CHx_SHIFTFILTER 0x56
|
|
112 #define D_task_ADC_CHx_SHIFTFILTER2 0x57
|
|
113 #define D_ADC_JITTER_zero 22///还包含建立时间 至少9个
|
|
114 #define D_ADC_JITTER_FINISH 12///还包含建立时间 至少9个
|
|
115
|
|
116 /********
|
|
117 80hZ
|
|
118 1000ms/80= 12.5ms/point
|
|
119 ushex send = 4Bytes+blank = 5Byte;
|
|
120 115200 0.1ms/Byte
|
|
121 所以发送5Bytes 消耗0.5ms 发送四列 消耗2ms 系统足够响应
|
|
122
|
|
123 *******/
|
|
124
|
|
125
|
|
126
|
|
127 S16 L3_out_tran(vU32 rdata)
|
|
128 {
|
|
129 1 S16 t16;
|
|
130 1 /// 24bits 3Bytes
|
|
131 1 rdata >>= 8;
|
|
132 1 t16 = rdata;
|
|
133 1
|
|
134 1 #if (D_sensor_up_down)
|
|
135 1 t16 *= -1;
|
|
136 1 #else
|
|
///t16 *= -1;
|
|
#endif
|
|
139 1 return t16;
|
|
140 1 }
|
|
141
|
|
142 vU16 L3_adc_out_offset(vU16 offset,vU16 t16)
|
|
143 {
|
|
144 1 vU16 out;
|
|
145 1
|
|
146 1 /// L0_uart0_ushex(t16); L0_uart0_uc(' ');
|
|
147 1 if(t16 & 0x8000) //最高位为1,<0则
|
|
148 1 {
|
|
149 2 t16 = 0xffFF - t16;///转变为正数
|
|
150 2 ///*d = D_ADC_OFFSET - t16;
|
|
151 2 out = offset - t16;
|
|
152 2 // L0_uart0_uc('$'); L0_uart0_ushex(ts_adc_samples[ch].offset);L0_uart0_uc(' ');
|
|
153 2 }else
|
|
154 1 {
|
|
155 2 out = t16 + offset;
|
|
156 2 }
|
|
157 1 // L0_uart0_ushex(out);L0_uart0_uc(' '); L0_uart0_uc('R');L0_uart0_0d0a();
|
|
158 1 return out;
|
|
159 1 }
|
|
160
|
|
161
|
|
162 /*
|
|
163
|
|
164 adcval adc采样值
|
|
165 ^
|
|
166 |
|
|
167 | --.-------------.-------------.------------.---------wantline
|
|
168 | . . . .
|
|
169 | . . offset3 .
|
|
170 | . . . .
|
|
171 | . . .ch3.adc .
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 4
|
|
|
|
172 | offset1 offset2 .
|
|
173 | . . offset4
|
|
174 ---0---.-------------.--------------------------.------------
|
|
175 | . .ch2.adc .
|
|
176 | . .
|
|
177 | ch1.adc .
|
|
178 | .
|
|
179 | ch3.adc.
|
|
180
|
|
181 .的数量或高度就是offset
|
|
182 adc有正数和负数
|
|
183
|
|
184
|
|
185 */
|
|
186 vU16 L3_adc_get_offset(vU16 wantline,vU16 adcv)
|
|
187 {
|
|
188 1 vU16 out;
|
|
189 1
|
|
190 1 /// L0_uart0_ushex(t16); L0_uart0_uc(' ');
|
|
191 1 if(adcv & 0x8000) //最高位为1,<0则
|
|
192 1 {
|
|
193 2 out = 0xffFF - adcv;///转变为正数
|
|
194 2 out += wantline;
|
|
195 2 }else
|
|
196 1 {
|
|
197 2 out = wantline - adcv;
|
|
198 2 }
|
|
199 1 return out;
|
|
200 1 }
|
|
201
|
|
202 /*
|
|
203 ///cc 2023/04/06--6:34:10
|
|
204 针对西安方片传感器
|
|
205 adc
|
|
206 hex dec kg adc/kg
|
|
207 68F 1679 10 168
|
|
208
|
|
209 4196 16790 100
|
|
210 -------------void L2_task_adc_sample(TS_TASK_ADC_SAMPLE *s)----------
|
|
211
|
|
212 s->out1_adc = L3_out_tran(s->out0);
|
|
213 ############
|
|
214
|
|
215 s->out2_offset = L3_out_offset(s->ch,s->out1_adc);
|
|
216 ############
|
|
217
|
|
218 Lc_despiking_shift3_U16(s->outm);////采样后进行削峰
|
|
219 s->out3_peak = s->outm[1];
|
|
220 ############
|
|
221
|
|
222 s->ts_SAa.out4_shift = (vU16)s->ts_SAa.average; from s->out3_peak
|
|
223
|
|
224 s->ts_SAb.out4_shift = (vU16)s->ts_SAb.average;from s->out3_peak
|
|
225
|
|
226 ----------void L3_task_weight_handler(TS_TASK_weight_ *s)-----------------
|
|
227
|
|
228
|
|
229 ts_adc_samples[3].out5 = ts_adc_samples[3].ts_SAb.out4_shift;
|
|
230
|
|
231 ############
|
|
232
|
|
233 ////四个传感器相加后平均
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 5
|
|
|
|
234 tst_weight.sum32 = ts_adc_samples[0].out5;
|
|
235 tst_weight.sum32 += ts_adc_samples[1].out5;
|
|
236 tst_weight.sum32 += ts_adc_samples[2].out5;
|
|
237 tst_weight.sum32 += ts_adc_samples[3].out5;
|
|
238
|
|
239 tst_weight.out6 = tst_weight.sum32 >>2;
|
|
240 ############
|
|
241 tst_weight.adc32 = tst_weight.out6;
|
|
242 L3_task_weight_cal();
|
|
243
|
|
244 上电的时候有几种状态
|
|
245 1 有人
|
|
246 2 有物体
|
|
247 3 无人
|
|
248 出厂必备的操作,
|
|
249 1,没有重物清零,数据写入程序,
|
|
250 出厂把adc的值都偏移到 10kg/200kg 如果时基本时1/20偏移
|
|
251 也就是出厂时传感器的值基本一条线
|
|
252 2,以后上电时 或者重新启动时 低于一定重量就清零
|
|
253 3,手工可以清零
|
|
254
|
|
255
|
|
256 ---------------------------
|
|
257
|
|
258 四个传感器 在没有重量 出厂的时候需要拉成偏移
|
|
259 简单的方式 四个传感器累加的模式
|
|
260
|
|
261 */
|
|
262
|
|
263
|
|
264 void L2_task_adc_sample(TS_task_adc_sample *s)
|
|
265 {
|
|
266 1 TTSS_Task_init():
|
|
267 2 ////cc 初始化尽量放到这里,不要放到main ——init中,减少系统启动的时间
|
|
268 2 s->jitter_start = 0; s->ok = 0;
|
|
269 2 ////printf("\r\nADC_SAMPLE\r\n");
|
|
270 2 /*
|
|
271 2 printf5("\r\nADC_SAMPLE init ch(%d) wantline:%d(%4X) offset %d(%4X)", (int)s->pSPara->ch,
|
|
272 2 ts_adc_samples[s->pSPara->ch].pSPara->wantline,ts_adc_samples[s->pSPara->ch].pSPara->wantline,
|
|
273 2 ts_adc_samples[s->pSPara->ch].pSPara->offset,ts_adc_samples[s->pSPara->ch].pSPara->offset);
|
|
274 2 */
|
|
275 2
|
|
276 2 printf1("\r\nADC_SAMPLE init ch(%d) ", (int)s->pSPara->ch);
|
|
277 2 L1_uartD_waitFree() ;
|
|
278 2
|
|
279 2 s->firstRun = 1;
|
|
280 2
|
|
281 2 /// L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
|
|
282 2 L2_task_go_Tdelay(D_task_ADC_CHx_SAMPLE_READ,D_Tdelay_Msec(1500)); //延时15ms
|
|
283 2
|
|
284 2 TTSS_Task_step(D_task_ADC_CHx_SAMPLE_READ):
|
|
285 2 if(0 == L0_adc_DOUT_AT(s->pSPara->ch))
|
|
286 2 {////L0_uart0_uc('X');L0_uart0_uc(0x30+s->ch);
|
|
287 3 //// L0_ADS1231_readCH2(s->ch,&(s->out1)); ////
|
|
288 3 L0_ADS1231_readCH2(s->pSPara->ch,&(s->out0));
|
|
289 3 L2_task_go(D_task_ADC_CHx_PIANYI);
|
|
290 3 }
|
|
291 2 TTSS_Task_step(D_task_ADC_CHx_PIANYI):
|
|
292 2 s->out1_adc = L3_out_tran(s->out0);///////cc 2023/04/06--6:33:46 最原始的输出
|
|
293 2 s->out2_offset = L3_adc_out_offset(s->pSPara->offset,s->out1_adc);
|
|
294 2 L2_task_go(D_task_ADC_CHx_despiking_shift);
|
|
295 2 TTSS_Task_step(D_task_ADC_CHx_despiking_shift):
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 6
|
|
|
|
296 2 s->outm[0] = s->outm[1];
|
|
297 2 s->outm[1] = s->outm[2];
|
|
298 2 s->outm[2] = s->out2_offset;
|
|
299 2
|
|
300 2 Lc_despiking_shift3_U16(s->outm);////采样后进行削峰
|
|
301 2 s->out3_Peak = s->outm[1];
|
|
302 2
|
|
303 2 /// s->pSPara->offset = s->pSPara->wantline - s->out3_Peak;
|
|
304 2
|
|
305 2 if(s->firstRun)///
|
|
306 2 {////第一次上电
|
|
307 3 L2_task_go(D_task_ADC_CHx_JITTER2);
|
|
308 3 }else
|
|
309 2 {
|
|
310 3 L2_task_go(D_task_ADC_CHx_SHIFTFILTER);
|
|
311 3 }
|
|
312 2 TTSS_Task_step(D_task_ADC_CHx_JITTER2):
|
|
313 2
|
|
314 2
|
|
315 2 if(s->jitter_start < D_ADC_JITTER_FINISH)
|
|
316 2 {
|
|
317 3 ///printfs("\r\n D_ADC_JITTER_zero---");
|
|
318 3 L1_uartD_uc('9');
|
|
319 3 s->jitter_start ++;
|
|
320 3 L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
|
|
321 3 }else
|
|
322 2 {
|
|
323 3 /// 上电的时候如果没有重量可以这样 ,如果有呢??
|
|
324 3 ///L3_out_zero(s->ch);///算出当前的偏移量 更新offset
|
|
325 3
|
|
326 3 s->pSPara->offset = L3_adc_get_offset(s->pSPara->wantline,s->out1_adc);///必须out1_adc 因为偏移��
|
|
-�针对 out1_adc的
|
|
327 3 /// s->pSPara->offset = s->pSPara->wantline - s->out3_Peak;
|
|
328 3
|
|
329 3 printfs("\r\n D_ADC_JITTER_zero---");
|
|
330 3 ///printf3("\r\n ch(%d) out3_Peak %5d %5X ",(int)s->pSPara->ch,s->out3_Peak,s->out3_Peak );
|
|
331 3
|
|
332 3 printf4("\r\n ch(%d) adc=%5d ->offset %5d wantline %5d ",(int)s->pSPara->ch,s->out1_adc,s->pSPara->offs
|
|
-et,s->pSPara->wantline);
|
|
333 3 printf4("\r\n ch(%d) adc=%5X ->offset %5X wantline %5X ",(int)s->pSPara->ch,s->out1_adc,s->pSPara->offs
|
|
-et,s->pSPara->wantline);
|
|
334 3
|
|
335 3 s->ts_SAa.average = (vU32)s->out3_Peak;/// shiftaverage_a路初始化
|
|
336 3 s->ts_SAa.sum = s->ts_SAa.average << s->pSPara->ashift;
|
|
337 3 /**
|
|
338 3 s->ts_SAb.average = (vU32)s->out3_Peak;/// shiftaverage_b路初始化
|
|
339 3 s->ts_SAb.sum = s->ts_SAb.average << s->pSPara->bshift;
|
|
340 3 */
|
|
341 3
|
|
342 3 s->firstRun = 0;
|
|
343 3 ///刚开始的抖动,先去掉几个最开始的数据
|
|
344 3 L2_task_go(D_task_ADC_CHx_SHIFTFILTER);
|
|
345 3 }
|
|
346 2 TTSS_Task_step(D_task_ADC_CHx_SHIFTFILTER):
|
|
347 2 //L0_uart0_uc('B');
|
|
348 2 s->ts_SAa.sum -= s->ts_SAa.average;
|
|
349 2 s->ts_SAa.sum += (vU32)s->out3_Peak;
|
|
350 2 s->ts_SAa.average = s->ts_SAa.sum >> s->pSPara->ashift;
|
|
351 2 // s->ts_SAa.new = s->ts_SAa.average;
|
|
352 2 s->ts_SAa.out4_shift = (vU16)s->ts_SAa.average;
|
|
353 2 /// L0_uart0_uc('s');
|
|
354 2
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 7
|
|
|
|
355 2 L2_task_go(D_task_ADC_CHx_SHIFTFILTER2);
|
|
356 2 TTSS_Task_step(D_task_ADC_CHx_SHIFTFILTER2):
|
|
357 2
|
|
358 2
|
|
359 2 s->ok = 1;
|
|
360 2 L2_task_go(D_task_ADC_CHx_SAMPLE_READ);
|
|
361 2
|
|
362 2 /// L2_task_go(D_task_ADC_CHx_SAMPLE_OUT);
|
|
363 2 TTSS_Task_step(D_task_ADC_CHx_SAMPLE_OUT):
|
|
364 2
|
|
365 2 /***
|
|
366 2 L0_uart0_ulhex(s->out0); L0_uart0_uc(0x09);
|
|
367 2 L0_uart0_ushex(s->out1); L0_uart0_uc(0x09);
|
|
368 2 L0_uart0_ushex(s->out2); L0_uart0_uc(0x09);
|
|
369 2 L0_uart0_ushex(s->ts_SAa.out4); L0_uart0_uc(0x09);
|
|
370 2 L0_uart0_ushex(s->ts_SAb.out4);
|
|
371 2 L0_uart0_0d0a();
|
|
372 2
|
|
373 2
|
|
374 2 **/
|
|
375 2
|
|
376 2 ////
|
|
377 2 //// L0_uart0_uc('0' + s->ch);L0_uart0_uc('A');//
|
|
378 2 TTSS_Task_end();
|
|
379 1 }
|
|
380
|
|
381 #if 0
|
|
void L3_out_zero(u8 ch)
|
|
{
|
|
vS16 t,m;
|
|
|
|
|
|
t = ts_adc_samples[ch].out1_adc;
|
|
m = ts_adc_samples[ch].SPara.wantline;
|
|
m -= t;
|
|
ts_adc_samples[ch].SPara.offset = (vU16)m;
|
|
/// L0_waitFree_uartN(0);///混搭使用printf的时候必须加上
|
|
/// printf("\r\nzeroout = %4x offset= 0x%4x\r\n", ts_adc_samples[ch].zeroout,ts_adc_samples[ch].offset);
|
|
|
|
/// D_ADC_OFFSET(ch) = ts_adc_samples[ch].zeroout - ts_adc_samples[ch].out1;
|
|
}
|
|
|
|
|
|
vU16 L3_out_offset222(u8 ch,vU16 t16)
|
|
{
|
|
vU16 out;
|
|
|
|
/// L0_uart0_ushex(t16); L0_uart0_uc(' ');
|
|
if(t16 & 0x8000) //最高位为1,<0则
|
|
{
|
|
t16 = 0xffFF - t16;///转变为正数
|
|
///*d = D_ADC_OFFSET - t16;
|
|
out = ts_adc_samples[ch].SPara.offset - t16;
|
|
// L0_uart0_uc('$'); L0_uart0_ushex(ts_adc_samples[ch].offset);L0_uart0_uc(' ');
|
|
}else
|
|
{
|
|
out = t16 + ts_adc_samples[ch].SPara.offset;
|
|
}
|
|
// L0_uart0_ushex(out);L0_uart0_uc(' '); L0_uart0_uc('R');L0_uart0_0d0a();
|
|
return out;
|
|
}
|
|
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 8
|
|
|
|
vU16 L3_out_tran2(vU32 rdata)
|
|
{
|
|
vU16 t16;
|
|
//// L0_ADS1231_readCH2(0,&rdata);
|
|
// L0_uart0_uc('0'+ch); L0_uart0_uc(0x09);
|
|
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
|
|
if (rdata > 0x007fFFff)
|
|
{
|
|
rdata >>= D_sensor_zoom; ///fixme:此处正负差和移位不一致需要谨慎
|
|
rdata |= D_sensor_zoom_FF; /// 1111 1100
|
|
}else
|
|
{
|
|
rdata >>= D_sensor_zoom;
|
|
}
|
|
|
|
// L0_uart0_ulhex(rdata); L0_uart0_uc(0x09);
|
|
t16 = rdata;
|
|
// L0_uart0_ushex(t16); L0_uart0_uc(0x09);
|
|
///L0_uart0_0d0a();
|
|
return t16;
|
|
}
|
|
|
|
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;
|
|
|
|
}
|
|
|
|
//中值滤波任务
|
|
#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].out1[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_S32_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)
|
|
{
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 9
|
|
|
|
s->n = 0;
|
|
}
|
|
L2_task_go(D_task_ADC_CHx_FILTER_MID_GET);
|
|
|
|
TTSS_Task_end();
|
|
|
|
|
|
}
|
|
|
|
//均值滤波任务
|
|
#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].out1[i];
|
|
}
|
|
L2_task_go(D_task_ADC_CHx_FILTER_AVG_COUNT);
|
|
}
|
|
|
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_AVG_COUNT)
|
|
s->avgval = Lc_vS32_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_ShiftFilter(TS_TASK_ADC_SHIFTFILTER *s)
|
|
{
|
|
TTSS_Task_init()
|
|
s->average = ts_adc_samples[s->ch].out2;///
|
|
s->sum = s->average << s->shift;
|
|
L2_task_go(D_task_ADC_CHx_FILTER_SHIFT_GET);
|
|
|
|
TTSS_Task_step(D_task_ADC_CHx_FILTER_SHIFT_GET)
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 10
|
|
|
|
s->sum +=
|
|
|
|
|
|
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
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 11
|
|
|
|
{
|
|
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 0
|
|
L0_uart0_ulhex(s->rough_weight);
|
|
L0_uart0_uc(' ');
|
|
#endif
|
|
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();
|
|
}
|
|
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 12
|
|
|
|
|
|
|
|
/*******
|
|
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;
|
|
|
|
//通道中值滤波任务初始化
|
|
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;
|
|
|
|
//通道均值滤波任务初始化
|
|
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_blur_threshold_2_1(R.p.adc_blur_threshold[0]); //2KG
|
|
ts_adc_blur_out[ch].threshold[1] = D_blur_threshold_2_1(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].oldout = 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
|
|
|
|
#endif
|
|
725
|
|
C51 COMPILER V9.54 ASP_SCHAIN 09/06/2024 14:31:10 PAGE 13
|
|
|
|
726
|
|
|
|
|
|
MODULE INFORMATION: STATIC OVERLAYABLE
|
|
CODE SIZE = 2151 ----
|
|
CONSTANT SIZE = 142 ----
|
|
XDATA SIZE = 238 ----
|
|
PDATA SIZE = ---- ----
|
|
DATA SIZE = ---- ----
|
|
IDATA SIZE = ---- ----
|
|
BIT SIZE = ---- ----
|
|
EDATA SIZE = ---- ----
|
|
HDATA SIZE = ---- ----
|
|
XDATA CONST SIZE = ---- ----
|
|
FAR CONST SIZE = ---- ----
|
|
END OF MODULE INFORMATION.
|
|
|
|
|
|
C51 COMPILATION COMPLETE. 1 WARNING(S), 0 ERROR(S)
|
|
|