sync_detector still not working...

This commit is contained in:
2025-12-20 14:41:55 +03:00
parent c930b503c2
commit 179dfd8d9c
19 changed files with 5389 additions and 4909 deletions

View File

@ -60,25 +60,25 @@ static void MX_ADC1_Init(void);
/* Private user code ---------------------------------------------------------*/
/* USER CODE BEGIN 0 */
/* ADC_proc/ADC_proc_shadow/Sweep_state definitions */
volatile struct ADC_proc_typedef ADC_proc, ADC_proc_shadow;
volatile struct Sweep_state_typedef Sweep_state;
volatile uint32_t curr_step_start_N = 0;
volatile struct ADC_proc_typedef ADC_proc, ADC_proc_shadow;
volatile struct Sweep_state_typedef Sweep_state;
volatile uint32_t curr_step_start_N = 0;
volatile uint32_t sample_seq = 0;
/* ADC1 circular DMA buffer definition */
uint16_t ADC1_buff_circular[ADC_BUFF_SIZE];
char ADC_msg[] = "stp ?????? ??????????\r\nSweep_start\n\r";
#define ADC_msg_len 24
#define ADC_msg_len_Sweep_start 37
char ADC_msg[] = "stp ?????? ??????????\r\nSweep_start\n\r";
#define ADC_msg_len 24
#define ADC_msg_len_Sweep_start 37
//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_val_ON_pos 12
#define ADC_msg_step_pos 4
/* USER CODE END 0 */
@ -120,18 +120,22 @@ int main(void)
HAL_ADC_Start_DMA(&hadc1, (uint32_t*)ADC1_buff_circular, ADC_BUFF_SIZE);
ADC_proc_shadow.status = 0; // ADC started
ADC_proc_shadow.N = 0;
ADC_proc_shadow.N = 0;
ADC_proc_shadow.N_on = 0;
ADC_proc_shadow.N_off = 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_ON = 0;
ADC_proc.avg_ON = 0;
ADC_proc.sum_OFF = 0;
ADC_proc.avg_OFF = 0;
ADC_proc.status = 0; // ADC started
ADC_proc.N = 0;
ADC_proc.N_on = 0;
ADC_proc.N_off = 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;
@ -145,27 +149,48 @@ int main(void)
//HAL_GPIO_TogglePin(LED_RED_GPIO_Port, LED_RED_Pin);
//HAL_Delay(100);
if (ADC_proc_shadow.status == 2) {
// 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;
if (ADC_proc_shadow.status == 2) {
if (ADC_proc_shadow.N_on) {
ADC_proc_shadow.avg_ON = ADC_proc_shadow.sum_ON / ADC_proc_shadow.N_on;
} else {
ADC_proc_shadow.avg_ON = 0;
}
if (ADC_proc_shadow.N_off) {
ADC_proc_shadow.avg_OFF = ADC_proc_shadow.sum_OFF / ADC_proc_shadow.N_off;
} else {
ADC_proc_shadow.avg_OFF = 0;
}
//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;
/*
if (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;
}else{
ADC_proc_shadow.avg_ON = ADC_proc_shadow.avg_OFF - ADC_proc_shadow.avg_ON;
}
//*/
// prepare diff output
int32_t diff = (int32_t)ADC_proc_shadow.avg_ON - (int32_t)ADC_proc_shadow.avg_OFF;
uint32_t adiff = (diff >= 0) ? (uint32_t)diff : (uint32_t)(-diff);
ADC_proc_shadow.status = 1; // reset for next accumulation
ADC_proc_shadow.sum = 0;
ADC_proc_shadow.N = 0;
ADC_proc_shadow.N_on = 0;
ADC_proc_shadow.N_off = 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_ON_pos + 0] = (adiff / 1000000000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 1] = (adiff / 100000000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 2] = (adiff / 10000000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 3] = (adiff / 1000000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 4] = (adiff / 100000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 5] = (adiff / 10000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 6] = (adiff / 1000) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 7] = (adiff / 100) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 8] = (adiff / 10) % 10 + '0';
ADC_msg[ADC_msg_val_ON_pos + 9] = (adiff / 1) % 10 + '0';
// keep original 2-field format; single numeric field holds |diff|
/*
ADC_msg[ADC_msg_val_OFF_pos + 0] = (ADC_proc_shadow.avg_OFF / 1000000000) % 10 + '0';