目录

点击这里查看所有博文

  本系列博客所述资料均来自合宙官方,并不是本人原创(只有博客是自己写的),csdk只是得到了口头的允许公开授权。出于热心,本人将自己的所学笔记整理并推出相对应的使用教程,方面其他人学习。为国内的物联网事业发展尽自己的一份绵薄之力,没有为自己谋取私利的想法。若出现侵权现象,请告知本人,本人会立即停止更新,并删除相应的文章和代码。

  本系列博客基于紫光展锐的RDA8910 LTE Cat 1 bis芯片平台开发。理论上适用于合宙的Air720U、Air724U、广和通L610以及安信可的cat-01模块。

  各个厂家的部分配置文件可能不一样,也许会导致设备出现奇怪的问题,其他的模块我也不确定能不能用,自行测试。但是有一点编译下载和监视流程基本一样,可供参考。

  先不管支不支持,如果你用的模块是是紫光展锐的RDA8910,那都不妨一试,也许会有意外收获(也有可能变砖,慎重!!!)。

  我使用的是Air724UG开发板,如果在其他模块上不能用,那也不要强怼,也许是开发包不兼容吧。这里的代码是没有问题的。例程仅供参考!

一、前言

  在很长的一个时间内。我的rda8910二次开发系列的的文章中第四小节是处于暂时没有的情况。有的人可能会很纳闷,没有就没有,你别写呗。没事把位置占着干嘛。搞得大家都很好奇,这里到底会是个什么东西呢,竟然搞了几个月都没有搞出来。

  本来这一篇文章应该要在5月份发布的,当时准备写一篇adc的教程。查了下硬件手册。看到模组只有adc2和adc3,分别引出到了63和64引脚。知道adc的编号后就可以开始写测试程序了。

  写完测试程序后编译一看发现ADC例程编译不过,提示找不到函数。这我暂时也就没办法了,就一直没写放在那里没有发。后来大概在7月初的时候我又试了一下adc可以编译通过了。当我准备再次尝试一波的时候,我找了半天都没有找到adc2和adc3的插针,后来拿到原理图一看,发现这两个引脚,只是在外围焊了几个电阻。没有引出到插针上。

  我们如果想在开发板上测试一波adc,那就只能自己飞线了。我一看,乖乖这线不好焊啊,焊不好的话开发板就报废了。当时就怂了,果断收起开发板,于是这事又被搁置了一个月。

  看到前一段时间合宙新出的开发板自带mic和sd卡,正好想买个新的开发板玩玩。想着坏就坏了吧,旧的不去新的不来,今天下定决心。拿起我的电烙铁,上来就干。(别学下图妹子拿烙铁,否则ʘᴗʘ)

  下午废了九牛二虎之力,终于把这两个线焊上去了。焊的过程中,差点把焊盘都给怼掉。这玩意实在不好焊。靠的太紧了,容易连锡。最重要的是这锡哪里都沾(旁边的焊盘沾一堆),就是不沾线,怎么搞都焊不上,当时给我气的(我承认是我菜)。这玩意确实有点不好焊,没弄过的热建议不要轻易去尝试!!!

  硬件准备好后,我们可以一起来看看测试程序怎么写。

二、相关的库函数

  官方提供的adc库函数有两个。分别是初始化adc通道和读取adc通道的数据。只要传入需要操作的adc通道就可以得到相应的运行结果。

/**ADC初始化
*@param channel: adc通道
*@param mode: adc模式
*@return TRUE: 成功
    FALSE: 失败
**/

  • BOOL iot_adc_init(channel,mode);

/**读取ADC数据
*@note ADC值,可以为空, 电压值,可以为空
*@param channel: adc通道
*@param adcValue: ADC值,可以为空
*@param voltage: 电压值,可以为空
*@return TRUE: 成功
    FALSE: 失败
**/

  • BOOL iot_adc_read(channel,adcValue,voltage);

三、编写程序

3.1、编写adc2测试程序

  测试程序的逻辑很简单。我们在主函数创建了一个测试任务,任务开始时首先初始化adc的通道。

  如果初始化返回false(也就是说初始化失败)。那我们就没必要继续执行下去了。这时候可以直接删除任务。但是!这里是测试,如果直接删除了,我们自己可能什么都看不到,所以我选择循环打印初始化失败的消息。

  如果初始化成功就进入另一个死循环,每隔1s读取一下adc2的数值。读取成功就打印读取到的adc数据,读取失败就打印失败信息。

