瑞萨RA0单片机连载⸺ADC

内容摘要本文引用地址:1   目的本篇主要实现面向对象的对驱ADC,使用电位容调节电压,采集实时电压并在OLED屏上实时展示。2   实验器材1.瑞萨生态社区RA0E1开发板:2.OLED 显示屏3.电位器3   软件环境1.MDK5.392.FS

联系电话:400-962-3929

本文引用地址:

1   目的

本篇主要实现面向对象的对驱ADC,使用电位容调节电压,采集实时电压并在OLED屏上实时展示。

2   实验器材

1.瑞萨生态社区RA0E1开发板:

2.OLED 显示屏

3.电位器

3   软件环境

1.MDK5.39

2.FSP 5.3.0

3.RASC

4   实现步骤

1.打开RASC,选择FSP 5.3.0(最少选择5.2.0版本以上)。

2.配置P014为ADC Analog mode 为通道6即ADC0_AN006:

3.新建stack,添加g_adc0_ADC,并按下图置为通道6,软件触发转换,开启转换结果中断触发,参考电压为MCU的VSS与VCC,即3.3V

4.向工程中添加drv_adc函数。

view plaincopy to clipboardprint?

1.#include “drv_adc.h”

2.#include “hal_data.h”

3.#include

4.

5.#defi ne LOG(FUNC, LINE) printf(“Function:%stLine:%drn”, FUNC, LINE)

6.

7.static void ADCWaitConvCplt(void);

8.static int ADCDrvInit(struct ADCDev *ptDev);

9.static int ADCDrvRead(struct ADCDev *ptDev);

10.

11. static struct ADCDev gAdcDev = {

12. .name = “ADC0”,

13. .channel = 6,

14. .Init = ADCDrvInit,

15. .Read = ADCDrvRead,

16. .value = 0

17. };

18.

19.volatile bool adc_sample_cplt = false;

20.

21.struct ADCDev *ADCGetDevice(void)

22.{

23.return gAdcDev;

24.}

25.

26.static int ADCDrvInit(struct ADCDev *ptDev)

27.{

28.if(NULL == ptDev) return -1;

29.

30.

31.fsp_err_t err = R_ADC_D_Open( g_adc0_ctrl, g_adc0_cfg);

32.assert(FSP_SUCCESS == err);

33.err = R_ADC_D_ScanCfg( g_adc0_ctrl, g_adc0_channel_cfg);

34.assert(FSP_SUCCESS == err);

35.

36.return 0;

37.}

38.

39.static int ADCDrvRead(struct ADCDev *ptDev)

40.{

41.

42.if(NULL == ptDev ) return -1;

43.

44.adc_sample_cplt = false;

45. R_ADC_D_ScanStart( g_adc0_ctrl);

46. ADCWaitConvCplt();

47. fsp_err_t err = R_ADC_D_Read( g_

adc0_ctrl, ptDev- channel, ptDev- value);

48. assert(FSP_SUCCESS == err);

49.

50.

51. return 0;

52. }

53.

54. static void ADCWaitConvCplt(void)

55. {

56. while(!adc_sample_cplt);

57. adc_sample_cplt = false;

58. }

59.

60. void adc_callback (adc_callback_args_t * p_

args)

61. {

62. FSP_PARAMETER_NOT_USED(p_args);

63. adc_sample_cplt = true;

64. }

此函数中主要是把adc0_CHANNEL_6配置成ptDev,对外开放的接口。我们只需要初始化ADCDev后,就可以通过他的init、read、value来做接口访问就行了。

4.在主函数中我们初始化ADC并读取ADC值,显示于OLED屏上:

view plaincopy to clipboardprint?

1.ADCDevTypeDef *ptAdcDev = ADCGetDevice(); // 生成ADC对象

2.if(NULL == ptAdcDev)

3.{

4.printf(“Error. Not found ADC device!rn”);

5.return;

6.}

7.ptAdcDev- Init(ptAdcDev); // 初始化

8.//在while循环中读取,并显示

9.if(!ptAdcDev- Read(ptAdcDev))

10.{

11.a0=(ptAdcDev- value/4095.0)*3.3;

12.sprintf(sprintfbuff ,”ADC:%d, %d.%d”,ptAdcDev- value, (int)a0, (int)(a0*1000)%1000);

13.ptDispDev- GUI_ShowString(ptDispDev,0,48, sprintfbuff ,16,1);

}

5   实现效果

将P014接于可变电位器的输出IO,可以实时测量到电压:

 
举报 收藏 打赏 评论 0
今日推荐
浙ICP备19001410号-1

免责声明

本网站(以下简称“本站”)提供的内容来源于互联网收集或转载,仅供用户参考,不代表本站立场。本站不对内容的准确性、真实性或合法性承担责任。我们致力于保护知识产权,尊重所有合法权益,但由于互联网内容的开放性,本站无法核实所有资料,请用户自行判断其可靠性。

如您认为本站内容侵犯您的合法权益,请通过电子邮件与我们联系:675867094@qq.com。请提供相关证明材料,以便核实处理。收到投诉后,我们将尽快审查并在必要时采取适当措施(包括但不限于删除侵权内容)。本站内容均为互联网整理汇编,观点仅供参考,本站不承担任何责任。请谨慎决策,如发现涉嫌侵权或违法内容,请及时联系我们,核实后本站将立即处理。感谢您的理解与配合。

合作联系方式

如有合作或其他相关事宜,欢迎通过以下方式与我们联系: