使用瑞萨的e2s 5.9.0版本读取ADC的电压数据,并通过串口发送到电脑端查看数据。
一:RA0E2的ADC知识分享:
A/D 转换器用于将模拟输入信号转换为数字值,并配置为控制多达 15 个 A/D 转换器模拟输入通道(AN000 至 ANO12、AN021 和 AN022)。通过 A/D 转换器模式寄存器 2(ADM2)中的 ADTYP[1:0] 位可选择 12 位、10 位或 8 位分辨率。A/D 转换器具有以下功能。表 25.1 列出了 ADC12 的规格,图 下展示了 ADC12 的框图。

二:FSP库中的配置如下所示:
2.1 配置ADC的输入引脚

2.2 添加ADC的任务,如下所示:

ADC的配置过程:
2.2.1选中stacks一栏,选中输入一栏中,ADC选项;
2.2.2 如上图所示,配置ADC的借本参数,这里要注意下,时钟频率的使用,ADC的扫描频率需要做分频处理。
2.2.3 中断一栏,需要定义一个g_adc0_callback的回调函数,同时配置ADC的优先级别和触发模式;
2.2.4 在输入一栏,配置ADC的通道扫描模式,和具体的通道号(AN002)
2.2.5 配置完成后,检查有无错误,没有错误的话,直接点击生成代码;
三:软件代码编写:
编写的步骤如下所示:
a.初始化ADC模块:在代码中,首先需要初始化ADC模块。可以使用瑞萨提供的FSP(Flexible Software Package)库来简化这一过程。初始化时需要配置ADC的通道、分辨率等参数。
b.配置ADC通道:根据需要采集的信号,选择合适的ADC通道。RA0E2开发板支持多个ADC通道,可以根据具体的应用需求进行配置。
c.启动ADC扫描:启动ADC扫描以开始采集数据。可以设置为单次采样或连续采样模式,具体取决于应用需求。
d.读取ADC值:在ADC采集完成后,可以通过相应的API读取ADC转换后的值。通常会将读取的值转换为电压值,以便进行后续处理或显示。
e.显示或处理数据:采集到的电压值可以通过OLED显示屏显示,或者通过串口打印输出,便于调试和观察。
3.1 添加ADC的回调处理函数:
volatile bool scan_complete_flag = false;
void g_adc0_callback(adc_callback_args_t * p_args)
{
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag = true;
}3.2 添加ADC的初始化函数:
void ADC_Init(void)
{
err = R_ADC_D_Open(&g_adc0_ctrl, &g_adc0_cfg);
assert(FSP_SUCCESS == err);
err = R_ADC_D_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
assert(FSP_SUCCESS == err);
}3.3 在500ms的任务中,添加读取ADC数值的处理函数:
读取部分如下所示:
double Read_ADC_Voltage_Value(void)
{
uint16_t adc_data;
double a0;
(void)R_ADC_D_ScanStart(&g_adc0_ctrl);
/* scan_complete_flag = false; //重新清除标志位*/
while (!scan_complete_flag) //等待转换完成标志
{
;
}
scan_complete_flag = false;
/* 读取通道0数据 */
err = R_ADC_D_Read(&g_adc0_ctrl, ADC_CHANNEL_2, &adc_data);
assert(FSP_SUCCESS == err);
/* ADC原始数据转换为电压值(ADC参考电压为3.3V) */
a0 = (double)(adc_data*3.3/4095);
/* printf("adc_data: %u", adc_data);*/
return adc_data;
}输出部分如下所示:
case 5:
ADC0_data = Read_ADC_Voltage_Value();
printf("ADC0_data= %5d\r\n" ,ADC0_data);四:实物测试图片如下所示:

我要赚赏金
