原创 [博客大赛]CPLD入门笔记2----驱动蜂鸣器

2014-4-29 14:29 1942 12 13 分类: FPGA/CPLD 文集: CPLD入门笔记

驱动蜂鸣器的实验,实验参考EDN网站的akuei2的SOS的思想,利用蜂鸣器鸣叫不同时间模拟SOS,但遇到的问题。

 

一开始程序写好后,下载到板子上,蜂鸣器几乎没有声音输出,或者说很小的声音间隔输出。原认为是驱动时间的原因,就加长了驱动的时间,发现周期加至24S,short音段至1000ms,long音段至5000ms,invertal音段至200ms,仍然没有声音输出,声音反而比原来还要小,时间无论加长还是缩短,均不能发出满意的声音,测量蜂鸣器两端电压也正常。想了想,好像最开始的声音是最响的,突然想到,蜂鸣器会不会是无源的(无源蜂鸣器要求一定的脉冲频率,大概2KHz左右,才能驱动它,有源蜂鸣器加上电就可响),拆下来果然是无源的,换上有源蜂鸣器后,仍然不响,以为是驱动时间问题,便将引脚输出赋值给LED,发现LED基本按照程序变化。说明蜂鸣器出问题,便又查蜂鸣器端电压,引脚有电压,蜂鸣器就是没声音,换了个蜂鸣器,便“滴滴”鸣叫。晕,蜂鸣器竟然还有坏的。

 

这下听到了声音,但是声音不对,不是那种SOS的“滴滴滴,滴~滴~滴~,滴滴滴”,而是“滴滴滴,滴~滴~滴~,滴滴”,用LED看闪烁,发现也是这种现象。怎么也没有发现问题,以为是定义值,case(i)

 

定义错误,无论改变变量值,还是减少case语句,都不能显示出来。用示波器看也是少一个脉冲,重新找程序错误,发现定义变量a时这样定义的:reg[3:0] a;

 

     计算了下,当a计数满值时为:1111,换算为十进制为15,而最后一个脉冲要求计数值为:17,这样a计数不到17,便少一个脉冲,重新定义变量reg[4:0] a;这样a计数满值时为11111,为31,大于17,。这样用示波器就看到了9个脉冲,LED显示和蜂鸣器响也正常了。

 

总结几个小问题:

1、          硬件要保证没有问题,再去考虑软件的事。

2、          软件中,要注意计数变量的范围,,可以用多种方法检测芯片引脚输出是否符合预想值。

 

777777777777777.jpg
 
88888888888888888.jpg
PARTNER CONTENT

文章评论1条评论)

登录后参与讨论

leawise_816723039 2014-5-4 11:14

学习了大哥!
相关推荐阅读
用户1670771 2014-04-29 14:32
[博客大赛]CPLD入门笔记1----点亮LED
今天看了CPLD的教程,发现可编程芯片几乎都是以点亮LED作为最开始的入门实验,无论51单片机、STM8单片机、STM32单片机亦或是其他的芯片,感觉都是在控制它的引脚的电平,主要是了解如何让指定...
用户1670771 2014-04-29 14:30
[博客大赛]CPLD入门笔记----初叩Verilog的大门
初次接触CPLD,初次接触Verilog,记录下自己学习的痕迹。 刚开始接触CPLD,曾听说CPLD/FPGA属于硬件层的可编程芯片,而Verilog属于硬件描述语言,其它便不知道了,感觉无从...
用户1670771 2014-04-29 14:29
[博客大赛]CPLD入门笔记3----串口的发送与接收
这两天写了个串口发送的程序,串口发送与接收,在单片机看来,很简单,也许调用几条语句,就能实现所需要的功能,而CPLD实现起来,便应当了解到具体数据的传输操作。类似大多数传输协议,串口也有自己的传输...
用户1670771 2014-04-23 14:47
Verilog中case结构不能调用例化模块,但可以应用task或者function,task及其应用
任务就是一段封装在“task-endtask”之间的程序。任务是通过调用来执行的,而且只有 在调用时才执行,如果定义了任务,但是在整个过程中都没有调用它,那么这个任务是不会 执行的。调用某个任...
用户1670771 2014-04-16 17:33
对轨对轨芯片的一点理解
    今天抄一块20mW激光器的板,板上有一个运放AD8552,查看参数时,发现这么一点“rail to rail”,查看了别的芯片,有的没有这个参数,“轨对轨”,便在网上搜了资料,同时在板上给...
我要评论
1
12
×
广告
关闭 站长推荐上一条 /3 下一条