yincheng.zhong
2024-11-22 2bc159c6a126a414553f36a97e3f25d9923166b5
Src/OnChipDevices/ADC.c
@@ -1,5 +1,6 @@
#include "ADC.h"
#include "main.h"
uint16_t Get_ADC_Value()
{
HAL_ADC_Start(&hadc);
@@ -8,6 +9,18 @@
      {
         return HAL_ADC_GetValue(&hadc);
      }          
}
uint16_t GetRandomValue(void)
{
   uint16_t temp;
   for(uint8_t i=0;i<16;i++)
    {
        if(Get_ADC_Value()%2)
        {
            temp=temp|(1<<i);
        }
    }
    return temp;
}
float bat_volt;
uint8_t Get_Battary(void)
@@ -29,8 +42,44 @@
      last_value = 100;
   if(last_value<0)
      last_value = 0;
}else{
   last_value=0;
    }else{
        last_value=0;
    }
   return last_value;
}
uint16_t verfint_cal,adc_val;
uint8_t Get_VDDVlotage(void)
{   static float last_value = 100;
    static uint8_t first=1;
     static uint16_t bat_count = 0;
//    if(bat_count++%600==0)
//    {
    READC_Init();
     Delay_Ms(10);
  HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_SET);
    adc_val = Get_ADC_Value();
    MX_ADC_DeInit();
   //temp_voltage = (float)Get_ADC_Value()/621;  //(value/4096*3.3*2-3.5)/0.7
    verfint_cal = *(__IO uint16_t *)(0X1FF80078);
    bat_volt = 3*(float)verfint_cal/adc_val-0.28;
   if(bat_volt>=3.0)
   {
      if(first)
      {
            first = 0;
            last_value =(bat_volt-3.0)*167;//(bat_volt-3.5)/0.6*100
      }
      last_value = 0.9*last_value + (bat_volt-3.0)*16.7;
   if(last_value>100)
      last_value = 100;
   if(last_value<0)
      last_value = 0;
    }else{
        last_value=0;
    }
    printf("VCC:%.2f\r\n",bat_volt);
    HAL_GPIO_WritePin(GPIOA, GPIO_PIN_12, GPIO_PIN_RESET);
//}
   return last_value;   
}