文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

[FFH]标准系统HDF平台驱动(二)—ADC平台驱动使用

2024-11-30 17:23

关注

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

前言

前面一篇文章已经实现了UnionPi_Tiger的ADC驱动的HDF框架接入(在最新的master版本上已经进行了适配,OpenHarmony-3.2-Beta5上目前还没实现),现在已经可以正常调用HDF提供的ADC统一驱动接口进行应用开发。现在就使用这些接口来读取LM35温度传感器数据。

环境

参考

​平台驱动使用——ADC​​​​标准系统HDF平台驱动(一)——ADC驱动适配​

前置知识

ADC

  1. 简介
    ADC(Analog to Digital Converter),即模拟-数字转换器,是一种将模拟信号转换成对应数字信号的设备。
  2. 基本概念

ADC设备硬件连接

除电源线和地线之外,ADC只需要1根线与被测量的设备进行连接,例如对于UnionPi_Tiger与LM35线性模拟温度传感器如下:

LM35温度传感器原理及计算

购买:​​LM35线性模拟温度传感器​LM35数据手册

则信号电压值计算为:
每10mv为1°C,则温度值为: 

ADC平台接口介绍

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

接口名

接口描述

参数

返回值

DevHandle AdcOpen(uint32_t number)

打开ADC设备

number:ADC设备号

DevHandle:ADC设备句柄

void AdcClose(DevHandle handle)

关闭ADC设备

handle:ADC设备句柄

int32_t AdcRead(DevHandle handle, uint32_t channel, uint32_t *val)

读取AD转换结果值

handle:ADC设备句柄

channel:通道号

*val:采样值

0:读取成功

负数:读取失败

使用流程

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


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

平台驱动使用

接下来测试一下ADC的HDF驱动框架是否成功,以读取LM35温度传感器为例,测试ADC接口层函数功能。工程位置为vendor/unionman/unionpi_tiger/sample/hdf。

hdf
├── adc
├── adc.c
└── BUILD.gn
├── BUILD.gn

1、编写驱动代码

#include <stdio.h>
#include <stdlib.h>
#include "adc_if.h"
#include "hdf_log.h"
#include "osal_time.h"

#define ADC_DEVICE_NUM 0
#define TEMP_CONST (1.8/(0.01*4096))

int32_t main(int argc, char *argv[])
{
int32_t ret;
uint32_t channelNum=0;
DevHandle adcHandle = NULL;
uint32_t read_val = 0;
double temperature = 0;
//默认打开通道0,可以输入参数使用其他通道
if(argc == 2)
{
channelNum=atoi(argv[1]);
}


adcHandle = AdcOpen(ADC_DEVICE_NUM);
if (adcHandle == NULL) {
HDF_LOGE("%s: Open ADC%u fail!", __func__, ADC_DEVICE_NUM);
return -1;
}

ret = AdcRead(adcHandle, channelNum, &read_val);
if (ret != HDF_SUCCESS) {
HDF_LOGE("%s: ADC read fail!:%d", __func__, ret);
AdcClose(adcHandle);
return -1;
}

temperature = ((double)read_val) * TEMP_CONST;

printf("ADC value is %d\r\n",read_val);
printf("Temperature is %.1f°C\n", temperature);

HDF_LOGI("%s: ADC read successful!", __func__);


AdcClose(adcHandle);
return HDF_SUCCESS;
}

2、编写BUILD.gn

import("//build/ohos.gni")
import("//drivers/hdf_core/adapter/uhdf2/uhdf.gni")

ohos_executable("adc") {
sources = [ "adc.c" ]

include_dirs = [
"//drivers/hdf_core/framework/include/platform",
]

deps = [ "//drivers/hdf_core/adapter/uhdf2/platform:libhdf_platform" ]

external_deps = [
"hdf_core:libhdf_utils",
"hiviewdfx_hilog_native:libhilog",
]

cflags = [
"-Wall",
"-Wextra",
"-Werror",
"-Wno-format",
"-Wno-format-extra-args",
]

install_enable = true
install_images = [ "vendor" ]
module_install_dir = "bin"
part_name = "unionman_products"
}

3、添加进编译

import("//build/ohos.gni")

group("hdf") {
deps = [
"gpio:gpio",
"led_light:led_light",
"pwm:pwm",
"adc:adc" # 添加这句话
]
}

4、编译打包烧录

具体步骤参考:https://gitee.com/openharmony/device_board_unionman/blob/master/unionpi_tiger/README_zh.md#编译与调试。

如果开发板原本烧录的系统与编译的系统一致,也可以直接通过hdc_std工具直接将生成的可执行程序发送到开发板,编译生成的可执行程序位于out/unionpi_tiger/packages/phone/vendor/bin。

hdc_std shell
mount -o rw,remount /
hdc_std file 你的路径/adc /vendor/adc
./vendor/bin/adc

5、运行

连接好传感器后,进入开发板终端:

./vendor/bin/adc  #默认通道0进行采样(ADC_1)
./vendor/bin/adc 1 #使用通道1进行采样(ADC_2)

运行结果:

文章相关附件可以点击下面的原文链接前往下载:

 https://ost.51cto.com/resource/2622。

想了解更多关于开源的内容,请访问:

​51CTO 开源基础软件社区​

​https://ost.51cto.com​

来源:51CTO 开源基础软件社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