From 184efffabd1797390261c9ed958938d0559345e3 Mon Sep 17 00:00:00 2001 From: Zhangwen <13970730+mkc46119@user.noreply.gitee.com> Date: Wed, 4 Sep 2024 14:17:36 +0800 Subject: [PATCH] =?UTF-8?q?fix=EF=BC=9A=E4=BF=AE=E6=AD=A3wantline=E5=87=BA?= =?UTF-8?q?=E9=94=99=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/settings.json | 5 ++- source/app/app_weight.c | 48 +++++++++++++++----- source/app/main.c | 41 ++++++++++++++++- source/asp/asp_schain.c | 97 +++++++++++++++++++---------------------- source/asp/asp_schain.h | 28 ++++++++++-- 5 files changed, 149 insertions(+), 70 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index c36e22a..d937be5 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,6 +1,9 @@ { "files.associations": { "stc_only.H": "cpp", - "asp_lowpower.h": "c" + "asp_lowpower.h": "c", + "main.h": "c", + "msp_eeprom.h": "c", + "msp_uartn.h": "c" } } \ No newline at end of file diff --git a/source/app/app_weight.c b/source/app/app_weight.c index d525291..e3eb02e 100644 --- a/source/app/app_weight.c +++ b/source/app/app_weight.c @@ -73,6 +73,8 @@ void L2_task_weight_init(u8 openclose) { if(openclose) { + printf5("\r\n rev L2_task_weight_init wantline %5X\t %X\t %X\t %X\t %X\r\n",TS_adc_SPara[0].ch,\ + TS_adc_SPara[0].wantline,TS_adc_SPara[0].offset,TS_adc_SPara[0].ashift,TS_adc_SPara[0].bshift444); L0_ADS1213_INIT(D_ADS1213_GAIN_128); L2_task_adc_init(0); L2_task_adc_init(1); @@ -108,6 +110,9 @@ void L3_task_weight_init(void) //显示任务初始化 L1_task_reg_clear(&tst_weight.task); L3_task_s_go(tst_weight,D_task_init); + + printf5("\r\n rev L3_task_weight_init wantline %5X\t %X\t %X\t %X\t %X\r\n",TS_adc_SPara[0].ch,\ + TS_adc_SPara[0].wantline,TS_adc_SPara[0].offset,TS_adc_SPara[0].ashift,TS_adc_SPara[0].bshift444); L2_task_weight_init(1); ///Lc_buf_from_const_uc(U8 * d, const U8 * s, U16 num) ///tst_weight.pSPara->ts_WPoint @@ -209,6 +214,10 @@ void L3_task_weight_handler(TS_TASK_weight_ *s) L2_task_go(D_task_WEIGHT_out); TTSS_Task_step(D_task_WEIGHT_out): + + // L0_uart1_ushex(tst_weight.kgx10_zero); + // L0_uart1_ushex(tst_weight.kgx10); + if(tst_weight.kgx10 > tst_weight.kgx10_zero) { s->kgx10_out = s->kgx10 - s->kgx10_zero; @@ -229,21 +238,34 @@ void L3_task_weight_handler(TS_TASK_weight_ *s) void L3_task_weight_cal(void) { + // L0_uart1_str("tst_weight.adc32: "); + // L0_uart1_ushex(tst_weight.adc32); + // L0_uart1_0d0a(); + // L0_uart1_str("S.weight_SPara.ts_WPoint[0].adc: "); + // L0_uart1_ushex(S.weight_SPara.ts_WPoint[0].adc); + // L0_uart1_0d0a(); + // L0_uart1_str("S.weight_SPara.ts_WPoint[1].adc: "); + // L0_uart1_ushex(S.weight_SPara.ts_WPoint[1].adc); + // L0_uart1_0d0a(); + // L0_uart1_str("S.weight_SPara.ts_WPoint[2].adc: "); + // L0_uart1_ushex(S.weight_SPara.ts_WPoint[2].adc); + // L0_uart1_0d0a(); + if(tst_weight.adc32 <= (vU32)S.weight_SPara.ts_WPoint[1].adc) { - if(tst_weight.adc32 <= (vU32)S.weight_SPara.ts_WPoint[0].adc ) + if( tst_weight.adc32 <= (vU32)S.weight_SPara.ts_WPoint[0].adc ) { - tst_weight.adc32 = (vU32)S.weight_SPara.ts_WPoint[0].adc; + tst_weight.adc32 = (vU32)S.weight_SPara.ts_WPoint[0].adc; } - ///0-0-40KG + //0-0-40KG tst_weight.t32a = (tst_weight.adc32-(vU32)S.weight_SPara.ts_WPoint[0].adc);////有可能<0 tst_weight.t32b = (vU32)(S.weight_SPara.ts_WPoint[1].adc-S.weight_SPara.ts_WPoint[0].adc); tst_weight.t32a *= (vU32)(S.weight_SPara.ts_WPoint[1].kg - S.weight_SPara.ts_WPoint[0].kg); tst_weight.t32a /= tst_weight.t32b; - + //L0_uart1_ulhex(tst_weight.t32a); } else - { ///40KG 80KG + { //40KG 80KG tst_weight.t32a = (vU32)(tst_weight.adc32-S.weight_SPara.ts_WPoint[1].adc);////有可能大于b tst_weight.t32b = (vU32)(S.weight_SPara.ts_WPoint[2].adc-S.weight_SPara.ts_WPoint[1].adc); tst_weight.t32a *= (vU32)(S.weight_SPara.ts_WPoint[2].kg-S.weight_SPara.ts_WPoint[1].kg) ; @@ -251,7 +273,8 @@ void L3_task_weight_cal(void) tst_weight.t32a += (vU32)S.weight_SPara.ts_WPoint[1].kg; } - tst_weight.kgx10 = (vU16)tst_weight.t32a; + tst_weight.kgx10 = (vU16)tst_weight.t32a; + // tst_weight.kgx10 = 0x1234; } /* @@ -535,12 +558,13 @@ void L4_weight_out(void) // L0_uart1_ushex(ts_adc_samples[0].out1_adc); // ts_weight_out.sensor_adc[0]=0x1234; - ts_weight_out.sensor_adc[0]=ts_adc_samples[0].out1_adc; - ts_weight_out.sensor_adc[1]=ts_adc_samples[1].out1_adc; - ts_weight_out.sensor_adc[2]=ts_adc_samples[2].out1_adc; - ts_weight_out.sensor_adc[3]=ts_adc_samples[3].out1_adc; - ts_weight_out.kgx10_out = tst_weight.kgx10_out; - ts_weight_out.adc32 = tst_weight.adc32;//采样值用作校准时使用 + ts_weight_out.sensor_adc[0] = ts_adc_samples[0].out1_adc; + ts_weight_out.sensor_adc[1] = ts_adc_samples[1].out1_adc; + ts_weight_out.sensor_adc[2] = ts_adc_samples[2].out1_adc; + ts_weight_out.sensor_adc[3] = ts_adc_samples[3].out1_adc; + ts_weight_out.kgx10_out = tst_weight.kgx10_out; + //ts_weight_out.kgx10_out = 0x1234; + ts_weight_out.adc32 = tst_weight.adc32;//采样值用作校准时使用 // L0_uart1_us(ts_weight_out.adc32); diff --git a/source/app/main.c b/source/app/main.c index 6f0632d..cd0b913 100644 --- a/source/app/main.c +++ b/source/app/main.c @@ -64,15 +64,52 @@ void L0_main_init(void) printf1("\r\nL3_S_init %d",r); } + + +TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM]= +{ + 'A', //0 1 u8 rev1; + 0, //2 3 u8 ch; + D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 + D_ch1_out1_offset, //3 4 vU16 offset; + 2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 + 5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16 + + 'A', //0 1 u8 rev1; + 1, //2 3 u8 ch; + D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 + D_ch2_out1_offset, //3 4 vU16 offset; + 2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 + 5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16 + + 'A', //0 1 u8 rev1; + 2, //2 3 u8 ch; + D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 + D_ch3_out1_offset, //3 4 vU16 offset; + 2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 + 5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16 + + + 'A', //0 1 u8 rev1; + 3, //2 3 u8 ch; + D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 + D_ch4_out1_offset, //3 4 vU16 offset; + 2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 + 5 //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16 + + +}; //=============================================== //主函数 //=============================================== void main(void) { + u16 a= 0; char d[9]={0xab}; L0_main_init(); + L3_task_weight_init(); TTSS_run_every_init(s_nos_tick.stamp,10); @@ -84,10 +121,10 @@ void main(void) if(1 == s_nos_tick.t1s_heartbeat) { s_nos_tick.t1s_heartbeat = 0; - L1_uartD_uc('.'); + // L1_uartD_uc('.'); D_LED1_REV(); // L0_uart2_uc('Q'); - // L0_uart2_0d0a(); + // L0_uart2_0d0a(); // L0_uart2_ul(0XAABBCCDD); // L0_uart1_ul(0XAABBCCDD); // L0_uart2_0d0a(); diff --git a/source/asp/asp_schain.c b/source/asp/asp_schain.c index 6a1bd78..1cd7f20 100644 --- a/source/asp/asp_schain.c +++ b/source/asp/asp_schain.c @@ -20,20 +20,20 @@ //============================================= ///打开adc输出监控,0kg的试试每一路的输出就是 0kg_out1_adc FF77 FFB3 00A4 FFEA -#define D_ch1_0kg_out1_adc (vS16)0xFF77 -#define D_ch2_0kg_out1_adc (vS16)0xFFB3 -#define D_ch3_0kg_out1_adc (vS16)0x00A4 -#define D_ch4_0kg_out1_adc (vS16)0xFFEA -/////需要通过测试配置 如果不在意符号位 可以优化掉 -#define D_ch1_out1_offset (vS16)(D_ch1_wantline-D_ch1_0kg_out1_adc) -#define D_ch2_out1_offset (vS16)(D_ch2_wantline-D_ch2_0kg_out1_adc) -#define D_ch3_out1_offset (vS16)(D_ch3_wantline-D_ch3_0kg_out1_adc) -#define D_ch4_out1_offset (vS16)(D_ch4_wantline-D_ch4_0kg_out1_adc) - -#define D_ch1_wantline (vS16)0x18da -#define D_ch2_wantline (vS16)0x18da -#define D_ch3_wantline (vS16)0x18da -#define D_ch4_wantline (vS16)0x18da +// #define D_ch1_0kg_out1_adc (vS16)0xFF77 +// #define D_ch2_0kg_out1_adc (vS16)0xFFB3 +// #define D_ch3_0kg_out1_adc (vS16)0x00A4 +// #define D_ch4_0kg_out1_adc (vS16)0xFFEA +// /////需要通过测试配置 如果不在意符号位 可以优化掉 +// #define D_ch1_out1_offset (vS16)(D_ch1_wantline-D_ch1_0kg_out1_adc) +// #define D_ch2_out1_offset (vS16)(D_ch2_wantline-D_ch2_0kg_out1_adc) +// #define D_ch3_out1_offset (vS16)(D_ch3_wantline-D_ch3_0kg_out1_adc) +// #define D_ch4_out1_offset (vS16)(D_ch4_wantline-D_ch4_0kg_out1_adc) + +// #define D_ch1_wantline (vS16)0x18da +// #define D_ch2_wantline (vS16)0x18da +// #define D_ch3_wantline (vS16)0x18da +// #define D_ch4_wantline (vS16)0x18da ///cc 2023/04/06--7:39:40 每个传感器放置10kg ///应变片传感器10kg的adc值,选择这个是因为10kg容易获得 并且有一定的重量差 @@ -47,40 +47,7 @@ #define D_adc_per_kg ((D_ch1_10kg_out1_adc-D_ch1_0kg_out1_adc)/D_Rsensor_per_10kg) #define D_adc_zeroout (10*D_adc_per_kg) ///零点都拉到10kg -TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM]= -{ - - 'A', //0 1 u8 rev1; - 0, //2 3 u8 ch; - D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 - D_ch1_out1_offset, //3 4 vU16 offset; - 2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 - 5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16 - - 'A', //0 1 u8 rev1; - 1, //2 3 u8 ch; - D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 - D_ch2_out1_offset, //3 4 vU16 offset; - 2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 - 5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16 - - 'A', //0 1 u8 rev1; - 2, //2 3 u8 ch; - D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 - D_ch3_out1_offset, //3 4 vU16 offset; - 2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 - 5, //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16 - - - 'A', //0 1 u8 rev1; - 3, //2 3 u8 ch; - D_ch1_wantline, //vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 - D_ch4_out1_offset, //3 4 vU16 offset; - 2, //4 5 vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 - 5 //5 6 vU8 bshift; ///移动的位数 1-2 2-4 3-8 4-16 - - -}; + TS_task_adc_sample ts_adc_samples[D_ADC_CHANNEL_NUM]; @@ -92,11 +59,39 @@ void L2_task_adc_init(U8 ch) L1_task_reg_clear(&ts_adc_samples[ch].task); L3_task_s_go(ts_adc_samples[ch],D_task_init); +printf5("\r\n rev **************** wantline %5X\t %X\t %X\t %X\t %X\r\n",TS_adc_SPara[ch].ch,\ + TS_adc_SPara[ch].wantline,TS_adc_SPara[ch].offset,TS_adc_SPara[ch].ashift,TS_adc_SPara[ch].bshift444); ts_adc_samples[ch].pSPara = &TS_adc_SPara[ch]; ts_adc_samples[ch].firstRun = 1; - + // printf5("\r\n rev **************** wantline %5X\t %X\t %X\t %X\t %X\r\n",ts_adc_samples[ch].pSPara->ch,\ + // ts_adc_samples[ch].pSPara->wantline,ts_adc_samples[ch].pSPara->offset,ts_adc_samples[ch].pSPara->ashift,ts_adc_samples[ch].pSPara->bshift444); + + // ts_adc_samples[0].pSPara->wantline = D_ch1_wantline; + // ts_adc_samples[0].pSPara->offset = D_ch1_out1_offset; + // ts_adc_samples[0].pSPara->ch = 0; + // ts_adc_samples[0].pSPara->ashift = 2; + // ts_adc_samples[0].pSPara->bshift444 = 5; + + // ts_adc_samples[1].pSPara->wantline = D_ch1_wantline; + // ts_adc_samples[1].pSPara->offset = D_ch2_out1_offset; + // ts_adc_samples[1].pSPara->ch = 1; + // ts_adc_samples[1].pSPara->ashift = 2; + // ts_adc_samples[1].pSPara->bshift444 = 5; + + // ts_adc_samples[2].pSPara->wantline = D_ch1_wantline; + // ts_adc_samples[2].pSPara->offset = D_ch3_out1_offset; + // ts_adc_samples[2].pSPara->ch = 2; + // ts_adc_samples[2].pSPara->ashift = 2; + // ts_adc_samples[2].pSPara->bshift444 = 5; + + // ts_adc_samples[3].pSPara->wantline = D_ch1_wantline; + // ts_adc_samples[3].pSPara->offset = D_ch4_out1_offset; + // ts_adc_samples[3].pSPara->ch = 3; + // ts_adc_samples[3].pSPara->ashift = 2; + // ts_adc_samples[3].pSPara->bshift444 = 5; + } //ADC Channel 采样任务 @@ -329,8 +324,8 @@ void L2_task_adc_sample(TS_task_adc_sample *s) printfs("\r\n D_ADC_JITTER_zero---"); ///printf3("\r\n ch(%d) out3_Peak %5d %5X ",(int)s->pSPara->ch,s->out3_Peak,s->out3_Peak ); - printf4("\r\n ch(%d) adc=%5d ->offset %5d wantline %5d ",(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline); - printf4("\r\n ch(%d) adc=%5X ->offset %5X wantline %5X ",(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline); + printf5("\r\n rev(%c) ch(%d) adc=%5d ->offset %5d wantline %5d ",s->pSPara->rev1,(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline); + printf5("\r\n rev(%c) ch(%d) adc=%5X ->offset %5X wantline %5X ",s->pSPara->rev1,(int)s->pSPara->ch,s->out1_adc,s->pSPara->offset,s->pSPara->wantline); s->ts_SAa.average = (vU32)s->out3_Peak;/// shiftaverage_a路初始化 s->ts_SAa.sum = s->ts_SAa.average << s->pSPara->ashift; diff --git a/source/asp/asp_schain.h b/source/asp/asp_schain.h index a34f602..29d1715 100644 --- a/source/asp/asp_schain.h +++ b/source/asp/asp_schain.h @@ -42,21 +42,41 @@ typedef struct vU16 out4_shift; /// }TS_shift_averge_; +#define D_ch1_0kg_out1_adc (vS16)0xFF77 +#define D_ch2_0kg_out1_adc (vS16)0xFFB3 +#define D_ch3_0kg_out1_adc (vS16)0x00A4 +#define D_ch4_0kg_out1_adc (vS16)0xFFEA + +#define D_ch1_wantline (vS16)0x18da +#define D_ch2_wantline (vS16)0x18da +#define D_ch3_wantline (vS16)0x18da +#define D_ch4_wantline (vS16)0x18da +/////需要通过测试配置 如果不在意符号位 可以优化掉 +#define D_ch1_out1_offset (vS16)(D_ch1_wantline-D_ch1_0kg_out1_adc) +#define D_ch2_out1_offset (vS16)(D_ch2_wantline-D_ch2_0kg_out1_adc) +#define D_ch3_out1_offset (vS16)(D_ch3_wantline-D_ch3_0kg_out1_adc) +#define D_ch4_out1_offset (vS16)(D_ch4_wantline-D_ch4_0kg_out1_adc) + typedef struct {///!!!!!和 D_TS_adc_SPara_LEN 需要一一对应 u8 rev1; ////= 0x30 第一次运行 u8 ch; - vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 - vU16 offset; ///当前adc被偏移到wantline的时候 和原始值out_adc的差值 一般=(wantline-原始adc) - vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 - vU8 bshift444; ///移动的位数 1-2 2-4 3-8 4-16 fixme:需要开放时调整 + // vU16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 + // vU16 offset; ///当前adc被偏移到wantline的时候 和原始值out_adc的差值 一般=(wantline-原始adc) + // vU8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 + // vU8 bshift444; ///移动的位数 1-2 2-4 3-8 4-16 fixme:需要开放时调整 + u16 wantline; ///固定的硬件参数(例如称重中的0kg,压力中的0压力)时想要输出的adc的值 + u16 offset; ///当前adc被偏移到wantline的时候 和原始值out_adc的差值 一般=(wantline-原始adc) + u8 ashift; ///移动的位数 1-2 2-4 3-8 4-16 + u8 bshift444; ///移动的位数 1-2 2-4 3-8 4-16 fixme:需要开放时调整 // u8 rev1; // u8 rev2; // u8 rev2; }TS_adc_SPara_; + extern TS_adc_SPara_ TS_adc_SPara[D_ADC_CHANNEL_NUM];