打印

在21IC DIY上实现USB音频输出设备(LCD显示音频频谱)

[复制链接]
5315|12
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
computer00|  楼主 | 2009-5-14 15:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
代码包(keil RV版):https://bbs.21ic.com/upfiles/img/20095/2009514155014238.rar
代码包(keil CARM版):https://bbs.21ic.com/upfiles/img/20095/2009514155127665.rar
(同样是Thumb模式,RV编译的代码比CARM的大了约一倍,我晕……)

    本程序包在AT91SARM7S64上实现USB音频频谱显示的功能。
硬件平台为21IC DIY U盘板+LCD模块。将程序烧入到实验板
中,并连接好LCD,运行程序,在控制面板的“声音和音频设备”
中找到音频标签,然后将“声音播放”的“默认设备”选择为
“电脑圈圈做的USB声卡”。然后播放一个音频文件,将在LCD
上实时显示频谱。此时LED3应该亮起,并且电脑的声卡不再输出
声音,如果不对,应该关掉播放器,然后重新启动播放器,即可
将数据定向到USB声卡中。

    注意:当LED3亮起时,表示USB声卡不能拔下(按开发板上
的复位也不行,因为复位时会自动拔下),否则可能会导致电脑
死机!要拔下声卡时,应该将声音播放设备设置回原来的声卡,
并关闭播放器。等LED3灭后才能拔下。

    过段时间看能不能把输出的数据弄到PWM上去,这样就可以
做真正的声卡了~~~~

                                圈圈  2009-05-14  14:45

相关帖子

沙发
wangkj| | 2009-5-14 16:05 | 只看该作者

沙发先抢。

使用特权

评论回复
板凳
zhousd| | 2009-5-14 16:34 | 只看该作者

00还是算吧,别浪费精力用PWM发声了,

晶振是16M的atmea64仅能播8位的PWM声,且滤波器的截止频率只能做到1K左右。如果要用PWM做8位的FM音质,MCU时钟最少也要160M以上。

建议用R-2R电阻做兼价DA转换。

使用特权

评论回复
地板
xwj| | 2009-5-14 16:39 | 只看该作者

R-2R电阻网络也不行

这个只适用于分辨率较低的场合,否则2*16位就需要32个输出口了,就算用锁存器来扩展IO,也会很占体积

最好还是用IIS的音频DAC,用SPI  +  一个IO 即可操作,当然选用带IIS接口的CPU那就更好了

使用特权

评论回复
5
古道热肠| | 2009-5-14 16:43 | 只看该作者

哈哈,圈圈又出新成果,好,鼓掌

最近测试和体验过LPC2148做的USB声卡,音质还可以的,是用的LPC2148的DA,俺们的开发板也可以外接个DA芯片,最好是双路的.这样就能当真声卡用了.
还有一法,用AT91SAM7S64的I2S总线外扩一芯片完成DA和AD变换.这个效果会好很多的.

使用特权

评论回复
6
古道热肠| | 2009-5-14 16:49 | 只看该作者

是否可以把VS1003B音乐模块做输出,完成真正的声卡功能呢?

俺觉得理论上是可行了.

使用特权

评论回复
7
lifufeng| | 2009-5-14 18:19 | 只看该作者

~

哈,你们几个的签名......百鸟争鸣啊~~~~~

使用特权

评论回复
8
computer00|  楼主 | 2009-5-14 19:18 | 只看该作者

用MP3模块也是可以的,有点麻烦就要自己构造一个文件头,

并且一定时候之后就要重新发送这个文件头,因为VS1003B是直接读取文件播放的。可以将文件设置成4G那么大...就可以播放很久了。

这个芯片的ISO端点最大长度只有64字节,因此直接搞44.1K的16位双声道是不够的。除非使用MPEG压缩,然后再利用MP3模块解压缩...同样也要构造一个文件头。

现在这个程序做的是32KHz采样,16位的单声道,刚好是64K字节每秒,已经达到最大数据率了。

这个芯片本身带了IIS接口,不用模拟了,接上一个IIS接口的DAC即可,但是不压缩的话,也就只能弄个32KHz,16位的单声道声卡....

用PWM,也仅是搞来玩玩而已,能出声音,演示下就行,嘿嘿,并不追求什么音质。

等弄完PWM的,再研究下MP3模块的吧,弄个WAV文件头进去,然后把数据扔到MP3模块里,看它能不能响了~~~

使用特权

评论回复
9
zhousd| | 2009-5-14 22:34 | 只看该作者

44.1K的8位PCM双声道用8位机的M64的PWM就能实现,

有1K多的截止频率,放语音已足够,还是很清晰的。

若果把SD卡100多K位的读写再提高一点点,做成16位双声道完全没有问题(可以截成8位,或10位或12位),用R-2R做兼价DAC,对于非音响发烧友足够了。

再压缩一下代码,把写SD卡的写代码去掉,用M16也能装下。

看来00还得向信号高保真方向构思才有得跟8位机PK啊!

使用特权

评论回复
10
computer00|  楼主 | 2009-5-15 02:03 | 只看该作者

哈哈,用8位PWM已经出声音了~~~~

用的分辨率为8bit PWM输出的,因此PWM周期为188KHz,用的音频采样频率为22KHz。
直接将耳机接到IO口已经出声了(能听出音乐来),虽然效果很差,哈哈~~~~~后面再接上一个二极管,
加个LC滤波器,效果应该会稍微好点吧...现在用的单声道的,如果用8bit数据,22kHz采样的话,
做成双声道也是够的,这样的数据流量只有44kB/s,还可以做成32kHz采样的,达到最大值64kB/s。

使用特权

评论回复
11
古道热肠| | 2009-5-15 11:09 | 只看该作者

以前用过的文曲星PC505,发音部件不只用的啥

拆开看过,一个黑巴巴,芯片软封装.但俺知道它的MCU是6502核,发出的声音一听就是电脑音,不是真人发音,但也蛮有趣的.
还有小孩的玩具,能唱歌的很多估计都是用PWM生成.

使用特权

评论回复
12
zhousd| | 2009-5-15 11:24 | 只看该作者

AT7S64理论上的水平也只能做3K多的频率,

晶振55M(AT7S64)/晶振16M(M64)=3。43 

如果不介意功放会输出188K的调制声(无形噪音幅射),大可把滤波器的频率提高几倍。

使用特权

评论回复
13
computer00|  楼主 | 2009-5-15 15:08 | 只看该作者

嘿嘿,能出声的USB声卡已经做好拉,哈哈~~~PWM做的,效果挺

声音还不错的说,虽然只有8bit的PWM,两个RC滤波器而已...用示波器看了,1KHz的正弦波很好。

详细请看:https://bbs.21ic.com/club/bbs/list.asp?boardid=62&page=1&t=3332653&tp=%u572821IC%20DIY%u4E0A%u5B9E%u73B0%u7684USB%u58F0%u5361%uFF08%u901A%u8FC7PWM%u8F93%u51FA%u58F0%u97F3%uFF09

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

246

主题

14682

帖子

206

粉丝