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。
Neptune开发板 ADC使用获取电压-鸿蒙开发者社区
高于2.4V 外部需做分压处理后才可进入ADC 接口。为提高精度,R1 和R2 需使用高精度电阻。
根据Sensor 输出值选择合适的R1,R2 电阻值分压。(这里是理论上ADC 获取值,我使用2个1k电阻分压)
Neptune开发板 ADC使用获取电压-鸿蒙开发者社区
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);

BUILD.gn

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、编译,烧录,测试
Neptune开发板 ADC使用获取电压-鸿蒙开发者社区
Neptune开发板 ADC使用获取电压-鸿蒙开发者社区

5、总结
通过对ADC操作发现W800的接口的复用功能对开发者有些不友好,PA1与PA4既是唯一I2C接口(PB19/PB20要用作串口0输出)同时又是两个唯一ADC接口,这样会使ADC的功能非常的鸡肋,因为我们不可能放弃I2C功能不用。

©著作权归作者所有,如需转载,请注明出处,否则将追究法律责任
标签
已于2021-9-25 21:41:48修改
7
收藏 6
回复
举报
6条回复
按时间正序
/
按时间倒序
-_青艺丶梦之城。1?
-_青艺丶梦之城。1?

啊这啊这

1
回复
2021-9-27 14:03:52
-_青艺丶梦之城。1?
-_青艺丶梦之城。1?

 

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);

后面的这个怎么理解,是代表的这个任务的采样率啥的吗?请问

回复
2021-9-27 14:20:08
远道可思
远道可思 回复了 -_青艺丶梦之城。1?
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); 后面的这个怎么理解,是代表的这个任务的采样率啥的吗?请问

这就是创建一个任务

回复
2021-9-27 14:27:17
-_青艺丶梦之城。1?
-_青艺丶梦之城。1?

哭了~一开始没有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

回复
2021-10-1 22:19:26
-_青艺丶梦之城。1?
-_青艺丶梦之城。1?

然后 他缺啥我搬啥给他,,然后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",

回复
2021-10-1 22:27:29
-_青艺丶梦之城。1?
-_青艺丶梦之城。1?

国庆快乐~~~~~

已于2021-10-1 22:28:10修改
回复
2021-10-1 22:27:57
回复
    相关推荐