static void ADC2(void *param)
{BOOL err = iot_adc_init(OPENAT_ADC_2, OPENAT_ADC_MODE_MAX);while (!err){iot_debug_print("ADC2 Init FALSE");osiThreadSleep(1000);}UINT32 adcValue = 0, voltage = 0;while (1){err = iot_adc_read(OPENAT_ADC_2, &adcValue, &voltage);while (!err){iot_debug_print("ADC2 read FALSE");osiThreadSleep(1000);}iot_debug_print("ADC2 read adcValue:%d,voltage:%d", adcValue, voltage);//线程休眠500msosiThreadSleep(1000);}
}

3.2、编写adc3测试程序

  模组上一共有两个adc的引脚,那么干脆我们就把两个引脚一起都测试了。反正测试程序的逻辑是一样的,也就改个编号的事情。没有什么太大的区别。

static void ADC3(void *param)
{BOOL err = iot_adc_init(OPENAT_ADC_3, OPENAT_ADC_MODE_MAX);while (!err){iot_debug_print("ADC3 Init FALSE");osiThreadSleep(1000);}UINT32 adcValue = 0, voltage = 0;while (1){err = iot_adc_read(OPENAT_ADC_3, &adcValue, &voltage);while (!err){iot_debug_print("ADC3 read FALSE");osiThreadSleep(1000);}iot_debug_print("ADC3 read adcValue:%d,voltage:%d", adcValue, voltage);//线程休眠500msosiThreadSleep(1000);}osiThreadExit();
}

3.2、完整程序

  完整的demo在这里,可以复制直接用。

/** @Author: your name* @Date: 2020-05-19 14:05:32* @LastEditTime: 2020-05-20 15:38:37* @LastEditors: Please set LastEditors* @Description: In User Settings Edit* @FilePath: \RDA8910_CSDK\USER\user_main.c*/#include "string.h"
#include "cs_types.h"#include "osi_log.h"
#include "osi_api.h"#include "iot_debug.h"
#include "iot_uart.h"
#include "iot_os.h"
#include "iot_gpio.h"
#include "iot_pmd.h"
#include "iot_adc.h"static void ADC2(void *param)
{BOOL err = iot_adc_init(OPENAT_ADC_2, OPENAT_ADC_MODE_MAX);while (!err){iot_debug_print("ADC2 Init FALSE");osiThreadSleep(1000);}UINT32 adcValue = 0, voltage = 0;while (1){err = iot_adc_read(OPENAT_ADC_2, &adcValue, &voltage);while (!err){iot_debug_print("ADC2 read FALSE");osiThreadSleep(1000);}iot_debug_print("ADC2 read adcValue:%d,voltage:%d", adcValue, voltage);//线程休眠500msosiThreadSleep(1000);}
}static void ADC3(void *param)
{BOOL err = iot_adc_init(OPENAT_ADC_3, OPENAT_ADC_MODE_MAX);while (!err){iot_debug_print("ADC3 Init FALSE");osiThreadSleep(1000);}UINT32 adcValue = 0, voltage = 0;while (1){err = iot_adc_read(OPENAT_ADC_3, &adcValue, &voltage);while (!err){iot_debug_print("ADC3 read FALSE");osiThreadSleep(1000);}iot_debug_print("ADC3 read adcValue:%d,voltage:%d", adcValue, voltage);//线程休眠500msosiThreadSleep(1000);}osiThreadExit();
}//main函数
int appimg_enter(void *param)
{osiThreadCreate("ADC2", ADC2, NULL, OSI_PRIORITY_NORMAL, 2048, 0);osiThreadCreate("ADC3", ADC3, NULL, OSI_PRIORITY_NORMAL, 2048, 0);return 0;
}//退出提示
void appimg_exit(void)
{OSI_LOGI(0, "application image exit");
}

四、下载测试

  分别把adc2和adc3的飞线,接到0v、1.8v和VBAT(3.8v)。查看打印结果。数据走向是正确的,逐渐递增。

  这一看好像就1.8v误差大了点。但是我的直觉告诉我,不应该误差这么大,都干到了2.2V了。于是拿来了万用表测试了一下,好像输出的就是2.2V。那说明模块测试的结果还是挺准的。

  就是这里测试adc2的时候要注意下,之前我测试的时候没有仔细看原理图。发现adc2无论接什么电压,它量出来的都是3.8V。接0v的话就直接断电了。后来看了下原理图,发现adc2的引脚通过了一个0欧的电阻直接拉到了VBAT(3.8V)。这样的话adc2那就不能被比3.8V低的电平有效的拉低。

  我不太清楚这个电阻有什么其他的作用。为了测试,我就直接把它卸掉了。让adc2浮空,这样测试就正常了,电阻就在这。我这里还是建议大家最好不要卸掉这个电阻,别到时候板子出问题了,跑过来找我。我没钱赔ʘᴗʘ。

不会下载的点击这里,进去查看我的RDA8910 CSDK二次开发入门教程专题第一篇博文1、RDA8910CSDK二次开发:环境搭建里面讲了怎么下载
这里只是我的学习笔记,拿出来给大家分享,欢迎大家批评指正,本篇教程到此结束

4、RDA8910(4GCAT1)CSDK二次开发:期待已久的ADC采集相关推荐

  1. 15、RDA8910(4GCAT1)CSDK二次开发:通过OneWire驱动库获取DS18B20/DHT11的数据

    目录 点击这里查看所有博文   本系列博客所述资料均来自合宙官方,并不是本人原创(只有博客是自己写的),csdk只是得到了口头的允许公开授权.出于热心,本人将自己的所学笔记整理并推出相对应的使用教程, ...

  2. 1、RDA8910(4GCAT1)CSDK二次开发:环境搭建

    https://blog.csdn.net/weixin_44570083/article/details/106210592 目录 点击这里查看所有博文   本系列博客所述资料均来自合宙官方,并不是 ...

  3. “期待已久的UFO报告”公布了

    来源:环球网  作者:张晓雅 多家美媒表示,调查没有得出确切结论. 包括美国有线电视新闻网(CNN).美联社.美国哥伦比亚广播公司(CBS)在内多家美媒最新消息,美国政府当地时间25日发布报告,披露对 ...

  4. 期待已久的2012年度最佳 jQuery 插件揭晓

    期待已久的2012年度最佳 jQuery 插件揭晓 让人期待已久的2012年度最佳 jQuery 插件终于发布了.jQuery 自2006年发布以来,经过6年的迅速发展,目前已是最流行和使用最广泛的 ...

  5. 期待已久的Java 9 今日发布

    人们期待已久的Java SE 9.0将在2017年9月21日发布,它会带来一些重要的变化. \\ JDK 9的核心变化就是引入了一种新的Java编程组件,也就是模块,按照Oracle的说法,它是一个可 ...

  6. 果粉期待已久,iPhone 6s 或年底发布

     果粉期待已久,iPhone 6s 或年底发布.5 月 30 日,科技网站 GottaBeMobile 报道称,业界早已传言,iPhone 6s 将于今年底取代 iPhone 6.6 月份即将来临 ...

  7. 期待已久!iPhone 13将使用带LTPO技术的OLED屏幕

    据国外媒体报道,业内人士称,苹果的供应链合作伙伴正在使用LTPO背板技术为2021年款iPhone(iPhone 13)开发OLED显示屏. 苹果计划在2021年采用带有LTPO技术的OLED显示屏, ...

  8. 期待已久的VS2008 SP1 和.NET FRAMEWORK 3.5 SP1都出来了

    期待已久的VS2008 SP1 和.NET FRAMEWORK 3.5 SP1都出来了 下载地址 Microsoft Visual Studio 2008 Service Pack 1 (iso) h ...

  9. 期待已久的《刀剑神域》第三季终于来了

    本博主期待已久的<刀剑神域>第三季终于在B站播放了第一集,那就是10月7日凌晨1点.不过值得庆幸的是10月7日为礼拜天,我们没有课也没有工作,倒是可以熬熬夜.后面<刀剑神域>第 ...

最新文章

  1. 苹果手机无线充电板外部电磁场测试
  2. 吴恩达深度学习课程deeplearning.ai课程作业:Class 1 Week 2 assignment2_1
  3. 基于异或,取反和循环移位实现一个简单的加密解密函数
  4. html层次选择器例题,JQuery 层次选择器的例子
  5. python语言设计学习方向_学好Python开发就业方向有哪些?
  6. 广州专科计算机学校录取分数线,广州大专多少分能录取?高考分数170分能上广州大专?...
  7. python中的对象有哪些_python中的对象
  8. 微信小程序开发工具基本介绍入门级(备忘)
  9. iptables: No config file解决方法
  10. 微分几何笔记(2) —— 曲线的参数化
  11. Windows下模拟弱网(web、app)均可使用
  12. Windows网络重置后wifi功能丢失解决方案
  13. c语言编写数码管的现实函数,C语言实现一位共阳极数码管
  14. 行为设计学-让创意更有黏性
  15. SSL证书会不会过期?域名SSL证书过期了怎么办?
  16. 脸部匹配测试软件,手把手教你在浏览器中使用脸部识别软件包
  17. 忍者必须死代码 免费
  18. 中国类脑计算先行者:在AI“无人区”探路
  19. HDU 5148 Cities 树形DP(背包)
  20. RK3399 Android7.1 充电芯片bq25723发生ACOV后引起系统黑屏死机

热门文章

  1. 一文搞定Vmware下共享文件夹
  2. SEO人员,该如何打造具有搜索属性的内容?
  3. sci期刊发表文章注意事项
  4. view_video.php,Android_Android使用VideoView播放本地视频和网络视频的方法,1、效果展示2、布局文件- phpStudy...
  5. 大数据时代比较教育研究范式的转型
  6. 漫谈QNX(架构/进程,线程,同步,进程间通信IPC)
  7. 教程get | K8S部署OpenStack容器云(下)
  8. Google地图之野望:你所不知道的背后故事
  9. 数字IC手撕代码--交通灯
  10. java继承a mya new c,java – 为什么外部类不能扩展内部类?