RA生态之ADC 采样

Posted 衾许°

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RA生态之ADC 采样相关的知识,希望对你有一定的参考价值。

ADC 配置

点击 Stacks->New Stack-> Analog -> ADC r_adc

先是单通道ADC

默认12位ADC精度,对齐方式扫描(也最常见的方式)

下图是设置回调函数adc_callback,和回调中断优先级为2

 在PIN那里选择通道

R_ADC_Open()函数:开启和初始化 ADC 模式(在这里是开启adc0)

/* Initializes the module. */ err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg); /* Handle any errors. This function should be defined by the user. */ assert (FSP_SUCCESS == err);

 R_ADC_ScanCfg()函数: 配置 ADC 扫描参数,赋能 ADC 通道(在这里是赋能adc的通道0)

/* Enable channels. */ err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg); assert (FSP_SUCCESS == err);

 R_ADC_ScanStart()函数:启动扫描,若设置为单次扫描,没扫描完一次都需要重新开启

/* Enable scan triggering from ELC events. */ ( void ) R_ADC_ScanStart(&g_adc0_ctrl);

 回调函数 adc_callback ()(名字是自己定义的):学过51都知道中断吧,差不多的意思

volatile bool scan_complete_flag = false ; void adc_callback ( adc_callback_args_t * p_args)         FSP_PARAMETER_NOT_USED(p_args);         scan_complete_flag = true ;

 故需要在扫描时候在主程序中等待其扫描完毕

scan_complete_flag = false ; while (!scan_complete_flag)         /* Wait for callback to set flag. */

 R_ADC_Read()函数:读取单个通道的 ADC 值

err =R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data1); assert (FSP_SUCCESS == err); a1=( double )(adc_data1/ 4095.0 )* 3.3 ;

 示例代码:

double a0; uint16_t adc_data1=0; volatile bool scan_complete_flag = false; void adc_callback (adc_callback_args_t * p_args)         FSP_PARAMETER_NOT_USED(p_args);         scan_complete_flag = true; void hal_entry ( void )         /* TODO : add your own code here */         fsp_err_t err = FSP_SUCCESS ;         /* Initializes the module. */         err = R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);         /* Handle any errors. This function should be defined by the user. */         assert( FSP_SUCCESS == err);         /* Enable channels. */         err = R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);         assert( FSP_SUCCESS == err); while (1)         /* Enable scan triggering from ELC events. */         R_ADC_ScanStart(&g_adc0_ctrl);         scan_complete_flag = false;         while (!scan_complete_flag)                          /* Wait for callback to set flag. */                  err =R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data1);         assert( FSP_SUCCESS == err);         a0=(adc_data1/4095.0)*3.3;         R_BSP_SoftwareDelay (20, BSP_DELAY_UNITS_MILLISECONDS ); #if BSP_TZ_SECURE_BUILD /* Enter non-secure code */ R_BSP_NonSecureEnter(); #endif

 

现象:可读取通道 0( P000)电压值a0

以上是关于RA生态之ADC 采样的主要内容,如果未能解决你的问题,请参考以下文章

RA生态之基于 DTC 的多通道 ADC 采集

RA生态之基于 DTC 的多通道 ADC 采集

RA生态之基于 DTC 的多通道 ADC 采集

利用基准电压效正Vcc做参考电压的ADC采样计算方法

过采样的原理

STC单片机LCD1602四线驱动模式显示ADC采样电压