Harmony鸿蒙南向驱动开发-ADC接口使用

ADC(Analog to Digital Converter),即模拟-数字转换器,可将模拟信号转换成对应的数字信号,便于存储与计算等操作。除电源线和地线之外,ADC只需要1根线与被测量的设备进行连接,其物理连线如图1所示:

图 1 ADC物理连线示意图

ADC物理连线示意图

ADC接口定义了完成AD转换的通用方法集合,包括:

  • ADC设备管理:打开或关闭ADC设备。

  • ADC读取转换结果:读取AD转换结果。

基本概念

  • 分辨率

    分辨率指的是ADC模块能够转换的二进制位数,位数越多分辨率越高。

  • 转换误差

    转换误差通常是以输出误差的最大值形式给出。它表示A/D转换器实际输出的数字量和理论上的输出数字量之间的差别。常用最低有效位的倍数表示。

  • 转换时间

    转换时间是指A/D转换器从转换控制信号到来开始,到输出端得到稳定的数字信号所经过的时间。

运作机制

在HDF框架中,同类型设备对象较多时(可能同时存在十几个同类型配置器),如果采用独立服务模式则需要配置更多的设备节点,且相关服务会占据更多的内存资源。相反,采用统一服务模式可以使用一个设备服务作为管理器,统一处理所有同类型对象的外部访问(这会在配置文件中有所体现),实现便捷管理和节约资源的目的。ADC模块接口适配模式采用统一服务模式。

约束与限制

ADC模块仅支持轮询方式读取数据。

使用指导

场景介绍

ADC设备通常用于将模拟电压或电流转换为数字量,例如与NTC电阻搭配进行温度测量,或者将其他模拟传感器的输出量转换为数字量的场景。

接口说明

ADC模块提供的主要接口如表1所示,具体API详见//drivers/hdf_core/framework/include/platform/adc_if.h。

表 1 ADC驱动API接口功能介绍

接口名接口描述
DevHandle AdcOpen(uint32_t number)打开ADC设备
void AdcClose(DevHandle handle)关闭ADC设备
int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val)读取AD转换结果值

开发步骤

使用ADC设备的一般流程如图2所示。

图 2 ADC使用流程图

ADC使用流程图

打开ADC设备

在进行AD转换之前,首先要调用AdcOpen打开ADC设备。

DevHandle AdcOpen(int16_t number);

表 2 AdcOpen参数和返回值描述

参数参数描述
numberint16_t类型,ADC设备号
返回值返回值描述
NULL打开ADC设备失败
设备句柄打开的ADC设备句柄

假设系统中存在2个ADC设备,编号从0到1,那么我们现在打开1号设备。

DevHandle adcHandle = NULL;  // ADC设备句柄// 打开ADC设备
adcHandle = AdcOpen(1);
if (adcHandle == NULL) {HDF_LOGE("AdcOpen: fail\n");return NULL;
}
读取AD转换结果
int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val);

表 3 AdcRead参数和返回值描述

参数参数描述
handleDevHandle类型,ADC设备句柄
channeluint32_t类型,ADC设备通道号
valuint32_t类型指针,AD转换结果
返回值返回值描述
HDF_SUCCESS读取成功
负数读取失败

读取转换结果示例(以通道1为例):

uint32_t value;
int32_t ret;ret = AdcRead(adcHandle, 1, &value);
if (ret != HDF_SUCCESS) {HDF_LOGE("ADC read fail!\n");return ret;
}
关闭ADC设备

ADC通信完成之后,需要关闭ADC设备。

void AdcClose(DevHandle handle); 

表 4 AdcClose参数和返回值描述

参数参数描述
handleDevHandle类型,ADC设备句柄
返回值返回值描述

关闭ADC设备示例:

AdcClose(adcHandle); // 关闭ADC设备

使用实例

本例拟对Hi3516DV300开发板上ADC设备进行简单的读取操作,基本硬件信息如下:

  • SOC:hi3516dv300。

  • 硬件连接:电位器挂接在0号ADC设备1通道下。

本例程对测试ADC进行连续读取操作,测试ADC功能是否正常。

示例如下:

