第十节 Linux系统编程-字符设备控制-ADC模数转换

-------------------------------------资源来源于网络,仅供自学使用,如有侵权,联系我必删.

第一:

字符类 ADC 模数转换

和 led 灯类似,数模转换的设备节点也是在/dev 目录下,如下图所示。

第十节 Linux系统编程-字符设备控制-ADC模数转换_第1张图片

 

这样有一个简单公式,将读取的数值 r 转化为电阻值 R。
R = r*10000/0xfff,即 R = r*10000/4095。

 

第二:

模数转换例程

1)首先添加头文件,如下图所示

第十节 Linux系统编程-字符设备控制-ADC模数转换_第2张图片

 

2)然后 main 函数如下图所示

第十节 Linux系统编程-字符设备控制-ADC模数转换_第3张图片

 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
//#include 
//#include 

int main(void){
	int fd;
        //设备节点为 char *adc = "/dev/adc"
	char *adc = "/dev/adc";
	char buffer[512];
	int len=0, r=0;
	
	memset(buffer,0,sizeof(buffer));
		printf("adc ready!\n");
	
        //打开设备节点文件
	if((fd = open(adc, O_RDWR|O_NOCTTY|O_NDELAY))<0)
		printf("open adc err!\n");
	else{
		printf("open adc success!\n");
	
                //使用 read 函数,将读取数字赋予 buffer	
		len=read(fd,buffer,10);	
		
		if(len == 0)
			printf("return null\n");
		else{
			r = atoi(buffer);
                        //做个简单地换算,将读取的数值转化为电阻值
			r = (int)(r*10000/4095);	//Datas  transition to Res
			printf("res value is %d\n",r);
		}			
	}
}

第三:

编译运行测试

1)在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录
“/home/linuxsystemcode/charcontrol/”将源码 ADC.c 拷贝进去,如下图所示。

第十节 Linux系统编程-字符设备控制-ADC模数转换_第4张图片

 

2)使用命令“arm-none-linux-gnueabi-gcc -o ADC ADC.c -static”编译 ADC 文件,如下图所示,使用命令“ls”可以看到生成了 ADC 可执行文件

第十节 Linux系统编程-字符设备控制-ADC模数转换_第5张图片

 

3)将编译成的可执行文件 ADC,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序

第十节 Linux系统编程-字符设备控制-ADC模数转换_第6张图片

 

4)如下图所示,使用命令“./mnt/udisk/ADC”即可检测当前电阻值,中间的大段打印参数
是多次打印寄存器的数值,在驱动实验中再去介绍

第十节 Linux系统编程-字符设备控制-ADC模数转换_第7张图片

调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化

第十节 Linux系统编程-字符设备控制-ADC模数转换_第8张图片

滑动变阻器向顺时针旋转,阻值会减小,最小为 0;
滑动变阻器向逆时针旋转,阻值会增大,最大为 10K。

你可能感兴趣的:(第十节 Linux系统编程-字符设备控制-ADC模数转换)