
拿到瑞萨的RA4L1-SENSOR开发板很久了,今天来使用ADC测量下电压,并通过LCD屏显示电压值。
使用RA4L1上的A0通道的ADC。如下图所示:

1。打开瑞萨的smart配置软件。
取名RA4L1_template

2。选择芯片型号

3。继续

4。继续

5。继续

6。生成代码

配置ADC001


7。打开KEIL,编译工程
添加核心代码
#include "hal_data.h"
#include "usart9.h"
#include "esp8266.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTER
void GLCD_Init(void);
void disp_0(void);
void disp_1(void);
void disp_2(void);
void disp_3(void);
void disp_4(void);
void disp_5(void);
void disp_6(void);
void disp_7(void);
void disp_8(void);
void disp_9(void);
void disp_num(uint8_t channel, uint8_t num);
void disp_num1(uint8_t channel, uint8_t num);
void disp_COL1(void);
void disp_DOT1(void);
void disp_Battery(uint8_t num);
void GLCD_OFF(void);
void GLCD_ON(void);
void ADC_25(void);
volatile bool scan_complete_flag = false;
void adc_callback (adc_callback_args_t * p_args)
{
//宏将告知编译器回调函数不使用参数 p_args,从而避免编译器发出警告,
FSP_PARAMETER_NOT_USED(p_args);
scan_complete_flag = true;
}
double a0,a5;
uint16_t adc_data1=0;
uint16_t adc_data2=0;
/*******************************************************************************************************************//**
-
main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used. This function
-
is called by main() when no RTOS is used.
**********************************************************************************************************************/
void hal_entry(void)
{
fsp_err_t err = FSP_SUCCESS;
/* TODO: add your own code here */
UART9_Init();UART1_Init();
ADC_25();
GLCD_Init();
GLCD_OFF();
disp_Battery(4);
/*
uint8_t rtc_second = 34; //秒
uint8_t rtc_minute = 43; //分
uint8_t rtc_hour = 10; //时
uint8_t rtc_day = 0; //日
uint8_t rtc_month = 0; //月
uint16_t rtc_year = 0; //年
uint8_t rtc_week = 0; //周
uint16_t year = 0;
disp_Battery(4);
disp_num(3, rtc_minute/10);disp_num(4, rtc_minute%10);
disp_num(5, rtc_second/10);disp_num(6, rtc_second%10);
*/
uint8_t voltage_1 = 0;
uint8_t voltage_2 = 0;
printf("测量ADC 001通道电压值\\r\\n");
while(1)
{
(void) R_ADC_ScanStart(&g_adc0_ctrl);
scan_complete_flag = false;
while (!scan_complete_flag)
{
}
err = R_ADC_Read(&g_adc0_ctrl, ADC_CHANNEL_1, &adc_data1);
assert(FSP_SUCCESS == err);
a0=(double)(adc_data1/4095.0)*3.3;
adc_data2=(double)a0*100;
voltage_1 = adc_data2/100;
voltage_2 = adc_data2%100;
disp_num(4, voltage_1%10);
disp_num(5, voltage_2/10);disp_num(6, voltage_2%10);
printf("P003(AN001)=%d,voltage=%f\\n",adc_data1,a0);
R_BSP_SoftwareDelay (1000, BSP_DELAY_UNITS_MILLISECONDS);
}
#if BSP_TZ_SECURE_BUILD
/* Enter non-secure code */
R_BSP_NonSecureEnter();
#endif
}


主函数初始化操作

采集ADC通道1电压并显示,通过串口显示,通过LCD显示,双重方案

烧录到板子,打开串口助手,接上RA4L1的ADC通道到RA4E2的3.3V引脚

可以看到串口采集电压为3.3V
与此同时,查看LCD屏上,也是3.3V

将ADC001接入GND地线,查看到电压为0V

LCD屏上也是0V

详情看视频演示