#include "adc_if.h"          // ADC标准接口头文件
#include "hdf_log.h"         // 标准日志打印头文件/// 设备号0,通道号1
#define ADC_DEVICE_NUM  0
#define ADC_CHANNEL_NUM 1
#define ADC_TEST_NUM    30// ADC例程总入口
static int32_t TestCaseAdc(void)
{int32_t i;int32_t ret;DevHandle adcHandle = NULL;uint32_t readBuf[ADC_TEST_NUM] = {0};// 打开ADC设备adcHandle = AdcOpen(ADC_DEVICE_NUM);if (adcHandle == NULL) {HDF_LOGE("%s: Open ADC%u fail!", __func__, ADC_DEVICE_NUM);return -1;}// 连续进行30次AD转换并读取转换结果for (i = 0; i < ADC_TEST_NUM; i++) {ret = AdcRead(adcHandle, ADC_CHANNEL_NUM, &readBuf[i]);if (ret != HDF_SUCCESS) {HDF_LOGE("%s: ADC read fail!:%d", __func__, ret);AdcClose(adcHandle);return -1;}}HDF_LOGI("%s: ADC read successful!", __func__);// 访问完毕关闭ADC设备AdcClose(adcHandle);return 0;
}

最后

有很多小伙伴不知道学习哪些鸿蒙开发技术?不知道需要重点掌握哪些鸿蒙应用开发知识点?而且学习时频繁踩坑,最终浪费大量时间。所以有一份实用的鸿蒙(HarmonyOS NEXT)资料用来跟着学习是非常有必要的。 

这份鸿蒙(HarmonyOS NEXT)资料包含了鸿蒙开发必掌握的核心知识要点,内容包含了ArkTS、ArkUI开发组件、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、Harmony南向开发、鸿蒙项目实战等等)鸿蒙(HarmonyOS NEXT)技术知识点。

希望这一份鸿蒙学习资料能够给大家带来帮助,有需要的小伙伴自行领取,限时开源,先到先得~无套路领取!!

获取这份完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

鸿蒙(HarmonyOS NEXT)最新学习路线

  •  HarmonOS基础技能

  • HarmonOS就业必备技能 
  •  HarmonOS多媒体技术

  • 鸿蒙NaPi组件进阶

  • HarmonOS高级技能

  • 初识HarmonOS内核 
  • 实战就业级设备开发

有了路线图,怎么能没有学习资料呢,小编也准备了一份联合鸿蒙官方发布笔记整理收纳的一套系统性的鸿蒙(OpenHarmony )学习手册(共计1236页)鸿蒙(OpenHarmony )开发入门教学视频,内容包含:ArkTS、ArkUI、Web开发、应用模型、资源分类…等知识点。

获取以上完整版高清学习路线,请点击→纯血版全套鸿蒙HarmonyOS学习资料

《鸿蒙 (OpenHarmony)开发入门教学视频》

《鸿蒙生态应用开发V2.0白皮书》

图片

《鸿蒙 (OpenHarmony)开发基础到实战手册》

OpenHarmony北向、南向开发环境搭建

图片

 《鸿蒙开发基础》

  • ArkTS语言
  • 安装DevEco Studio
  • 运用你的第一个ArkTS应用
  • ArkUI声明式UI开发
  • .……

图片

 《鸿蒙开发进阶》

  • Stage模型入门
  • 网络管理
  • 数据管理
  • 电话服务
  • 分布式应用开发
  • 通知与窗口管理
  • 多媒体技术
  • 安全技能
  • 任务管理
  • WebGL
  • 国际化开发
  • 应用测试
  • DFX面向未来设计
  • 鸿蒙系统移植和裁剪定制
  • ……

图片

《鸿蒙进阶实战》

  • ArkTS实践
  • UIAbility应用
  • 网络案例
  • ……

图片

 获取以上完整鸿蒙HarmonyOS学习资料,请点击→纯血版全套鸿蒙HarmonyOS学习资料

总结

总的来说,华为鸿蒙不再兼容安卓,对中年程序员来说是一个挑战,也是一个机会。只有积极应对变化,不断学习和提升自己,他们才能在这个变革的时代中立于不败之地。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/610642.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于WEB的水库水情自动测报系统的研究与设计(论文+源码)_kaic

摘要 水情信息是水利管理最重要的基础信息&#xff0c;是水文预报、水资源管理、防汛抗旱决策的主要依据。水情自动测报系统是一个自动采集、传输、处理水情信息的实时测报系统&#xff0c;可对水库流域内的水情、水文和气象数据&#xff0c;如雨量、流量、水位等&#xff0c;实…

Unity 中画线

