驱动蜂鸣器的实验,实验参考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、 软件中,要注意计数变量的范围,,可以用多种方法检测芯片引脚输出是否符合预想值。
leawise_816723039 2014-5-4 11:14