RVB2601开发板ADC读取实验 - 清风飘雪-阿里云开发者社区

开发者社区> 平头哥芯片开放社区> 正文
登录阅读全文

RVB2601开发板ADC读取实验 - 清风飘雪

简介: RVB2601开发板ADC读取实验,串口打印输出,输出电压值单位:mV

1. 前言

利用RVB2601板实现模拟量读取并串口打印,输出电压值单位:mV。

2. 硬件配置

ADC_VREFP与3.3V连接,ADC_VREFN与GND连接,将原开发板CH2601_PA4端子帽拔掉,断开与LED_BULE连接,模拟量(可调电阻分压值)与CH2601_PA4端子连接。

备注:旁边引脚开发板丝印PA6,实际PA25,同时“RVB2601应用开发实战系列二: 跑马灯”一文原理图引用也错误。

3. 剑池CDK下载ch2601_gui_demo例程

3.1、新建工程:

打开CDK,点击HOME图标,点击右上角新建工程。

3.2、搜索工程

搜索ch2601_gui_demo,然后点击创建工程,如下图所示:

3.3、输入工程名:

输入“ch2601_adc”,然后点击下载方案:

3.4、激活工程:

由于我下载了多个工程,需要在ch2601_adc上右击,选择“Set As Active”,激活。

4、修改工程

4.1、创建adc.c文件到工程:

4.2、添加代码:

在此感谢郭昊天,刚接触这个CDK,没注意到配置文件“board_config.h”改了AD端口,还是按照芯片管脚定义来,导致数据一致不对:

1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <unistd.h>
4. #include <time.h>
5. #include <aos/aos.h>
6. #include "app_config.h"
7. #include "app_init.h"
8. #include "csi_config.h"
9. #include "hw_config.h"
10. 
11. #include "board_config.h"
12. #include <drv/pin.h>
13. #include <drv/adc.h>
14. #include <drv/common.h>
15. 
16. static csi_adc_t  adc;
17. void adc_init()
18. {
19. 
20.     csi_error_t ret;
21.     csi_pin_set_mux(EXAMPLE_ADC_CH1, PA4_ADC_A2);
22. 
23.     ret = csi_adc_init(&adc, 0);
24. 
25.     if (ret != CSI_OK) 
26.     {
27.       printf("===%s, %d %d \n", __FUNCTION__, __LINE__,ret);
28. 
29.      }
30. 
31. 
32.     /* Configure frequency divsion, this value can be one of(4 8 16 32 64 128) */
33.     uint32_t  freq_value = csi_adc_freq_div(&adc, 128);
34. 
35.     printf("get freq_value: %d\n", freq_value);
36. 
37. 
38.     /* Configure sampling time */
39.     ret = csi_adc_sampling_time(&adc, 2);
40.     if (ret != CSI_OK) 
41.     {
42.       printf("===%s, %d %d \n", __FUNCTION__, __LINE__,ret);
43. 
44.     }
45. 
46.     /* Enable channel */
47.     ret = csi_adc_channel_enable(&adc, 1, true);
48.     if (ret != CSI_OK) 
49.     {
50.       printf("===%s, %d %d \n", __FUNCTION__, __LINE__,ret);
51. 
52.     }
53. 
54.     /* Trigger new conversion */
55.     ret = csi_adc_start(&adc);
56.     if (ret != CSI_OK) 
57.     {
58.       printf("===%s, %d %d \n", __FUNCTION__, __LINE__,ret);
59. 
60.     }
61. 
62.     /* Read result */
63.     int32_t data = csi_adc_read(&adc);
64. 
65.     printf("get adc result: %d\n", data);
66. 
67.     printf("the voltage is: %d mV\n", data*3300/4096);
68. 
69.     /* Uninit adc */
70.     csi_adc_uninit(&adc);
71. 
72. }
73.

4.3、修改初始化文件

app_init.h添加void adc_init();

4.4、更改main.c文件:

1. #include <stdio.h>
2. #include <stdlib.h>
3. #include <unistd.h>
4. #include <time.h>
5. #include <aos/aos.h>
6. #include "aos/cli.h"
7. 
8. #include "app_init.h"
9. #include "lvgl.h"
10. #include "lv_label.h"
11. #include "oled.h"
12. 
13. #include "board_config.h"
14. #include "drv/gpio_pin.h"
15. #include <drv/pin.h>
16. #include <drv/adc.h>
17. 
18. /*********************
19.  *      DEFINES
20.  *********************/
21. #define TAG "app"
22. 
23. /**********************
24.  *      TYPEDEFS
25.  **********************/
26. 
27. /**********************
28.  *  STATIC PROTOTYPES
29.  **********************/
30. // adc
31. static void adc_lvgl_task(void *arg);
32. 
33. 
34. /**********************
35.  *   GLOBAL FUNCTIONS
36.  **********************/
37. 
38. 
39. static void adc_lvgl_task(void *arg);
40. 
41. #include "csi_core.h"
42. /**
43.  * main
44.  */
45. int main(void)
46. {
47.     board_yoc_init();
48. 
49.     aos_task_new("adc", adc_lvgl_task, NULL, 10 * 1024);
50.     return 0;
51. }
52. 
53. static void gui_label_create(void)
54. {
55.     lv_obj_t *p = lv_label_create(lv_scr_act(), NULL);
56.     lv_label_set_long_mode(p, LV_LABEL_LONG_BREAK);
57.     lv_label_set_align(p, LV_LABEL_ALIGN_CENTER);
58.     lv_obj_set_pos(p, 0, 4);
59.     lv_obj_set_size(p, 128, 60);
60.     lv_label_set_text(p, "THEAD RISC-V\nADC \nDEMO");
61. }
62. 
63. static void adc_lvgl_task(void *arg)
64. {
65.     lv_init();
66.     /*Initialize for LittlevGL*/
67.     oled_init();
68.     adc_init();
69. 
70.     /*Select display 1*/
71.     // demo_create();
72.     gui_label_create();
73. 
74.     while (1) 
75.     {
76.         /* Periodically call the lv_task handler.
77.          * It could be done in a timer interrupt or an OS task too.*/
78.         lv_task_handler();
79. 
80.         aos_msleep(5);
81.         lv_tick_inc(1);
82.     }
83. }

4.5、编译,下载、运行:

5、小结:

初次使用,有不到之处还请各位大佬指正、海涵!

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
平头哥芯片开放社区
使用钉钉扫一扫加入圈子
+ 订阅

芯片开放社区(Open Chip Community 简称OCC),是平头哥芯片基础设施的云端载体,提供开发中心、创芯空间、技术部落等互动版块,汇聚海量应用资源,助力芯片合作伙伴构建软硬融合的芯片生态。面向芯片企业,OCC以应用驱动芯片精准定义、以全栈技术支撑芯片敏捷开发;面向开发者,OCC以芯片生态降低IoT开发门槛、以1520体系加速IoT产品落地。

官方博客
官网链接