implemented sync_detector logic. But it is a bit buggy: data stored in avg_ON is very similar to avg_OFF. But while sync_detector phase is inverted -- both behave the same way

This commit is contained in:
2025-12-19 23:20:55 +03:00
parent eb6cb9b762
commit 186ad1939a
19 changed files with 5244 additions and 4772 deletions

View File

@ -66,11 +66,20 @@ volatile uint32_t curr_step_start_N = 0;
/* ADC1 circular DMA buffer definition */
uint16_t ADC1_buff_circular[ADC_BUFF_SIZE];
//char ADC_msg[] = "curr_step ?????? ??????????\r\nSweep_start\n\r";
char ADC_msg[] = "stp ?????? ??????????\r\nSweep_start\n\r";
#define ADC_msg_len 24
#define ADC_msg_len_Sweep_start 37
#define ADC_msg_val_pos 12
//char ADC_msg[] = "stp ?????? ?????????? ??????????\r\nSweep_start\n\r";
//#define ADC_msg_len 35
//#define ADC_msg_len_Sweep_start 48
#define ADC_msg_val_ON_pos 12
#define ADC_msg_val_OFF_pos 23
#define ADC_msg_step_pos 4
/* USER CODE END 0 */
@ -112,13 +121,17 @@ int main(void)
ADC_proc_shadow.status = 0; // ADC started
ADC_proc_shadow.N = 0;
ADC_proc_shadow.sum = 0;
ADC_proc_shadow.avg = 0;
ADC_proc_shadow.sum_ON = 0;
ADC_proc_shadow.avg_ON = 0;
ADC_proc_shadow.sum_OFF = 0;
ADC_proc_shadow.avg_OFF = 0;
ADC_proc.status = 0; // ADC started
ADC_proc.N = 0;
ADC_proc.sum = 0;
ADC_proc.avg = 0;
ADC_proc.sum_ON = 0;
ADC_proc.avg_ON = 0;
ADC_proc.sum_OFF = 0;
ADC_proc.avg_OFF = 0;
uint32_t curr_points_N_max = 100;
uint32_t curr_points_N =0;
@ -133,22 +146,39 @@ int main(void)
//HAL_Delay(100);
if (ADC_proc_shadow.status == 2) {
ADC_proc_shadow.avg = ADC_proc_shadow.sum / ADC_proc_shadow.N;
// ADC_proc_shadow.avg_ON = ADC_proc_shadow.sum_ON / ADC_proc_shadow.N;
ADC_proc_shadow.avg_OFF = ADC_proc_shadow.sum_OFF / ADC_proc_shadow.N;
ADC_proc_shadow.avg_ON = ADC_proc_shadow.sum_ON / ADC_proc_shadow.N;
ADC_proc_shadow.avg_ON = ADC_proc_shadow.avg_OFF;
// ADC_proc_shadow.avg_ON = ADC_proc_shadow.avg_ON - ADC_proc_shadow.avg_OFF;
ADC_proc_shadow.status = 1; // reset for next accumulation
ADC_proc_shadow.sum = 0;
ADC_proc_shadow.N = 0;
ADC_msg[ADC_msg_val_ON_pos + 0] = (ADC_proc_shadow.avg_ON / 1000000000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 1] = (ADC_proc_shadow.avg_ON / 100000000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 2] = (ADC_proc_shadow.avg_ON / 10000000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 3] = (ADC_proc_shadow.avg_ON / 1000000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 4] = (ADC_proc_shadow.avg_ON / 100000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 5] = (ADC_proc_shadow.avg_ON / 10000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 6] = (ADC_proc_shadow.avg_ON / 1000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 7] = (ADC_proc_shadow.avg_ON / 100) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 8] = (ADC_proc_shadow.avg_ON / 10) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 9] = (ADC_proc_shadow.avg_ON / 1) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 0] = (ADC_proc_shadow.avg / 10000000000) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 1] = (ADC_proc_shadow.avg / 1000000000) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 2] = (ADC_proc_shadow.avg / 10000000) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 3] = (ADC_proc_shadow.avg / 1000000) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 4] = (ADC_proc_shadow.avg / 100000) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 5] = (ADC_proc_shadow.avg / 10000) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 6] = (ADC_proc_shadow.avg / 1000) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 7] = (ADC_proc_shadow.avg / 100) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 8] = (ADC_proc_shadow.avg / 10) % 10 + '0';
ADC_msg[ADC_msg_val_pos + 9] = (ADC_proc_shadow.avg / 1) % 10 + '0';
/*
ADC_msg[ADC_msg_val_OFF_pos + 0] = (ADC_proc_shadow.avg_OFF / 1000000000) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 1] = (ADC_proc_shadow.avg_OFF / 100000000) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 2] = (ADC_proc_shadow.avg_OFF / 10000000) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 3] = (ADC_proc_shadow.avg_OFF / 1000000) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 4] = (ADC_proc_shadow.avg_OFF / 100000) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 5] = (ADC_proc_shadow.avg_OFF / 10000) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 6] = (ADC_proc_shadow.avg_OFF / 1000) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 7] = (ADC_proc_shadow.avg_OFF / 100) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 8] = (ADC_proc_shadow.avg_OFF / 10) % 10 + '0';
ADC_msg[ADC_msg_val_OFF_pos + 9] = (ADC_proc_shadow.avg_OFF / 1) % 10 + '0';
*/
ADC_msg[ADC_msg_step_pos + 0] = (Sweep_state.curr_step_N / 100000) % 10 + '0';
ADC_msg[ADC_msg_step_pos + 1] = (Sweep_state.curr_step_N / 10000) % 10 + '0';