找回密码
 注册
关于网站域名变更的通知
查看: 336|回复: 1
打印 上一主题 下一主题

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

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2021-3-9 15:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
17.3  字符类 Buzzer  蜂鸣器6 t9 k4 u8 a$ l# _
和 led 灯类似,蜂鸣器的设备节点也是在/dev 目录下,如下图所示。% q8 ?6 n! Q0 F+ N- ?+ ^
9 B# A' |0 o9 p+ o6 A" Q' D
蜂鸣器的硬件和 led 灯类似,如下图所示。
7 l( r- m9 e4 F, u( w4 b1 O
0 o% u- n+ {3 M: B7 w% [/ D$ l如上图所示。8 q% A% R& L6 |" e# P
原理图很容易理解,如果网络 MOTOR_PWM 为高电平,则 L9014 导通,蜂鸣器响,如果网络MOTOR_PWM 为低电平,则 L9014 截止,蜂鸣器则不响。
0 l: [$ \+ K% T操作方式和 led 小灯类似。
' O& E1 I$ y& ^* I- y蜂鸣器测试例程
& C$ l; Z  [# |0 `& j编写简单的 buzzertest.c 文件测试蜂鸣器。
$ X5 J& n6 k& j0 a& U4 a首先添加头文件,如下图所示,下面新加了几个库文件,一般常用的就是下面几个,写代码的时候,
* [2 w/ j# r1 f; M, G# y8 l为了方便,可以直接都添加上。
$ ?- D7 z( q" F# V- B$ A9 v1 r2 X) x5 A" ?& q; i4 G8 X1 ^
然后 main 函数如下图所示。( d0 Z' C' f9 K, r& f; c/ f) x7 f/ L

2 a# u4 [/ `5 i4 F: s如上图代码所示。由于只有一个 IO,底层没有做第三个参数的判断,所以无效
- I* U) t$ ]% u9 x第 16-19 行,对参数 argv[1]有个简单的判断,命令只能是 0 或者 1。
# l# L5 r1 w- ]* m3 V! s第 21-24 行,open 函数打开蜂鸣器设备节点
9 P0 W: E/ F8 `9 ^3 L# M; }第 26 行,使用 ioctl 函数操作蜂鸣器。  `5 S2 F; _; Z$ u% W/ Z) F! u
第 27 行,使用 close 函数关闭设备节点。1 ?0 R$ A; m! H& C1 c
编译运行测试
; P3 |; k" g! j& r9 OUbuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystEMCode/charcontrol”,将源码 buzzertest.c 拷贝进去,如下图所示。
6 b5 J! M+ y  |! @. e* O% ~( Y7 d
- J3 P7 c3 x4 I* w: i3 Q使用命令“ARM-none-linux-gnueabi-gcc -o buzzertest buzzertest.c -static”编译buzzertest 文件,如下图所示,使用命令“ls”可以看到生成了 buzzertest 可执行文件。
9 R, ^) N7 I" P; q1 U7 z2 C) e) {
  Y% R$ R9 A5 I这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统。- Z) A' F9 `/ P7 N9 C( n: f
将编译成的可执行文件 buzzertest,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘, 运行程序如下。" e( Q. K, Z) {! |
使用参数 1 和 0,蜂鸣器会响。第二个参数实际上并不起作用。
- p+ g. k: o6 N8 I7 d1 n3 q- G5 ?- t
, r- u5 Y8 }) o. A如下图所示,使用参数 0 和 0,蜂鸣器会停止响。. V! w7 u: l/ s) @; o/ Z/ V

& q6 N4 e! L# |/ x17.4  字符类 ADC  模数转换
) V& u4 z; m7 l# s5 ^和 led 灯类似,数模转换的设备节点也是在/dev 目录下,如下图所示。
8 w& R1 x& @2 W' i* F+ n4 g) F9 A. X) V! T0 j' ?
模数转换的硬件部分如下图所示。
3 r: S* l& E( b+ c" t  D- |5 K+ A& R; B' B$ A! J0 U$ L" b. ~/ V
如上图所示。# n+ \3 O2 w9 k9 m
XadcAIN0 网络可以读取到当前输入电压,滑动变阻器 R 移动的时候,1 和 2 之间的电阻 R12 改变,滑动变阻器最大电阻为 R13,然后电压 Vadc=R12*VDD1V8_EXT/R134 U9 H+ z- D0 L* F
上面公式中 Vadc 可以通过 4412 读取出来,VDD1V8 和 R13 已知,那么就很容易求出 R12 的电阻。如下图所示,在 4412datasheet 中 ADC 章节中有真实的电阻和电压曲线图。4 ?% H3 v" g) ]* o3 ?+ T( C

0 \( G4 ~0 [' j5 }! T5 m/ d* n这里将数值做一个简单的换算,/ V* z( y  g2 g
1.8V 对应的是 10K 欧姆,对应的寄存器数值为 0xfff;5 _5 |4 e8 n1 s5 {  X9 c; S, Y
0V 对应的是 0 欧姆,对应的寄存器数值为 0x0。* J" S% n% `/ M3 L* H& q5 q
这样做一个简单公式,将读取的数值 r 转化为电阻值 R。5 o! [' b: @! M  i+ B
R = r*10000/0xfff,即 R = r*10000/4095。! R8 N: v; \! z" }2 O" b2 b+ ?
这个小公式在后面的代码中将会使用到。1 L, E+ |# P- u
模数转换例程1 v8 _; J9 n& l1 l
编写简单的 ADC.c 文件测试 adc 的驱动。首先添加头文件,如下图所示。
/ u# W" H, }( z$ {, q) T# E5 C
4 Y% f/ L5 |$ {! E3 N) A0 [) U& D然后 main 函数如下图所示。
( Y/ p3 f6 F9 p- G, `0 a1 y; @& a$ `# P1 X# I
如上图代码所示。
" K! @* x( C$ [5 I! i第 14 行,设备节点为 char *adc = "/dev/adc"。# m' v1 l+ Y2 p! a- K
第 21 行,打开设备节点文件。
& D, K8 F  P7 @4 h% L$ e$ l% L第 26 行,使用 read 函数,将读取数字赋予 buffer。
' ~! R: v+ C3 b  [第 30 和 31 行,做个简单地换算,将读取的数值转化为电阻值。
4 [! N1 J! M+ U+ m编译运行测试  ~1 D3 i) G" q) r; B7 [& I
在 Ubuntu 系统下,如下图所示,进入前面实验创建的目录“/home/linuxsystemcode/charcontrol/”将源
: n! q' ]4 t9 [& o码 ADC.c 拷贝进去,如下图所示。
$ @" H# I; [3 c% e8 S9 b5 U$ s4 l  D/ N8 T7 r
使用命令“arm-none-linux-gnueabi-gcc -o ADC ADC.c -static”编译 ADC 文件,如下图所示,使用命令“ls”可以看到生成了 ADC 可执行文件。
6 W2 _5 C# s6 v' Y2 e5 p5 B& W0 Q/ v/ Q9 B
这里介绍 U 盘拷贝代码的方法,也可以编译进文件系统,具体方法参考 10.3.5 小节。将编译成的可执行文件 open,拷贝到 U 盘,启动开发板,插入 U 盘,加载 U 盘,运行程序。
# R- A# b8 G$ W3 }. @( l如下图所示,使用命令“./mnt/udisk/ADC”即可检测当前电阻值,中间的大段打印参数是多次打印寄存器的数值,在驱动实验中再去介绍。
3 \/ m- u6 a+ j
2 w. ?1 B. @4 i& @: c, f5 m调整滑动电阻器之后,再次使用测试程序,如下图所示,输出数值会有变化。
" M5 a0 S. g7 N( p7 A/ q
  h" E& e- o+ ~6 P1 l, B6 [滑动变阻器向顺时针旋转,阻值会减小,最小为 0;+ P# D' E. H+ n, M8 o3 a7 A
滑动变阻器向逆时针旋转,阻值会增大,最大为 10K。3 ~3 F' z9 E/ y9 A. O; N
1 _  D7 U1 ]; ~: k9 M
5 f; I0 F' A/ S; C

该用户从未签到

2#
发表于 2021-3-10 10:18 | 只看该作者
                                            
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-11-24 16:09 , Processed in 0.187500 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表