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、小结:

初次使用,有不到之处还请各位大佬指正、海涵!
相关文章
|
机器学习/深度学习 人工智能 自然语言处理
提升软件测试效率与质量:AI驱动的自动化测试策略
【2月更文挑战第19天】 在快速迭代的软件发展环境中,传统的手动测试方法已无法满足高效率和高质量的要求。本文探讨了人工智能(AI)技术如何革新现有的软件测试流程,通过引入AI驱动的自动化测试策略,旨在提高测试覆盖率,减少人为错误,优化资源分配,并缩短产品上市时间。我们将分析AI在识别潜在缺陷、生成测试用例、执行测试以及结果分析中的应用,并讨论实施这些策略时可能遇到的挑战和限制。
1099 3
|
7月前
|
存储 编解码 搜索推荐
课时10:阿里云视频服务
阿里云视频服务Apsara Video为企业提供一站式视频解决方案,涵盖开发、上传、转码、存储、分发和播放全流程。平台支持点播、直播等业务,零编码搭建快速高效,具备窄带高清、画质重生等先进技术,确保高质量视频传输。同时,丰富的安全防护工具保障内容安全,按需付费模式降低成本,助力企业轻松构建个性化视频应用。
156 0
|
7月前
|
SQL NoSQL Oracle
关系型与非关系型数据库的区别
关系型数据库是依据关系模型来创建的数据库,所谓关系模型就是“一对一”、“一对多”、“对多对”等。常见的关系型数据库有Oracle、MySQL、SQL Server等。非关系型数据库主要基于“非关系型模型”,其中非关系型模型有:列模型、键值对模型、文档类模型。比如redis属于键值对模型。 MongoDB属于文档模型 关系型数据库的优点: ● 易于维护:都是使用表结构,格式一致。 ● 使用方便:SQL语言通用,可用于复杂查询。 ● 复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询。 关系型数据库的缺点: ● 读写性能比较差,尤其是海量数据的高效率读写。 ● 固定的表结构,灵活
|
8月前
|
人工智能 程序员 测试技术
亲测可用,IDEA 中使用满血版 DeepSeek R1!支持深度思考!免费!免配置!
之前介绍过在IDEA中使用DeepSeek的方案,但是很多人表示还是用的不够爽,比如用CodeChat的方案,只支持V3版本,不支持带推理的R1。想要配置R1的话有特别的麻烦。那么,今天,给大家带来一个亲测有效,可使用DeepSeek R1,同时支持问答+AI程序员,无需配置,快速使用的方案。那就是借助阿里的通义灵码,通义灵码最近刚刚做了重大更新,新上线了模型选择功能。在支持Qwen的模型之外,还同时支持了DeepSeek-V3 和 DeepSeek-R1 ,而且是满血版671B模型。
|
8月前
|
存储 XML 图形学
Unity保存数据
在Unity中保存场景数据涉及数据收集、序列化和存储。数据收集包括游戏对象的基本信息(如位置、旋转、缩放、名称和标签)及组件数据(如渲染、物理和自定义脚本组件)。接着,通过序列化将数据转换为可存储格式。示例代码展示了如何使用XML保存场景中的游戏对象及其属性。
|
域名解析 缓存 安全
2024最新Cloudways主机注册和使用教程
Cloudways 是一家提供基于云的托管服务的公司,专注于简化网站管理和运行,尤其适合WordPress。Cloudways界面直观,无需复杂设置即可快速搭建WordPress站点,包括高级缓存、Breeze插件和Cloudflare CDN集成。服务包括7*24小时客服支持,3天免费试用,按小时计费,无隐藏费用,支持多种云平台选择,以及一键安装多种应用程序和SSL证书。在注册和使用过程中,用户需要准备Visa/Mastercard信用卡,并可能需要通过外贸上网工具访问。Cloudways 提供自动备份和灵活的服务器配置,适合不同技术水平的用户。
410 0
2024最新Cloudways主机注册和使用教程
|
图形学
【制作100个unity游戏之26】unity2d横版卷轴动作类游戏7(附带项目源码)
【制作100个unity游戏之26】unity2d横版卷轴动作类游戏7(附带项目源码)
303 1
|
消息中间件 Cloud Native 网络安全
云原生最佳实践系列 3:基于 SpringCloud 应用玩转 MSE
该文档介绍了基于云原生应用的产品构建的微服务架构实践。
1026 98
|
Kubernetes 负载均衡 网络协议
在K8S中,Service的类型有哪些?
在K8S中,Service的类型有哪些?
|
监控 Java 中间件
FGC频繁导致CPU 飙升定位及JVM配置优化总结
FGC频繁导致CPU 飙升定位及JVM配置优化总结
403 0