更新:
1、mux任务调整,开机动画结束后再启动,否则会与其他任务的初始化冲突; 2、EEPROM的读取新增异常数据检测与处理;
This commit is contained in:
parent
53358b12c6
commit
88c0dbc6e3
|
@ -116,12 +116,11 @@ float result = 0;
|
|||
}
|
||||
else
|
||||
{
|
||||
curma_out_cal_enable = 2;
|
||||
// //存在校准数据
|
||||
// curma_out_cal_enable = 1;
|
||||
//存在校准数据
|
||||
curma_out_cal_enable = 1;
|
||||
|
||||
// //将读到的数据存储至cur_ma_out_calibrate_table[CALIBRATE_CUR_MA_OUT_POINTS]
|
||||
// eeprom_dataread_single(EEPROM_TAG_CAL_CUR_MA_OUT);
|
||||
//将读到的数据存储至cur_ma_out_calibrate_table[CALIBRATE_CUR_MA_OUT_POINTS]
|
||||
eeprom_dataread_single(EEPROM_TAG_CAL_CUR_MA_OUT);
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
|
|
@ -46,6 +46,7 @@ typedef struct dac8552_object
|
|||
|
||||
extern dac8552x_object dac8552;
|
||||
extern float cur_ma_out_calibrate_table[CALIBRATE_CUR_MA_OUT_POINTS];
|
||||
extern uint8_t curma_out_cal_enable;
|
||||
|
||||
void dac8552_init(dac8552x_object *dac, dac8552_write write, dac8552_chip_select cs);
|
||||
void dac8552_operation(float32 *data1, float32 *data2);
|
||||
|
|
|
@ -629,54 +629,68 @@ void eeprom_datasave_single(uint8_t tag)
|
|||
void eeprom_dataread(void)
|
||||
{
|
||||
uint8_t temp_h = 0, temp_l = 0;
|
||||
uint16_t temp_w = 0;
|
||||
|
||||
//VOL V
|
||||
temp_h = eeprom_readdata(VOL_V_UP_ADDR);
|
||||
temp_l = eeprom_readdata(VOL_V_UP_ADDR + 8);
|
||||
tabdata.item0_page0_vup[0] = ( temp_h << 8 ) + temp_l;
|
||||
//数据异常时使用默认值
|
||||
if( (tabdata.item0_page0_vup[0] > VOL[0].up)||(tabdata.item0_page0_vup[0] < VOL[0].low) ) tabdata.item0_page0_vup[0] = VOL[0].up;
|
||||
|
||||
temp_h = eeprom_readdata(VOL_V_LOW_ADDR);
|
||||
temp_l = eeprom_readdata(VOL_V_LOW_ADDR + 8);
|
||||
tabdata.item0_page0_vlow[0] = ( temp_h << 8 ) + temp_l;
|
||||
//数据异常时使用默认值
|
||||
if( (tabdata.item0_page0_vlow[0] > VOL[0].up)||(tabdata.item0_page0_vlow[0] < VOL[0].low) ) tabdata.item0_page0_vlow[0] = VOL[0].low;
|
||||
|
||||
//出现错误后,提前返回
|
||||
//出现错误后,提前返回(连续四个字节不出错,直接读到最后)
|
||||
//该错误仅能表示超时,无法表示数据异常
|
||||
if(system_sts.eeprom_read_error) return;
|
||||
|
||||
//VOL mV
|
||||
temp_h = eeprom_readdata(VOL_MV_UP_ADDR);
|
||||
temp_l = eeprom_readdata(VOL_MV_UP_ADDR + 8);
|
||||
tabdata.item0_page0_vup[1] = ( temp_h << 8 ) + temp_l;
|
||||
if( (tabdata.item0_page0_vup[1] > VOL[1].up)||(tabdata.item0_page0_vup[1] < VOL[1].low) ) tabdata.item0_page0_vup[0] = VOL[1].up;
|
||||
|
||||
temp_h = eeprom_readdata(VOL_MV_LOW_ADDR);
|
||||
temp_l = eeprom_readdata(VOL_MV_LOW_ADDR + 8);
|
||||
tabdata.item0_page0_vlow[1] = ( temp_h << 8 ) + temp_l;
|
||||
if( (tabdata.item0_page0_vlow[1] > VOL[1].up)||(tabdata.item0_page0_vlow[1] < VOL[1].low) ) tabdata.item0_page0_vlow[0] = VOL[1].low;
|
||||
|
||||
//CUR
|
||||
//temp_h = eeprom_readdata(CUR_UP_ADDR);
|
||||
temp_l = eeprom_readdata(CUR_UP_ADDR + 8);
|
||||
tabdata.item0_page0_cup = temp_l;
|
||||
if( (tabdata.item0_page0_cup > CUR.up)||(tabdata.item0_page0_cup < CUR.low) ) tabdata.item0_page0_cup = CUR.up;
|
||||
|
||||
//temp_h = eeprom_readdata(CUR_LOW_ADDR);
|
||||
temp_l = eeprom_readdata(CUR_LOW_ADDR + 8);
|
||||
tabdata.item0_page0_clow = temp_l;
|
||||
if( (tabdata.item0_page0_clow > CUR.up)||(tabdata.item0_page0_clow < CUR.low) ) tabdata.item0_page0_clow = CUR.low;
|
||||
|
||||
//RES
|
||||
temp_h = eeprom_readdata(RES_UP_ADDR);
|
||||
temp_l = eeprom_readdata(RES_UP_ADDR + 8);
|
||||
tabdata.item0_page0_rup = ( temp_h << 8 ) + temp_l;
|
||||
if( (tabdata.item0_page0_rup > RES.up)||(tabdata.item0_page0_rup < RES.low) ) tabdata.item0_page0_rup = RES.up;
|
||||
|
||||
temp_h = eeprom_readdata(RES_LOW_ADDR);
|
||||
temp_l = eeprom_readdata(RES_LOW_ADDR + 8);
|
||||
tabdata.item0_page1_rlow = ( temp_h << 8 ) + temp_l;
|
||||
if( (tabdata.item0_page1_rlow > RES.up)||(tabdata.item0_page1_rlow < RES.low) ) tabdata.item0_page1_rlow = RES.low;
|
||||
|
||||
//FRE
|
||||
//temp_h = eeprom_readdata(FRE_UP_ADDR);
|
||||
temp_l = eeprom_readdata(FRE_UP_ADDR + 8);
|
||||
tabdata.item0_page1_fup = temp_l;
|
||||
if( (tabdata.item0_page1_fup > FRE.up)||(tabdata.item0_page1_fup < FRE.low) ) tabdata.item0_page1_fup = FRE.up;
|
||||
|
||||
//temp_h = eeprom_readdata(FRE_LOW_ADDR);
|
||||
temp_l = eeprom_readdata(FRE_LOW_ADDR + 8);
|
||||
tabdata.item0_page1_flow = temp_l;
|
||||
if( (tabdata.item0_page1_flow > FRE.up)||(tabdata.item0_page1_flow < FRE.low) ) tabdata.item0_page1_flow = FRE.low;
|
||||
|
||||
//TC K
|
||||
temp_h = eeprom_readdata(TC_K_UP_ADDR);
|
||||
|
@ -750,39 +764,55 @@ void eeprom_dataread(void)
|
|||
temp_l = eeprom_readdata(TC_T_LOW_ADDR + 8);
|
||||
tabdata.item0_page1_TClow[7] = ( temp_h << 8 ) + temp_l;
|
||||
|
||||
for(uint8_t i = 0; i < 8; i++)
|
||||
{
|
||||
if( (tabdata.item0_page1_TCup[i] > TC[i].up)||(tabdata.item0_page1_TCup[i] < TC[i].low) ) tabdata.item0_page1_TCup[i] = TC[i].up;
|
||||
if( (tabdata.item0_page1_TClow[i] > TC[i].up)||(tabdata.item0_page1_TClow[i] < TC[i].low) ) tabdata.item0_page1_TClow[i] = TC[i].low;
|
||||
}
|
||||
|
||||
//RTD
|
||||
temp_h = eeprom_readdata(RTD_UP_ADDR);
|
||||
temp_l = eeprom_readdata(RTD_UP_ADDR + 8);
|
||||
tabdata.item0_page2_RTDup = ( temp_h << 8 ) + temp_l;
|
||||
if( (tabdata.item0_page2_RTDup > RTD.up)||(tabdata.item0_page2_RTDup < RTD.low) ) tabdata.item0_page2_RTDup = RTD.up;
|
||||
|
||||
temp_h = eeprom_readdata(RTD_LOW_ADDR);
|
||||
temp_l = eeprom_readdata(RTD_LOW_ADDR + 8);
|
||||
tabdata.item0_page2_RTDlow = ( temp_h << 8 ) + temp_l;
|
||||
if( (tabdata.item0_page2_RTDlow > RTD.up)||(tabdata.item0_page2_RTDlow < RTD.low) ) tabdata.item0_page2_RTDlow = RTD.low;
|
||||
|
||||
//采样间隔
|
||||
temp_h = eeprom_readdata(SAMPLE_INTERVAL_ADDR);
|
||||
temp_l = eeprom_readdata(SAMPLE_INTERVAL_ADDR + 8);
|
||||
tabdata.item1_page0_sample_interval = ( temp_h << 8 ) + temp_l;
|
||||
if( (tabdata.item1_page0_sample_interval > SAMPLE_INTERVAL_MAX)||(tabdata.item1_page0_sample_interval < MENU_TASK_PERIOD) ) tabdata.item1_page0_sample_interval = 1000;
|
||||
|
||||
//描点数量
|
||||
temp_h = eeprom_readdata(PLOT_COUNT_ADDR);
|
||||
temp_l = eeprom_readdata(PLOT_COUNT_ADDR + 8);
|
||||
tabdata.item1_page0_plot_num = ( temp_h << 8 ) + temp_l;
|
||||
if( (tabdata.item1_page0_plot_num > PLOT_NUM_MAX)||(tabdata.item1_page0_plot_num < PLOT_NUM_MIN) ) tabdata.item1_page0_plot_num = 10;
|
||||
|
||||
//输入曲线颜色
|
||||
temp_h = eeprom_readdata(INPUT_COLOR_ADDR);
|
||||
temp_l = eeprom_readdata(INPUT_COLOR_ADDR + 8);
|
||||
tabdata.item1_page0_color_input = (COLORS)( ( temp_h << 8 ) + temp_l );
|
||||
temp_w = ( temp_h << 8 ) + temp_l;
|
||||
if(temp_w > 5) temp_w = 0;
|
||||
tabdata.item1_page0_color_input = (COLORS)temp_w;
|
||||
|
||||
//输出曲线颜色
|
||||
temp_h = eeprom_readdata(OUTPUT_COLOR_ADDR);
|
||||
temp_l = eeprom_readdata(OUTPUT_COLOR_ADDR + 8);
|
||||
tabdata.item1_page0_color_output = (COLORS)( ( temp_h << 8 ) + temp_l );
|
||||
temp_w = ( temp_h << 8 ) + temp_l;
|
||||
if(temp_w > 5) temp_w = 1;
|
||||
tabdata.item1_page0_color_output = (COLORS)temp_w;
|
||||
|
||||
//语言选择
|
||||
temp_h = eeprom_readdata(LANGUAGE_SELECT_ADDR);
|
||||
temp_l = eeprom_readdata(LANGUAGE_SELECT_ADDR + 8);
|
||||
tabdata.item3_page0_language = (LANGUAGES)( ( temp_h << 8 ) + temp_l );
|
||||
temp_w = ( temp_h << 8 ) + temp_l;
|
||||
if(temp_w > 1) temp_w = 0;
|
||||
tabdata.item3_page0_language = (LANGUAGES)temp_w;
|
||||
}
|
||||
|
||||
//读取指定数据
|
||||
|
@ -792,6 +822,7 @@ void eeprom_dataread_single(uint8_t tag)
|
|||
//32bits: h --- mh --- ml --- l
|
||||
uint8_t temp_h = 0, temp_l = 0;
|
||||
uint8_t temp_mh = 0, temp_ml = 0;
|
||||
float error_check = 0;
|
||||
|
||||
switch (tag)
|
||||
{
|
||||
|
@ -806,6 +837,14 @@ void eeprom_dataread_single(uint8_t tag)
|
|||
temp_ml = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 16);
|
||||
temp_l = eeprom_readdata(CAL_CUR_MA_OUT_ADDR_START + 32*i + 24);
|
||||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||||
|
||||
memcpy(&error_check, flt + i, 4);
|
||||
if( ((int16_t)error_check > CUR.up)||((int16_t)error_check < CUR.low) )
|
||||
{
|
||||
//任意一个点异常,随即退出,不启用校准
|
||||
curma_out_cal_enable = 2;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(cur_ma_out_calibrate_table, flt, sizeof(cur_ma_out_calibrate_table));
|
||||
|
@ -823,6 +862,14 @@ void eeprom_dataread_single(uint8_t tag)
|
|||
temp_ml = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 16);
|
||||
temp_l = eeprom_readdata(CAL_VOL_V_OUT_ADDR_START + 32*i + 24);
|
||||
flt[i] = (temp_h << 24)|(temp_mh << 16)|(temp_ml << 8)|(temp_l);
|
||||
|
||||
memcpy(&error_check, flt + i, 4);
|
||||
if( ((int16_t)error_check > VOL[0].up)||((int16_t)error_check < VOL[0].low) )
|
||||
{
|
||||
//任意一个点异常,随即退出,不启用校准
|
||||
volv_out_cal_enable = 2;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
memcpy(vol_v_out_calibrate_table, flt, sizeof(vol_v_out_calibrate_table));
|
||||
|
|
|
@ -49,6 +49,7 @@ void MX_DAC_Init(void);
|
|||
float calibrate_vol_v(float raw);
|
||||
|
||||
extern float vol_v_out_calibrate_table[CALIBRATE_VOL_V_OUT_POINTS];
|
||||
extern uint8_t volv_out_cal_enable;
|
||||
/* USER CODE END Prototypes */
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
|
|
@ -331,37 +331,41 @@ void start_mux_analog(void const * argument)
|
|||
/* Infinite loop */
|
||||
for (;;)
|
||||
{
|
||||
//编程输出过程,放在此处实时性更好
|
||||
if(progout_data.process == PROGOUT_RUNNING)
|
||||
//开机动画结束后再执行
|
||||
if(menu_data.scr_init_flag == 1)
|
||||
{
|
||||
switch (progout_data.output_mode)
|
||||
//编程输出过程,放在此处实时性更好
|
||||
if(progout_data.process == PROGOUT_RUNNING)
|
||||
{
|
||||
case PROG_OUT_STEP:
|
||||
switch (progout_data.output_mode)
|
||||
{
|
||||
running_process_step();
|
||||
}
|
||||
break;
|
||||
case PROG_OUT_STEP:
|
||||
{
|
||||
running_process_step();
|
||||
}
|
||||
break;
|
||||
|
||||
case PROG_OUT_TRIANGLE:
|
||||
{
|
||||
running_process_triangle();
|
||||
}
|
||||
break;
|
||||
case PROG_OUT_TRIANGLE:
|
||||
{
|
||||
running_process_triangle();
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//按键扫描
|
||||
tm1650_read_key(&hi2c1, &kp_flag, COMMAND_READ_KEY_DATA, &key);
|
||||
|
||||
//输出&输入通道切换
|
||||
mux_signal_switch(&mux_signal);
|
||||
|
||||
//处理校准事件
|
||||
deal_calibrate_affair();
|
||||
}
|
||||
|
||||
//按键扫描
|
||||
tm1650_read_key(&hi2c1, &kp_flag, COMMAND_READ_KEY_DATA, &key);
|
||||
|
||||
//输出&输入通道切换
|
||||
mux_signal_switch(&mux_signal);
|
||||
|
||||
//处理校准事件
|
||||
deal_calibrate_affair();
|
||||
|
||||
//内存、内存碎片、CPU占用监控
|
||||
my_monitor_cnt++;
|
||||
if( my_monitor_cnt * MUX_TASK_PERIOD >= 200)
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue