You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.3 KiB

#include "../app/task_adc.h"
#include "../msp/msp_adc.h"
#include "../app/app_config.h"
#include "../msp/uart0.h"
S_TASK_ADC _s_task_adc;
void L3_task_Adc_init(void)
{
L1_task_init(&_s_task_adc.task);
_s_task_adc.index = 0;
_s_task_adc.SUM = 0;
L3_task_s_go(_s_task_adc,D_task_init);
}
#define D_task_ADC_READ 0x50
#define D_task_ADC_COUNT 0x51
void L3_task_Adc_handler(S_TASK_ADC *s)
{
TTSS_Task_init()
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
TTSS_Task_step(D_task_ADC_READ)
s->adc_val[_s_task_adc.index] = L1_ADC_Read(12);
s->SUM += s->adc_val[_s_task_adc.index++];
if (_s_task_adc.index >= 10)
{
_s_task_adc.index = 0;
L2_task_go_Tdelay(D_task_ADC_COUNT,D_Tdelay_300ms);
}
else
{
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
}
TTSS_Task_step(D_task_ADC_COUNT)
// 计算平均值
U16 Aver = s->SUM / ADC_NUM;
// 计算方差
U8 i;
FP32 Variance = 0;
for(i = 0; i < ADC_NUM; i++)
{
Variance += (s->adc_val[i] - Aver) * (s->adc_val[i] - Aver);
}
Variance /= ADC_NUM;
// // 方差合格,计算电量,放到G,不合格丢弃
// if ((U16)(Variance*10) < 2)
// {
// Vin = (Aver / 0x1000) * 3.3;
// Percent = Vin / 4.2
// }
Aver = 0;
L2_task_go_Tdelay(D_task_ADC_READ,D_Tdelay_300ms);
TTSS_Task_end();
}