#include "adc.h"
#include "nrf_gpio.h"
#include "nrf_log.h"
#include "nrf_log_ctrl.h"
#include "nrf_log_default_backends.h"
#define SAMPLES_IN_BUFFER 10 /**< ADC采样数据缓存大小(字节数) */
nrf_saadc_value_t m_buffer_pool[SAMPLES_IN_BUFFER];
int16_t gADC_Result[SAMPLES_IN_BUFFER];
int32_t ADC_SUM =0;
uint8_t bat_Percent_val;
uint8_t Cal_Bat_percentage(int16_t adc_val)
{
uint8_t per = ((adc_val*3.6/1024.0-1.5)/0.55)*100 ;
// if(charger_status() == ChargingComplete)
// {
// per=100;
// }
return per ;
}
void saadc_callback(nrf_drv_saadc_evt_t const * p_event)
{
uint8_t i;
ADC_SUM = 0;
if (p_event->type == NRF_DRV_SAADC_EVT_DONE) //buffer 满了(10)才会触发此事件
{
ret_code_t err_code;
err_code = nrf_drv_saadc_buffer_convert(p_event->data.done.p_buffer, SAMPLES_IN_BUFFER);
APP_ERROR_CHECK(err_code);
for(i=0;i<p_event->data.done.size;i++)
{
gADC_Result[i] = p_event->data.done.p_buffer[i];
}
for(i=0;i<10;i++)
{
ADC_SUM += gADC_Result[i];
}
ADC_SUM = ADC_SUM/10;
bat_Percent_val = Cal_Bat_percentage(ADC_SUM);
// NRF_LOG_INFO("ADC=%d,bat=%d%%\r\n",ADC_SUM,bat_Percent_val);
}
}
void saadc_init(void)
{
//------------------------------------------------------------------------------
ret_code_t err_code;
nrf_saadc_channel_config_t channel_config5 = NRF_DRV_SAADC_DEFAULT_CHANNEL_CONFIG_SE(NRF_SAADC_INPUT_AIN5);
channel_config5.acq_time = NRF_SAADC_ACQTIME_40US;
//channel_config5.gain = NRF_SAADC_GAIN1;
err_code = nrf_drv_saadc_init(NULL, saadc_callback); //默认 1 :10bit
APP_ERROR_CHECK(err_code);
err_code = nrf_drv_saadc_channel_init(0, &channel_config5);
APP_ERROR_CHECK(err_code);
err_code = nrf_drv_saadc_buffer_convert(m_buffer_pool, SAMPLES_IN_BUFFER);
APP_ERROR_CHECK(err_code);
}
//在timer中调用,50ms启动一次采样
void battery_dect_start(void)
{
nrf_drv_saadc_sample();
}