sync_detector still not working...
This commit is contained in:
@ -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';
|
||||
|
||||
@ -275,70 +275,72 @@ void HAL_ADC_ConvCpltCallback(ADC_HandleTypeDef* hadc)
|
||||
|
||||
if (Sweep_state.curr_step_started_flag == 2) {
|
||||
Sweep_state.curr_step_started_flag = 0; // reset flag after processing second half
|
||||
for (uint32_t i = ADC_BUFF_SIZE/2; i < Sweep_state.curr_step_start_DMA_N; i++) {
|
||||
if ((i & 1) != 0){
|
||||
ADC_proc.sum_ON += ADC1_buff_circular[i];
|
||||
}else{
|
||||
ADC_proc.sum_OFF += ADC1_buff_circular[i];
|
||||
}
|
||||
}
|
||||
for (uint32_t i = ADC_BUFF_SIZE/2; i < Sweep_state.curr_step_start_DMA_N; i++) {
|
||||
uint16_t v = ADC1_buff_circular[i];
|
||||
uint32_t s = sample_seq++;
|
||||
if ((s & 1) != 0) { ADC_proc.sum_ON += v; ADC_proc.N_on++; } else { ADC_proc.sum_OFF += v; ADC_proc.N_off++; }
|
||||
}
|
||||
|
||||
ADC_proc.N += (Sweep_state.curr_step_start_DMA_N - ADC_BUFF_SIZE/2)/2;
|
||||
ADC_proc.N += (Sweep_state.curr_step_start_DMA_N - ADC_BUFF_SIZE/2)/2;
|
||||
|
||||
ADC_proc_shadow.sum_ON = ADC_proc.sum_ON;
|
||||
ADC_proc_shadow.sum_OFF = ADC_proc.sum_OFF;
|
||||
ADC_proc_shadow.avg_ON = ADC_proc.avg_ON;
|
||||
ADC_proc_shadow.avg_OFF = ADC_proc.avg_OFF;
|
||||
ADC_proc_shadow.N = ADC_proc.N;
|
||||
ADC_proc_shadow.status = 2; // buffer filled
|
||||
ADC_proc_shadow.N = ADC_proc.N;
|
||||
ADC_proc_shadow.N_on = ADC_proc.N_on;
|
||||
ADC_proc_shadow.N_off = ADC_proc.N_off;
|
||||
ADC_proc_shadow.status = 2; // buffer filled
|
||||
|
||||
|
||||
ADC_proc.sum = 0;
|
||||
ADC_proc.sum_ON = 0;
|
||||
ADC_proc.sum_OFF = 0;
|
||||
ADC_proc.N = 0;
|
||||
ADC_proc.avg_ON = 0;
|
||||
ADC_proc.avg_OFF = 0;
|
||||
ADC_proc.status = 1; // collecting data
|
||||
ADC_proc.N = 0;
|
||||
ADC_proc.N_on = 0;
|
||||
ADC_proc.N_off = 0;
|
||||
ADC_proc.avg_ON = 0;
|
||||
ADC_proc.avg_OFF = 0;
|
||||
ADC_proc.status = 1; // collecting data
|
||||
|
||||
for (uint32_t i = Sweep_state.curr_step_start_DMA_N; i < ADC_BUFF_SIZE; i++) {
|
||||
if ((i & 1) != 0){
|
||||
ADC_proc.sum_ON += ADC1_buff_circular[i];
|
||||
}else{
|
||||
ADC_proc.sum_OFF += ADC1_buff_circular[i];
|
||||
}
|
||||
}
|
||||
for (uint32_t i = Sweep_state.curr_step_start_DMA_N; i < ADC_BUFF_SIZE; i++) {
|
||||
uint16_t v = ADC1_buff_circular[i];
|
||||
uint32_t s = sample_seq++;
|
||||
if ((s & 1) != 0) { ADC_proc.sum_ON += v; ADC_proc.N_on++; } else { ADC_proc.sum_OFF += v; ADC_proc.N_off++; }
|
||||
}
|
||||
ADC_proc.N = (ADC_BUFF_SIZE - Sweep_state.curr_step_start_DMA_N)/2;
|
||||
|
||||
|
||||
}else{
|
||||
for (uint32_t i = ADC_BUFF_SIZE/2; i < ADC_BUFF_SIZE; i++) {
|
||||
if ((i & 1) != 0){
|
||||
ADC_proc.sum_ON += ADC1_buff_circular[i];
|
||||
}else{
|
||||
ADC_proc.sum_OFF += ADC1_buff_circular[i];
|
||||
}
|
||||
}
|
||||
for (uint32_t i = ADC_BUFF_SIZE/2; i < ADC_BUFF_SIZE; i++) {
|
||||
uint16_t v = ADC1_buff_circular[i];
|
||||
uint32_t s = sample_seq++;
|
||||
if ((s & 1) != 0) { ADC_proc.sum_ON += v; ADC_proc.N_on++; } else { ADC_proc.sum_OFF += v; ADC_proc.N_off++; }
|
||||
}
|
||||
ADC_proc.N += (ADC_BUFF_SIZE - ADC_BUFF_SIZE/2)/2;
|
||||
}
|
||||
|
||||
//if (0){
|
||||
if (ADC_proc.N >= ADC_BUFF_SIZE*100){
|
||||
ADC_proc_shadow.sum_OFF = ADC_proc.sum_OFF;
|
||||
ADC_proc_shadow.sum_ON = ADC_proc.sum_ON;
|
||||
ADC_proc_shadow.avg_ON = ADC_proc.avg_ON;
|
||||
ADC_proc_shadow.avg_OFF = ADC_proc.avg_OFF;
|
||||
ADC_proc_shadow.N = ADC_proc.N;
|
||||
ADC_proc_shadow.status = 2; // buffer filled
|
||||
if (ADC_proc.N >= ADC_BUFF_SIZE*100){
|
||||
ADC_proc_shadow.sum_OFF = ADC_proc.sum_OFF;
|
||||
ADC_proc_shadow.sum_ON = ADC_proc.sum_ON;
|
||||
ADC_proc_shadow.avg_ON = ADC_proc.avg_ON;
|
||||
ADC_proc_shadow.avg_OFF = ADC_proc.avg_OFF;
|
||||
ADC_proc_shadow.N = ADC_proc.N;
|
||||
ADC_proc_shadow.N_on = ADC_proc.N_on;
|
||||
ADC_proc_shadow.N_off = ADC_proc.N_off;
|
||||
ADC_proc_shadow.status = 2; // buffer filled
|
||||
|
||||
|
||||
ADC_proc.sum_OFF = 0;
|
||||
ADC_proc.sum_ON = 0;
|
||||
|
||||
ADC_proc.N = 0;
|
||||
ADC_proc.avg_ON = 0;
|
||||
ADC_proc.avg_OFF = 0;
|
||||
ADC_proc.status = 1; // collecting data
|
||||
ADC_proc.N = 0;
|
||||
ADC_proc.N_on = 0;
|
||||
ADC_proc.N_off = 0;
|
||||
ADC_proc.avg_ON = 0;
|
||||
ADC_proc.avg_OFF = 0;
|
||||
ADC_proc.status = 1; // collecting data
|
||||
}
|
||||
// This function is called when the first half of the ADC buffer is filled
|
||||
// You can process the first half of ADC1_buff_circular here
|
||||
@ -351,50 +353,47 @@ void HAL_ADC_ConvHalfCpltCallback(ADC_HandleTypeDef* hadc)
|
||||
HAL_GPIO_TogglePin(LED_BLUE_GPIO_Port, LED_BLUE_Pin);
|
||||
if (Sweep_state.curr_step_started_flag == 1) {
|
||||
Sweep_state.curr_step_started_flag = 0;
|
||||
for (uint32_t i = 0; i < Sweep_state.curr_step_start_DMA_N; i++) {
|
||||
if ((i & 1) != 0){
|
||||
ADC_proc.sum_ON += ADC1_buff_circular[i];
|
||||
}else{
|
||||
ADC_proc.sum_OFF += ADC1_buff_circular[i];
|
||||
}
|
||||
}
|
||||
for (uint32_t i = 0; i < Sweep_state.curr_step_start_DMA_N; i++) {
|
||||
uint16_t v = ADC1_buff_circular[i];
|
||||
uint32_t s = sample_seq++;
|
||||
if ((s & 1) != 0) { ADC_proc.sum_ON += v; ADC_proc.N_on++; } else { ADC_proc.sum_OFF += v; ADC_proc.N_off++; }
|
||||
}
|
||||
|
||||
ADC_proc.N += (Sweep_state.curr_step_start_DMA_N)/2;
|
||||
|
||||
ADC_proc_shadow.sum_ON = ADC_proc.sum_ON;
|
||||
ADC_proc_shadow.avg_ON = ADC_proc.avg_ON;
|
||||
ADC_proc_shadow.sum_OFF = ADC_proc.sum_OFF;
|
||||
ADC_proc_shadow.avg_OFF = ADC_proc.avg_OFF;
|
||||
ADC_proc_shadow.N = ADC_proc.N;
|
||||
ADC_proc_shadow.status = 2; // buffer filled
|
||||
ADC_proc_shadow.sum_ON = ADC_proc.sum_ON;
|
||||
ADC_proc_shadow.avg_ON = ADC_proc.avg_ON;
|
||||
ADC_proc_shadow.sum_OFF = ADC_proc.sum_OFF;
|
||||
ADC_proc_shadow.avg_OFF = ADC_proc.avg_OFF;
|
||||
ADC_proc_shadow.N = ADC_proc.N;
|
||||
ADC_proc_shadow.N_on = ADC_proc.N_on;
|
||||
ADC_proc_shadow.N_off = ADC_proc.N_off;
|
||||
ADC_proc_shadow.status = 2; // buffer filled
|
||||
|
||||
|
||||
ADC_proc.sum_ON = 0;
|
||||
ADC_proc.sum_OFF = 0;
|
||||
ADC_proc.sum = 0;
|
||||
ADC_proc.N = 0;
|
||||
ADC_proc.avg_OFF = 0;
|
||||
ADC_proc.avg_ON = 0;
|
||||
ADC_proc.status = 1; // collecting data
|
||||
ADC_proc.N = 0;
|
||||
ADC_proc.N_on = 0;
|
||||
ADC_proc.N_off = 0;
|
||||
ADC_proc.avg_OFF = 0;
|
||||
ADC_proc.avg_ON = 0;
|
||||
ADC_proc.status = 1; // collecting data
|
||||
|
||||
for (uint32_t i = Sweep_state.curr_step_start_DMA_N; i < ADC_BUFF_SIZE/2; i++) {
|
||||
if ((i & 1) != 0){
|
||||
|
||||
ADC_proc.sum_ON += ADC1_buff_circular[i];
|
||||
}else{
|
||||
ADC_proc.sum_OFF += ADC1_buff_circular[i];
|
||||
}
|
||||
uint16_t v = ADC1_buff_circular[i];
|
||||
uint32_t s = sample_seq++;
|
||||
if ((s & 1) != 0) { ADC_proc.sum_ON += v; ADC_proc.N_on++; } else { ADC_proc.sum_OFF += v; ADC_proc.N_off++; }
|
||||
}
|
||||
ADC_proc.N = (ADC_BUFF_SIZE/2 - Sweep_state.curr_step_start_DMA_N)/2;
|
||||
|
||||
}else{
|
||||
for (uint32_t i = 0; i < ADC_BUFF_SIZE/2; i++) {
|
||||
if ((i & 1) != 0){
|
||||
ADC_proc.sum_ON += ADC1_buff_circular[i];
|
||||
}else{
|
||||
ADC_proc.sum_OFF += ADC1_buff_circular[i];
|
||||
}
|
||||
}
|
||||
for (uint32_t i = 0; i < ADC_BUFF_SIZE/2; i++) {
|
||||
uint16_t v = ADC1_buff_circular[i];
|
||||
uint32_t s = sample_seq++;
|
||||
if ((s & 1) != 0) { ADC_proc.sum_ON += v; ADC_proc.N_on++; } else { ADC_proc.sum_OFF += v; ADC_proc.N_off++; }
|
||||
}
|
||||
ADC_proc.N += (ADC_BUFF_SIZE/2)/2;
|
||||
}
|
||||
// This function is called when the first half of the ADC buffer is filled
|
||||
|
||||
Reference in New Issue
Block a user