电子小制作:有声倒计时装置

来源:互联网 发布:linux无图形系统 编辑:程序博客网 时间:2024/04/29 09:19

 

电子小制作:有声倒计时装置

 

 

功能是:用一个按钮来设定,一个开关来控制总电源。用2节普通5号电池,3V工作。按钮功能是在10分钟以内每按一次加30秒,在10分钟以上每按一次加1分钟。长按加5分钟。如果当前正在播放声音就中断声音。按后发出BEEP的声音。停止按后5秒开始倒计时,每到整分钟时发声播报分钟数,每到半分钟时发出提示BEEP和发出半分钟。计时到0时播放钢琴曲。

 

声音数据保存在SD卡中。不采用文件系统,全都直接采用扇区读写法。采用Stc12LE5A60S2,它有1280字节内存。基本设计是这样的:开2个数组,每个都是512字节,作为播音缓冲区。其它的内存作为一般运行时用途。运行时一个状态机负责产生pwm驱动喇叭进行播放,另一个状态机负责从SD卡中取数据。2者一个是消费者,一个是生产者。在消费者播放完一个数组后,消费者就开始播放第2个数组,而此时生产者就同时负责填充第1个数组,这样循环往复,形成连续连贯播放的效果。


 

整个程序只利用了1个中断。用timer0设定到8K的速度来播放,但每秒的倒计时就需要一个状态机来模拟一个软定时器来完成。

 

另外还需要一个状态机来下发发音任务。内部的SD卡中只记录了0至9每个字的发音,倒计时到了需要发音时,需要根据这个数字来组合多个发音文件顺序播放,也就是说,一次发音事件对应多个发音任务。所以这个发音任务状态机是双驱动的,一方面在main中驱动,让它能完成所有的发音任务,另一方面在倒计时事件中驱动,让它能启动首个发音任务。

 

 

单片机工作频率24M,实测发现可以播放采样是8K的深度是8字节的WAV,也就是64K速率的WAV。再高速率的音频文件播放不了,受限于单片机的处理能力。

 

这样的播放有一个重要的优点:没有模拟量,全是数字量,对功率放大器件的要求低,可以获得很大的音量而不发热。数字向模拟量的转换行为实际上发生在了喇叭的纸盆的惯性运动中。也就是说,DA转换的发生是在系统边界之外。

 

这样的播放有一个重要的缺点:采样时是取得了电压值并记录。播放时是利用这个数值展开脉冲的宽度。也就是说,发声器件的输出功率没变,只是把竖着的面积变成了横着的面积,所以失真难免。高保真就不用期待了,只能达到声音清晰吐字清楚,听者能轻松分辨出每一句。

 

普通的未压缩的WAV文件有文件头,描述了声音的属性。很多网上的文章都介绍了它的各字段的含义。实际使用中发现,文件头的字节数很少,全部拿进来进行播放也不会引发很明显的噪音,所以不必解析这个文件头,只要整体文件按64K速率播放就可以了。实际上,由于8K的采样频率的关系,播放当中有很明显的金属声,是一种高频的叫声,需要用低通进行一次过滤。

 

 









0 0
原创粉丝点击