void adc_test(void) { unsigned char i; unsigned char n; unsigned char tail; short int res_voltage = 0; short int temp_voltage = 0; uint16 temp_adc = 0; float pvoltage = 0; adc_switch_channel(VOLTAGE); for(i = 0; i < 50; i++) { START_ADC(); temp_adc += adc_result; } n = min(adc_mean_num, adc_queue.count); // 取当前队列中数据个数与设置值的最小值 if(0 == n) return; tail = adc_queue.tail; // 获取队列尾部下标 tail = (tail-1) & ADC_MAX_SIZE_MASK; // 减1之后,指向最后加入的一个数据 // 减1是因为下标是从0开始的 for(i = 0; i < n; i++) { temp_voltage = adc_queue.data[tail].voltage; res_voltage += temp_voltage; tail = (tail-1) & ADC_MAX_SIZE_MASK; } pvoltage = 5.0f * res_voltage / n / 1024.0f; uart_putnstring((uint8 *)&pvoltage, 4); OSTimeDly(OS_TICKS_PER_SEC/2); }
void adc_convert_start(void) { adc_status_flag.is_current_convert = TRUE; adc_status_flag.is_first_time = TRUE; adc_switch_channel(ADC_VOLTAGE); START_ADC(); }
void adc_convert_start(void) { memset(&adc_status, 0, sizeof(AdcStatusFlag)); adc_status.who_is_convert = CURRENT; // 置位电流转换,先电流后电压顺序 adc_status.first_time = TRUE; // 第一次转换 adc_switch_channel(CURRENT); // 切换到电流转换 START_ADC(); // 启动一次转换(没有采用连续转换) }