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

17.3  字符类 Buzzer  蜂鸣器

和 led 灯类似,蜂鸣器的设备节点也是在/dev 目录下,如下图所示。

5f6a58c546805cd861284a9ecb05e672.png

蜂鸣器的硬件和 led 灯类似,如下图所示。

f69f7a9f7ac7f46435c0595e091eb58c.png

如上图所示。

原理图很容易理解,如果网络 MOTOR_PWM为高电平,则 L9014 导通,蜂鸣器响,如果网络MOTOR_PWM 为低电平,则 L9014 截止,蜂鸣器则不响。

操作方式和 led 小灯类似。

蜂鸣器测试例程

编写简单的 buzzertest.c 文件测试蜂鸣器。

首先添加头文件,如下图所示,下面新加了几个库文件,一般常用的就是下面几个,写代码的时候,

为了方便,可以直接都添加上。

8b209dea519f2565f7814fb07d2b63c3.png

然后 main 函数如下图所示。

a7bc38578aa7d68a18a71fc13790ed69.png

如上图代码所示。由于只有一个 IO,底层没有做第三个参数的判断,所以无效

第 16-19 行,对参数 argv[1]有个简单的判断,命令只能是 0 或者 1。

第 21-24 行,open 函数打开蜂鸣器设备节点

第 26 行,使用 ioctl 函数操作蜂鸣器。

第 27 行,使用 close 函数关闭设备节点。

编译运行测试

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

940461e39b1daf81cb58adc5debc707a.png

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

4a8dadc7a11e08e6206f54fb6644cb92.png

这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统。

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

使用参数 1 和 0,蜂鸣器会响。第二个参数实际上并不起作用。

615d39de3bc142dd5ce35b35dbcb7895.png

如下图所示,使用参数 0 和 0,蜂鸣器会停止响。

d72fa99597effb00666deb38b4c44207.png

17.4  字符类ADC模数转换

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

bc5d377b0679e751b44a7a93d0bfe2b4.png

模数转换的硬件部分如下图所示。

e75642187293e67a81ae76e857d9b956.png

如上图所示。

XadcAIN0 网络可以读取到当前输入电压,滑动变阻器 R 移动的时候,1 和 2 之间的电阻R12 改变,滑动变阻器最大电阻为 R13,然后电压 Vadc=R12*VDD1V8_EXT/R13

上面公式中 Vadc 可以通过 4412 读取出来,VDD1V8 和 R13 已知,那么就很容易求出 R12 的电阻。如下图所示,在 4412datasheet 中 ADC 章节中有真实的电阻和电压曲线图。

6bfe76221ae3d10e7f5133911d1a6594.png

这里将数值做一个简单的换算,

1.8V 对应的是 10K 欧姆,对应的寄存器数值为 0xfff;

0V 对应的是 0 欧姆,对应的寄存器数值为 0x0。

这样做一个简单公式,将读取的数值 r 转化为电阻值 R。

R = r*10000/0xfff,即 R = r*10000/4095。

这个小公式在后面的代码中将会使用到。

模数转换例程

编写简单的 ADC.c 文件测试 adc 的驱动。首先添加头文件,如下图所示。

46991a46916c356359680c1c5926fa4e.png

然后 main 函数如下图所示。

4d9af00bcb1e89f5219934c0773f3091.png

如上图代码所示。

第 14 行,设备节点为 char *adc = "/dev/adc"。

第 21 行,打开设备节点文件。

第 26 行,使用 read 函数,将读取数字赋予 buffer。

第 30 和 31 行,做个简单地换算,将读取的数值转化为电阻值。

编译运行测试

在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/charcontrol/”将源

码 ADC.c 拷贝进去,如下图所示。

bb47dd30f1902ca9754508117d51d9ea.png

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

f4333751b84bfefc20f5ea5adb097e68.png

这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统,具体方法参考 10.3.5 小节。将编译成的可执行文件 open,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序。

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

6888a5ac8079ea62e07537a6e7c56105.png

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

7f6d2adefc6761e7f08d08a8ed50222b.png

滑动变阻器向顺时针旋转,阻值会减小,最小为 0;

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

4a88e49386224490780ff81044769730.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值