x
x

迅为4412开发板Linux字符设备控制(二)

发布时间:2021-3-9 15:08    发布者:落风
17.3  字符类 Buzzer  蜂鸣器
和 led 灯类似,蜂鸣器的设备节点也是在/dev 目录下,如下图所示。
1.jpg
蜂鸣器的硬件和 led 灯类似,如下图所示。
2.jpg
如上图所示。
原理图很容易理解,如果网络 MOTOR_PWM 为高电平,则 L9014 导通,蜂鸣器响,如果网络MOTOR_PWM 为低电平,则 L9014 截止,蜂鸣器则不响。
操作方式和 led 小灯类似。
蜂鸣器测试例程
编写简单的 buzzertest.c 文件测试蜂鸣器。
首先添加头文件,如下图所示,下面新加了几个库文件,一般常用的就是下面几个,写代码的时候,
为了方便,可以直接都添加上。
3.jpg
然后 main 函数如下图所示。
4.jpg
如上图代码所示。由于只有一个 IO,底层没有做第三个参数的判断,所以无效
第 16-19 行,对参数 argv[1]有个简单的判断,命令只能是 0 或者 1。
第 21-24 行,open 函数打开蜂鸣器设备节点
第 26 行,使用 ioctl 函数操作蜂鸣器。
第 27 行,使用 close 函数关闭设备节点。
编译运行测试
Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/charcontrol”,将源码 buzzertest.c 拷贝进去,如下图所示。
5.jpg
使用命令“arm-none-linux-gnueabi-gcc -o buzzertest buzzertest.c -static”编译buzzertest 文件,如下图所示,使用命令“ls”可以看到生成了 buzzertest 可执行文件。
6.jpg
这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统。
将编译成的可执行文件 buzzertest,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘, 运行程序如下。
使用参数 1 和 0,蜂鸣器会响。第二个参数实际上并不起作用。
7.jpg
如下图所示,使用参数 0 和 0,蜂鸣器会停止响。
8.jpg
17.4  字符类 ADC  模数转换
和 led 灯类似,数模转换的设备节点也是在/dev 目录下,如下图所示。
9.jpg
模数转换的硬件部分如下图所示。
10.jpg
如上图所示。
XadcAIN0 网络可以读取到当前输入电压,滑动变阻器 R 移动的时候,1 和 2 之间的电阻 R12 改变,滑动变阻器最大电阻为 R13,然后电压 Vadc=R12*VDD1V8_EXT/R13
上面公式中 Vadc 可以通过 4412 读取出来,VDD1V8 和 R13 已知,那么就很容易求出 R12 的电阻。如下图所示,在 4412datasheet 中 ADC 章节中有真实的电阻和电压曲线图。
11.jpg
这里将数值做一个简单的换算,
1.8V 对应的是 10K 欧姆,对应的寄存器数值为 0xfff;
0V 对应的是 0 欧姆,对应的寄存器数值为 0x0。
这样做一个简单公式,将读取的数值 r 转化为电阻值 R。
R = r*10000/0xfff,即 R = r*10000/4095。
这个小公式在后面的代码中将会使用到。
模数转换例程
编写简单的 ADC.c 文件测试 adc 的驱动。首先添加头文件,如下图所示。
12.jpg
然后 main 函数如下图所示。
13.jpg
如上图代码所示。
第 14 行,设备节点为 char *adc = "/dev/adc"。
第 21 行,打开设备节点文件。
第 26 行,使用 read 函数,将读取数字赋予 buffer。
第 30 和 31 行,做个简单地换算,将读取的数值转化为电阻值。
编译运行测试
在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/charcontrol/”将源
码 ADC.c 拷贝进去,如下图所示。
14.jpg
使用命令“arm-none-linux-gnueabi-gcc -o ADC ADC.c -static”编译 ADC 文件,如下图所示,使用命令“ls”可以看到生成了 ADC 可执行文件。
15.jpg
这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统,具体方法参考 10.3.5 小节。将编译成的可执行文件 open,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序。
如下图所示,使用命令“./mnt/udisk/ADC”即可检测当前电阻值,中间的大段打印参数是多次打印寄存器的数值,在驱动实验中再去介绍。
16.jpg
调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化。
17.jpg
滑动变阻器向顺时针旋转,阻值会减小,最小为 0;
滑动变阻器向逆时针旋转,阻值会增大,最大为 10K。
18.jpg

本文地址:https://www.eechina.com/thread-761858-1-1.html     【打印本页】

本站部分文章为转载或网友发布,目的在于传递和分享信息,并不代表本网赞同其观点和对其真实性负责;文章版权归原作者及原出处所有,如涉及作品内容、版权和其它问题,我们将根据著作权人的要求,第一时间更正或删除。
您需要登录后才可以发表评论 登录 | 立即注册

厂商推荐

  • Microchip视频专区
  • KSZ989x系列交换机应用设计要点培训教程
  • AOE | 时钟与时序(1/7):什么是时钟以及为什么我们需要优质时钟?
  • 初学者在电源电路设计中常犯的错误(以及如何避免)
  • AOE | 时钟与时序(6/7):稳定性与精度的区别是什么?
  • 贸泽电子(Mouser)专区
关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表