BeagleBone Black板第九课:测试读取ADC数据

BBB板第九课:测试读取ADC数据

之前我们初步学习了GPIO的使用方法,接下来认识下BBB板上ADC数据的读取操作,因为用BBB板做外部控制,接收外部传感器的一些模拟数据,模数转换ADC是需要用到的。所以在这里我也测试一下这BBB板的ADC简单功能,以后有深入学习到知识再进行补充。

ADC资源引脚,P9_32至P9_40共九个引脚,其中P9_32为电源正极,P9_34为共地,其他七个对应七个ADC输入脚,因为有一个Ain_7估计是内部使用了,所以我们只使用Ain_0至Ain_6这七个ADC。

以下的所有操作均在上一节新建立好的Eclipse 环境下。

BBB板ADC需要用到两个目录:

1、/sys/devices/bone_capemgr.9/  加载ADC设备树的目录,有些版本可能为bone_capemgr.8或其他数字,具体根据自己的板来做;

2、/sys/bus/iio/devices/ 这个目录是ADC设备加载后的设备数据目录,读取ADC数据就是这在主目录下进行的;

通过Eclipse工作界面,分别打开这两个目录,可以用dir 或 ls –all 命令查看下缺省状态下都有什么文件,可以同时打开多个字符终端,而且不用反复输入CD命令来切换目录,这个远程资源管理器是非常方便的。

1、加载ADC设备

命令为:# echo BB-ADC > /sys/devices/bone_capemgr.9/slots

其实和之前打开GPIO类似,都是用echo命令实现的,具体的这个加载变量名称:BB-ADC是如何来的,我也不太清楚,但有可能是从/lib/firmware/下的设备树(device tree)相应dtbo文件名来的,我的BBB板这个目录下没有一个dts文件,都需要反编译回来才行。

在左下方打开的字符终端,因为我直接进入相应目录,命令路径不用那么长,直接执行:echo BB-ADC > slots 就行了。

然后打开另一个设备数据的字符终端,直接执行:dir 增加了一个目录:iio:device0,之前是没有的,执行了echo BB-ADC > slots 才加载出来的。

2、查看相应的ADC数据

利用Eclipse工作界面的远程文件系统再打开相应的iio:device0 ,再开多一个Terminals窗口,充分利用这个无缝功能,可以省去输入“ cd iio:device0”这类切换目录的手工输入操作,查看下iio:device0的文件:

其中的in_voltage0_raw、in_voltage1_raw至in_voltage7_raw共8个文件就是BBB板8个ADC引脚的值,这时可以用cat
命令来查看下其中的数值:

可以看到in_voltage0_raw 数据值为3959

in_voltage1_raw数据值为3462

in_voltage2_raw数据值为3821

这些数值每次读取的都会不一样,在一个很小的范围内波动,这个是正常的。

BBB板的ADC是12位的,所以这个数值是0---4095之间的数值,对应着0—1.8V的输入电压(注:BBB板ADC管脚最大只能输入1.8V,以后真正用的时候得注意传感器放大后的输入电压量,否则就弄烧板了)。

3、编程实现ADC数据读取

直接在右侧文件系统中通过右键菜单建立新文件,我固定使用/home/binc目录,之前说过,你可以根据自己喜欢来做,这里新建abc1.cpp,点击完成就可以了。就像在XP下操作硬盘一样操作BBB板的文件系统,真的无缝连接。

然后在文件代码窗口中输入以下代码并保存

#include
<stdio.h>

#include
<stdlib.h>

#define ADC_DIR"/sys/bus/iio/devices/"

main()

{

FILE *stream=NULL;

int i=0;

char a[10];      /*字符串数组,10位,那些ADC值3959之类其实有4位就够了*/

stream=fopen(ADC_DIR"iio:device0/in_voltage0_raw","r+");

if (stream==NULL)     /*假如没有文件就执行加载ADC*/

{

stream=fopen("/sys/devices/bone_capemgr.9/slots","w");

fwrite("BB-ADC",sizeof(int),6,stream);   /*BB-ADC有6个字符*/

fclose(stream);

stream=fopen(ADC_DIR"iio:device0/in_voltage0_raw","r+");

}

fscanf(stream,"%s",a);

printf("in_voltage0_raw:%s \n",a);      /*0号ADC*/

fclose(stream);

stream=fopen(ADC_DIR"iio:device0/in_voltage1_raw","r+");

fscanf(stream,"%s",a);

printf("in_voltage1_raw:%s \n",a);      /*1号ADC*/

fclose(stream);

stream=fopen(ADC_DIR"iio:device0/in_voltage2_raw","r+");

fscanf(stream,"%s",a);

printf("in_voltage2_raw:%s \n",a);      /*2号ADC*/

fclose(stream);

}

4、编译执行

进入文件目录编译,就不用写那么长的路径名称,执行:g++ -o abc1abc1.cpp 生成abc1

执行:./adc1 ,三个数值显示就出来了。全OK吧!

可以手动执行cat 命令比较下编程得到的数值,有一点点波动的,数值不会完全一样:

网上一高手说,他把采样速度增大10倍,每0.1毫秒采样一次,就会出现连续重复的数值,所以他指出BBB板的ADC刷新速度是毫秒级的,足够应用了!

小试ADC读取数值就讲到这。休息一会!

BeagleBone Black板第九课:测试读取ADC数据

时间: 2024-10-25 07:59:35

BeagleBone Black板第九课:测试读取ADC数据的相关文章

BeagleBone Black板第十课:测试PWM功能

BBB板第十课:测试PWM功能 上一节课我们初步学习了BBB板上ADC数据的读取方法,本节课将把学到的PWM的知识贡献给和我一样的初学者.以下这张彩图来自网上,详细标明了14个PWM和四个定时器的引脚位置.本实验中,我们只测试其中的P8_13引脚,名称为eHRPWM2B. 需要准备的实验工具:一个二极管发光管和数字万用表及其他小线材 一.PWM知识(部分知识直接摘自网上) PWM全称Pulse WidthModulation,脉冲宽度调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有

BeagleBone Black板第七课:GPIO编程控制

BBB板第七课:GPIO编程控制 在一上课我们通过IO函数做了简单的GPIO端口输出高低电平输出,实现对一个LED指示灯的点亮和关闭控制,本节将通过完整的C++程序,实现第四课Shell脚本的全部功能,实现两个LED指示灯的交替闪亮. 直接通过进入功能程序 1.实现echo 44 > export 打开端口功能 上一课简单测试中,通过手工在BBB板终端模式下打开gpio44端口可通过以下程序实现: #include <stdio.h> #define GPIO_DIR "/sy

BeagleBone Black板第五课:Shell脚本编程实验

BBB板第五课:Shell脚本编程实验 在一上课我们通过简单的echo命令测试并控制GPIO端口的高低电平输出,实现对一个LED指示灯的点亮和关闭控制,本节将通过Shell脚本编程,来完成两个LED指示灯的交替闪亮的实验. 实验器材:准备两个二极管指示灯,面包板等 使用GPIO端口P8.12和P8.11两个引脚 我们暂时不借助其他工具软件,直接远程登陆到BBB板的图形桌面,使用内置的Ledfpad编辑器来完成Shell脚本的编程. 远程登陆BBB板图形桌面还记得吧,不记得话参考前面的课程,这里就

BeagleBone Black板第六课:C++编程控制GPIO基础

BBB板第六课:C++编程控制GPIO基础 在一上课我们通过Shell脚本编程实现了对GPIO端口的简单输出控制,实现对两个LED指示灯的交替点亮和关闭,接下来的一两节课,将通过C++程序来实现Shell脚本的功能.为了实现对应的程序控制,我查阅了好多资料,测试过程中发觉网上的一些程序套用过来总是出现各种各样的编译错误,压根就控制不了BBB板,不知是我的BBB板太新,还是以前的程序太旧.最后还是从头开始,重新研究BBB板的文件系统,找出头文件,找出所有相关的函数,终于实现GPIO的C++程序控制

BeagleBone Black 板第三课:Debian7.5系统安装和远程控制BBB板

BBB板第三课:Debian7.5系统安装和远程控制BBB板 因为BBB板系统是Debian 7.4,据说使用Debian系统可以实现很多BBB板的无缝连接,可以更好的学习和控制BBB板,所以就决定下载Debian7.5系统安装,采用虚拟机的安装方式. 一.系统安装 1.我下载了Debian7.5 32位系统,有三张DVD盘,网上有不少安装资料了,我这里就不详细介绍安装过程了.不过有一点可能很多人都会遇到的问题,就是安装过程中提示插入光盘的问题.虚拟机是Vmware workstation 10

BeagleBone Black板第八课:建立Eclipse编程环境

BBB板第八课:建立Eclipse编程环境 最近新建了一个编程环境,感觉到非常方便,分享给大家.之前除了在BBB板远程桌面直接编写shell脚本或C程序外,通过Debain 7.5系统下使用编辑软件也试过,写完程序还是转存到BBB板编译,反正觉得挺麻烦.不熟悉linux是个原因,但没汉化的软件更是个问题.最后重新回来熟悉的XP的环境,根据网上一些点子,安装Eclipse C/C++,没想到用过后感觉非常好,起码现阶段是认可.特别是对我这种初学者来说,真的觉得方便.好用. 我的基本环境是Windo

MiS603开发板 第九章 IP-CORE BRAM

作者:MiS603开发团队 日期:20150911 公司:南京米联电子科技有限公司 论坛:www.osrc.cn 网址:www.milinker.com 网店:http://osrc.taobao.com EAT博客:http://blog.chinaaet.com/whilebreak 博客园:http://www.cnblogs.com/milinker/ MiS603开发板 第九章 IP-CORE BRAM 上一章节笔者讲解了FIFO的简单使用,那么FPGA的Block RAM(BRAM)

【C语言探索之旅】 第二部分第九课: 实战&quot;悬挂小人&quot;游戏

内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建

【C语言探索之旅】 第二部分第九课: 实战[悬挂小人]游戏

内容简介 1.课程大纲 2.第二部分第九课: 实战"悬挂小人"游戏 3.第二部分第十课预告: 安全的文本输入 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏. C语言编程基础知识 什么是编程? 工欲善其事,必先利其器 你的第一个程序 变量的世界 运算那点事 条件表达式 循环语句 实战:第一个C语言小游戏 函数 练习题 习作:完善第一个C语言小游戏 C语言高级技术 模块化编程 进击的指针,C语言王牌 数组 字符串 预处理 创建