前言&#xff1a; 在Unity项目中&#xff0c;调试和可视化是开发过程中不可或缺的部分。其中&#xff0c;绘制线条是一种常见的手段&#xff0c;可以用于在Scene场景和Game视图中进行调试和展示。本篇博客将为你介绍多种不同的绘制线条方法&#xff0c;帮助你轻松应对各种调试…

华为海思数字芯片设计笔试第四套

声明 下面的题目作答都是自己认为正确的答案&#xff0c;并非官方答案&#xff0c;如果有不同的意见&#xff0c;可以评论区交流。 这些题目也是笔者从各个地方收集的&#xff0c;感觉有些题目答案并不正确&#xff0c;所以在个别题目会给出自己的见解&#xff0c;欢迎大家讨论…

Java springboot+vue宠物爱心组织管理系统附赠万字文档

项目演示视频: &#xff08;有文档&#xff09;Java springboot宠物爱心组织管理系统 项目介绍: &#xff08;有文档&#xff09;Java springboot宠物爱心组织管理系统 技术&#xff1a; 基于springboot Vue 的宠物爱心组织管理系统&#xff08;宠物爱心组织管理系统&#xf…

HarmonyOS实战开发-如何使用@ohos.security.huks相关接口实现对任意输入内容进行加密和解密的功能。

介绍 本示例使用ohos.security.huks相关接口实现了对任意输入内容进行加密和解密的功能。 实现场景如下&#xff1a; 1&#xff09;使用新密钥进行消息加解密传输&#xff1a;使用HUKS的生成密钥接口在本地生成一个新密钥&#xff0c;模拟设备对发送的消息进行加密和对接收的…

windows下pycharm中配置conda虚拟环境

目录 一&#xff1a;背景 二&#xff1a;安装conda环境 三&#xff1a;pycharm配置环境 四&#xff1a;注意问题 一&#xff1a;背景 在使用python的过程中&#xff0c;我们可能需要在一个windows环境中创建多个版本的python和安装不同的库去做一些开发任务。 使用conda&a…

学习大数据,所需要的java(Maven)基础(1)

文章目录 使用Maven的优势第三方jar包添加第三方jar包获取jar包之间的依赖关系jar包之间的冲突处理将项目拆分成多个工程模块 实现项目的分布式部署Maven是什么自动化构建工具构建的概念构建环节自动化构建 Maven如何使用安装Maven核心程序maven联网问题Maven中的settings配置在…

javaee初阶———多线程(三)

T04BF &#x1f44b;专栏: 算法|JAVA|MySQL|C语言 &#x1faf5; 小比特 大梦想 此篇文章与大家分享多线程专题第三篇,关于线程安全方面的内容 如果有不足的或者错误的请您指出! 目录 八、线程安全问题(重点)1.一个典型的线程不安全的例子2.出现线程不安全的原因3.解决线程不安…

进程等待waitwaitpid

文章目录 进程等待进程等待的必要性进程等待的方法waitwaitpidstatus 非阻塞等待 进程等待 任何子进程&#xff0c;在退出的情况下&#xff0c;一般必须要被父进程等待 进程等待的必要性 1.父进程通过等待&#xff0c;解决子进程退出的僵尸问题&#xff0c;回收系统资源。 2.…

深入浅出 -- 系统架构之日均亿级吞吐量的网关架构(DNS轮询解析)

在前篇关于《Nginx》的文章中曾经提到&#xff1a;单节点的Nginx在经过调优后&#xff0c;可承载5W左右的并发量&#xff0c;同时为确保Nginx的高可用&#xff0c;在文中也结合了Keepalived对其实现了程序宕机重启、主机下线从机顶替等功能。 但就算实现了高可用的Nginx依旧存在…

ccf201509-3模板生成系统(list,map,字符串综合运用)

问题描述 成成最近在搭建一个网站&#xff0c;其中一些页面的部分内容来自数据库中不同的数据记录&#xff0c;但是页面的基本结构是相同的。例如&#xff0c;对于展示用户信息的页面&#xff0c;当用户为 Tom 时&#xff0c;网页的源代码是&#xff1a; 而当用户为 Jerry 时…

Ubuntu 安装Java、Git、maven、Jenkins等持续集成环境

Ubuntu 持续集成 安装OpenJdk 查看所有可安装的 JDK 版本 apt list OpenJDK\*使用 apt 安装 JDK&#xff08;以 11为例&#xff09;,最好是用11&#xff0c;java8对应的jenkins会有兼容问题。 sudo apt install openjdk-11-jdk openjdk-11-jre安装成功后&#xff0c;可以使用以…