Neptune开发板 ADC使用获取电压 原创 精华
远道可思
发布于 2021-9-25 21:41
浏览
6收藏
前言:
有朋友问Neptune开发板ADC如何使用,所以我去查看一下openHarmong-IoT API发现openHarmong-1.1版本中IoT取消了ADC 的API,所以只能使用W800 SDK中ADC API去操作ADC使用获取电压。
本文参考:W800 ADC采集电压值
1、环境准备
1.1 开发环境、编译环境搭建,参考官方文档,参考链接如下:
Neptune开发板的环境搭建及使用
2、材料准备
2.1、Neptune HarmonyOS物联网 IOT模组
3、相关知识介绍:引用自参考文章
W800芯片14 脚(PA1)及15 脚(PA4)脚可以作为普通ADC 使用,输入电压范围0~2.4V。
高于2.4V 外部需做分压处理后才可进入ADC 接口。为提高精度,R1 和R2 需使用高精度电阻。
根据Sensor 输出值选择合适的R1,R2 电阻值分压。(这里是理论上ADC 获取值,我使用2个1k电阻分压)
4、编写代码:
adc_sample.c
#include <stdio.h>
#include <unistd.h>
#include "ohos_init.h"
#include "cmsis_os2.h"
#include "wm_adc.h"
#include "wm_gpio_afsel.h"
static void ADC_Demo_Entry(void)
{
int voltage=0;
wm_adc_config(0);//ADC->PA1
while (1)
{
voltage=adc_get_inputVolt(0);//获取ADC值
osDelay(500);
if(voltage<0)
{
voltage=0-voltage;
printf("%d(mV)--%d.%03d(V)\r\n\n",voltage,voltage/1000,voltage%1000);
}
else
{
printf("%d(mV)--%d.%03d(V)\r\n\n",voltage,voltage/1000,voltage%1000);
}
}
}
static void ADC_Demo(void)
{
osThreadAttr_t attr;
attr.name = "ADC_Demo_Entry";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 4096;
attr.priority = 24;
if (osThreadNew(ADC_Demo_Entry, NULL, &attr) == NULL) {
printf("[ADCDemo] Falied to create ADC_Demo_Entry!\n");
}
}
APP_FEATURE_INIT(ADC_Demo);
static_library("adc_sample") {
sources = [
"adc_sample.c",
]
include_dirs = [
"//utils/native/lite/include",
"//kernel/liteos_m/kal/cmsis",
"//device/winnermicro/neptune/sdk_liteos/platform/inc",
]
}
6、编译,烧录,测试
5、总结
通过对ADC操作发现W800的接口的复用功能对开发者有些不友好,PA1与PA4既是唯一I2C接口(PB19/PB20要用作串口0输出)同时又是两个唯一ADC接口,这样会使ADC的功能非常的鸡肋,因为我们不可能放弃I2C功能不用。
©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
已于2021-9-25 21:41:48修改
赞
7
收藏 6
回复
相关推荐
啊这啊这
static void ADC_Demo(void)
{
osThreadAttr_t attr;
attr.name = "ADC_Demo_Entry";
attr.attr_bits = 0U;
attr.cb_mem = NULL;
attr.cb_size = 0U;
attr.stack_mem = NULL;
attr.stack_size = 4096;
attr.priority = 24;
if (osThreadNew(ADC_Demo_Entry, NULL, &attr) == NULL) {
printf("[ADCDemo] Falied to create ADC_Demo_Entry!\n");
}
}
APP_FEATURE_INIT(ADC_Demo);
后面的这个怎么理解,是代表的这个任务的采样率啥的吗?请问
这就是创建一个任务
哭了~一开始没有wm adc这个头文件,,然后指定目录没有用,我把他全复制出来放WIFIot_lite 下了然后发现adc头文件没问题了 但是他base/iot_hardware/interfaces/kits/wifiiot_lite/wm_gpio_afsel.h:16:21: 致命错误: wm_osal.h:没有那个文件或目录
#include "wm_osal.h"
/iot_hardware/interfaces/kits/wifiiot_lite/wm_gpio_afsel.h:17:24: 致命错误: tls_common.h:没有那个文件或目录
#include "tls_common.h
然后 他缺啥我搬啥给他,,然后m,,,跑通了,,
我一开始还以为版本的事情(代码是在DDT下的,就是@#$%^&Tool)
一开始下的v0.01 v0.02 不能用提示缺各种头文件
还以为是版本不对 然后下了他的v1.1(就是标着base 的那个)还是有问题 ,,然后我就开文件搜索,缺啥搜,,一通搬,,,,,,,,跑通了..
我设置这个不管用 include_dirs = [ ~~~~~~,啥问题 我格式不对? 这是我的哈哈
include_dirs = [
"//utils/native/lite/include",
"//kernel/liteos_m/components/cmsis/2.0",
"//base/iot_hardware/interfaces/kits/wifiiot_lite",
"//device/winnermicro/neptune/sdk_liteos/platform/inc",
"//ohos_bundles@hihope/w800/include/wifi",
国庆快乐~~~~~