0 前言
本次实验要实现使用瑞萨 R7FA4E2B93CFM 进行ADC转换实验,要对之前PWM输出实验中的PWM输出进行电压采集,并在LCD屏幕上输出实时电压值。
1 硬件部分
在e2s中查看支持ADC的引脚,发现P0这个端口的引脚基本上都支持ADC采集。
本次使用P000作为ADC采集输入引脚,将P000与P206(PWM输出的引脚)从外部接到一块。
2 软件部分
2.1 新建工程
将先前创建的06_PWM_Dimming文件夹复制一份,并将文件夹重命名为07_ADC
。生成PWM的工程文件可前去论坛06、PWM输出实验+给LCD屏幕PWM调光中的末尾附件处下载。
2.2 配置工程
2.2.1 配置ADC
在下图所示的地方,Peripherals -- Analog:ADC --ADC0 ,将AN000所指的pin改为P000
2.2.2 新建并设置模块属性
点击Stacks,New Stack--Analog--ADC(r_adc)。
点击刚生成的模块-属性,我们只需要改动下图所示的地方。
2.2.3 生成代码
保存配置文件,并点击Generate Project Content让其自动为我们生成代码。
2.3 编写代码
注意,这里是在之前实验06_PWM的基础上修改的。
修改hal_entry.c文件,在hal_entry函数之前
,添加如下内容:
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;
}
double Read_ADC_Voltage_Value(void);
double Read_ADC_Voltage_Value(void)
{
uint16_t adc_data;
double a0;
(void)R_ADC_ScanStart(&g_adc0_ctrl);
while (!scan_complete_flag)
{
;
}
scan_complete_flag = false;
R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_0, &adc_data);
a0 = (double)(adc_data*3.3/4095);
return a0;
}
将hal_entry函数内
让用户编写的部分改为如下内容
uint8_t brightness = 100;
fsp_err_t err = R_SPI_Open(&g_spi1_ctrl, &g_spi1_cfg);
assert(FSP_SUCCESS == err);
R_IOPORT_PinWrite(&g_ioport_ctrl, RST, BSP_IO_LEVEL_LOW);
R_BSP_SoftwareDelay(1, BSP_DELAY_UNITS_MILLISECONDS);
R_IOPORT_PinWrite(&g_ioport_ctrl, RST, BSP_IO_LEVEL_HIGH);
R_BSP_SoftwareDelay(150, BSP_DELAY_UNITS_MILLISECONDS);
LCD_Init();
LED_ON();
R_GPT_Open(&g_timer5_ctrl, &g_timer5_cfg);
R_GPT_Start(&g_timer5_ctrl);
GPT_PWM_SetDuty(brightness);
R_ADC_Open(&g_adc0_ctrl, &g_adc0_cfg);
R_ADC_ScanCfg(&g_adc0_ctrl, &g_adc0_channel_cfg);
LCD_Fill(0,0,LCD_W,LCD_H,BLACK);
LCD_ShowString(4,10,(uint8_t *)"brightness",GREEN,BLACK,24,0);
LCD_ShowString(22,60,(uint8_t *)"voltage",RED,BLACK,24,0);
while(1){
GPT_PWM_SetDuty(brightness);
LCD_ShowIntNum(48,35,brightness,2,GREEN,BLACK,32);
float sum=0;
for(uint16_t i=0;i<500;i++){
sum+=(float)Read_ADC_Voltage_Value();
}
LCD_ShowFloatNum1(30,85,(float)(sum/500.0),3,RED,BLACK,32);
brightness--;
if(brightness <1)
brightness = 100;
R_BSP_SoftwareDelay(50, BSP_DELAY_UNITS_MILLISECONDS);
}
3 下载测试
编译、下载,将P206和P000在外部相接。
观察屏幕,可以看到屏幕亮度等待变化,同时也能看到实时电压值,如结尾视频所示。
4 附件
*附件:07_ADC.zip