使用瑞萨的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);
四:实物测试图片如下所示: