bb_black_学习笔记——(7)ADC实验

在上一篇笔记的基础上,完成一个简单的ADC采样实验。

第一步:预备知识

1、先来看一下bb_black的ADC管脚位置。下图是bb_black的模拟输入端口的分布。

这张图上有三个重要的信息需要注意:

(1)模拟输入端口数量:arm芯片共有8个ADC通道,bb_black上引出来的是7个引脚,AIN0~6;

(2)模拟输入端口的电压范围:0~1.8V;

(3)ADC转换的位数:12位;

2、有了Eclipse开发环境,就能方便的查看开发板的目录结构。如下图所示为开发板的目录结构:

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

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

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

3、要进行ADC采样,就需要用到一个器件来模拟出一个模拟量,这里笔者采用的是常见的滑动变阻器,如下图所示:

注:

(1)滑动变阻器共有三个引脚,其中中间的引脚是滑动端,也就是说需要将中间的引脚连到开发板的模拟量输入引脚。然后另外两个引脚一个接模拟参考电压引脚和模拟地引脚;

(2)笔者在实验过程中选用的是100K的3296型滑动变阻器;

第二步:连接硬件

1、本实验的硬件连接非常简单,只需要使用三根线将滑动变阻器与bb_black的三个引脚连接好即可。

2、连接好的硬件如下图所示:

注:笔者实验用到的是AIN0端口

第三步:手动查看ADC转换数据

1、打开字符终端

2、加载ADC设备命令为:echo BB-ADC > /sys/devices/bone_capemgr.8/slots

3、进入目录/sys/bus/iio/devices,然后查看文件列表

4、进入该目录:

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

5、查看ADC数值:

注:

(1)每一次读取的数值应该偏差不大;

(2)上图中的3446就是ADC转换出来的数值;

第四步:通过编程实现ADC数据的读取

1、新建一个文件,如下图所示在My Home文件下建一个自己的文件夹,然后右键新建一个文件。

2、新建远程文件提示框如下,输入新建文件的名称adc.c

3、点击确定之后就能在目录结构图中看到笔者添加的文件,然后双击打开就可以在Eclipse下进行编辑了

4、输入下面的代码

 1 #include <stdlib.h>
 2 #include <stdio.h>
 3 #include <string.h>
 4 #include <fcntl.h>
 5 #include <unistd.h>
 6 #define SYSFS_ADC_DIR "/sys/bus/iio/devices/iio:device0/in_voltage0_raw"
 7 #define SYSFS_ADC_DEV "/sys/devices/bone_capemgr.8/slots"
 8 #define MAX_BUF 64
 9 int main()
10 {
11     FILE  *fd=NULL;
12     char a[10];
13     int x;
14     float adc;
15
16     fd=fopen(SYSFS_ADC_DIR,"w");
17     if (fd==NULL)     /*假如没有文件就执行加载ADC*/
18     {
19         fd=fopen(SYSFS_ADC_DEV,"w");
20         fwrite("BB-ADC",sizeof(int),6,fd);   /*BB-ADC有6个字符*/
21         fclose(fd);
22     }
23     for(;;)
24     {
25         fd=fopen(SYSFS_ADC_DIR,"r+");
26         fscanf(fd,"%s",a);
27         printf("%s",a);
28         if(strlen(a)==4)
29         {
30             x=((int)a[0]-48)*1000+((int)a[1]-48)*100+((int)a[2]-48)*10+((int)a[3]-48);
31         }
32         else if(strlen(a)==3)
33         {
34             x=((int)a[0]-48)*100+((int)a[1]-48)*10+((int)a[2]-48);
35         }
36         else if(strlen(a)==2)
37         {
38             x=((int)a[0]-48)*10+((int)a[1]-48);
39         }
40         else
41         {
42             x=((int)a[0]-48);
43         }
44         adc=((float)x/4095.0)*1.8;
45         printf("      adc=%4f\n",adc);
46         fclose(fd);
47         sleep(1);
48     }
49     return 0;
50 } 

注:

(1)Linux下对设备的操作全部转换问对文件的操作,所以本次ADC实验也是对相应的文件进行操作;

(2)strlen(a)获取a数

5、编辑完成一定要记得保存文件,否则编译的将会是上一次的文件,如下图所示保存文件

6、在字符终端找到新建的文件并编译该文件,编译命令为:arm-angstrom-linux-gnueabi-gcc –o adc adc.c

7、编译完成之后就可以运行编译的结果了:./adc

8、通过旋动滑动变阻器来观察adc数值变化。

时间: 2024-11-03 22:32:57

bb_black_学习笔记——(7)ADC实验的相关文章

stm32寄存器版学习笔记07 ADC

STM32F103RCT有3个ADC,12位主逼近型模拟数字转换器,有18个通道,可测量16个外部和2个内部信号源.各通道的A/D转换可以单次.连续.扫描或间断模式执行. 1.通道选择 stm32把ADC转换分成2个通道组:规则通道组相当于正常运行的程序:注入通道组相当于中断.程序初始化阶段设置好不同的转换组,系统运行中不用变更循环转换的配置,从而达到任务互不干扰和快速切换. 有16个多路通道.可以把转换组织成两组:规则组和注入组.在任意多个通道上以任意顺序进行的一系列转换构成成组转换.例如,可

CCNA学习笔记之一---VLAN实验组网

VLAN实验用的是Cisco Packet Tracer模拟器做的实验,实验拓扑如下图 1.Switch1配置如下 Switch>en                                    进入特权模式 Switch#conf t                                进入全局配置模式 Switch(config)#host Switch1                  给设备命名 Switch1(config)#no ip domain-lookup

bb_black_学习笔记——(3)点亮LED之shell命令

这次改变一下笔记的结构,直接上图.点亮LED永远是学习MCU,ARM,FPGA的入门例程,可以说是经典例程.这里笔者也从点亮LED开始开始ARM学习之旅. 接下来就开始点亮LED之旅,在开始之前需要向读者说明:本文作者也是一个ARM初学者,学习过程中也是在网上查找各种资料,最后总结于此.可以确定实验的过程中有好多地方笔者自己也是没有搞明白的,所以请读者原谅不能写的太透彻. 第一步:要点亮LED,首先需要了解GPIO的硬件位置,这样才能去操作相应的IO口,实现点灯目的 1.连接好bb-black之

bb_black_学习笔记&mdash;&mdash;(6)建立Eclipse编程环境

最近学习了一个编程环境,感觉到非常方便,分享给大家.之前的几篇笔记都是通过Xshell工具远程登录开发板,在开发板上进行代码的编写,编译运行.好处就是对于初学者来说不需要搭建太多的开发环境,不好的地方,Linux自带的VIM编辑器是没有语法高亮的,代码量比较多的时候,用起来不是很方便.根据网上一些点子,安装Eclipse C/C++,没想到用过后感觉非常好,起码现阶段是认可.特别是对我这种初学者来说,真的觉得方便.好用. 我的基本环境是Windows7+Eclipse C/C.以下是网友的搭建步

bb_black_学习笔记&mdash;&mdash;(4)闪烁LED之shell命令

上一篇笔记在终端输入shell命令实现了LED灯的点亮与熄灭,作为初学者,已经兴奋了一阵,因为终于有了零的突破.手动点亮LED总会比较麻烦,还是得通过程序让它自己去点亮与熄灭,这样才更好玩.这篇笔记里,笔者通过学习shell脚本,实现LED的闪烁,这样才好玩.本篇笔记还是先从现象看起,然后在分析其实现原理. 第一步:实现LED灯闪烁 1.先来个简单的shell脚本,了解一下shell脚本的使用流程.下图为创建一个名为hello_sh的shell脚本编辑执行的过程. 几点说明: (1)shell脚

bb_black_学习笔记——(1)开发板的登陆

刚收到bb-black很兴奋,接着就茫然了,作为只学过单片机的人来说一下子要开发ARM系统真有点不知道如何入手.本人写这些博客完全是为了记录自己的学习历程,由于是初学者所以笔记内容难免会有不当之处,如有发现,请指正! 本人的电脑配置是win7 64bit. 第一步:完成硬件连接与驱动程序的安装,为系统登录做准备. 1.通过看一些资料发现bb-black的MiniUSB口既可以作为网口使用也可以作为串口使用,同时也是电源和USBslave接口.这样对于初学者来说硬件上就只需要连接一根miniUSB

MIT 6.828 学习笔记5 Lab3实验报告

Lab3 实验报告 Exercise 1 Modify mem_init() in kern/pmap.c to allocate and map the envs array. // mem_int() // 第一处 envs = (struct Env *) boot_alloc(NENV * sizeof(struct Env)); memset(pages, 0, NENV * sizeof(struct Env)); // 第二处 boot_map_region(kern_pgdir,

bb_black_学习笔记——(2)还是从helloworld开始C编程

今天从第一个简单的程序“helloworld”开始学习嵌入式的开发.这个例子中会用到一些Linux命令,这些命令都是Linux最基本的命令.在开始之前先来说说这些命令的含义. 第一步:预备知识学习. 1.文件查看命令ls. 带参数:ls -l 这时候会显示文件的所有属性,比如文件权限,修改日期等信息. 2.创建文件目录命令mkdir. 例如:mkdir zhe 创建一个文件名为zhe的空目录.如下图所示创建了一个名为zhe的空目录. 3.目录切换命令cd. 例如:cd zhe 如下图所示进入名为

MIT 6.828 学习笔记6 Lab4实验报告

Lab4实验报告 开始之前,为了弄懂 mpconfig 与 lapic,可能需要阅读 Intel processor manual 和 MP Specification,相关资源可以在课程中找到 Execrise 1 Implement mmio_map_region in kern/pmap.c. // mmio_map_region() uintptr_t ret = base; size = ROUNDUP(size, PGSIZE); base = base + size; if (ba