搜索
bottom↓
回复: 30

有一个想法,用avr单片机驱动TDA1543播放sd卡里的wav文件,不知道能不能实现。

[复制链接]

出0入0汤圆

发表于 2011-5-7 18:01:35 | 显示全部楼层 |阅读模式
我试了一下,mega16L可以超频到24M,如果是44kKHz,16bit立体声的话,每544个时钟周期内必须操作TDA1543处理一次左右声道的数据,并从SD卡读入4byte。应该能来得及吧。

阿莫论坛20周年了!感谢大家的支持与爱护!!

月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!

出0入0汤圆

 楼主| 发表于 2011-5-7 18:51:12 | 显示全部楼层
简单连了一下电路,开始写TDA1543的程序

(原文件名:图像031.jpg)

出0入0汤圆

发表于 2011-5-7 20:48:23 | 显示全部楼层
关注。。。

出0入0汤圆

发表于 2011-5-7 22:46:14 | 显示全部楼层
关注一下。不过在我看来,没有DMA搞音频流应用相当有难度
楼主折腾STM32吧,我在弄STM32F103VC,还没有调通I2S的DMA,有点头大……

出0入0汤圆

发表于 2011-5-7 23:25:35 | 显示全部楼层
试过8位的,一般吧。

出0入0汤圆

发表于 2011-5-7 23:26:36 | 显示全部楼层
试过8位的,一般吧。

出0入0汤圆

 楼主| 发表于 2011-5-9 14:41:49 | 显示全部楼层
程序写完了,发现操作TDA1543处理一次左右声道的数据居然要700多个时钟周期。看来还得好好优化一下程序。

出0入0汤圆

发表于 2011-5-11 09:13:40 | 显示全部楼层
回复【6楼】haihuawu  
-----------------------------------------------------------------------
我有过同样的想法,不过有太多因素没办法去实现,理论上是可以的,当然要充分发挥AVR的硬件功能,读SD和驱动TDA1543都可以用硬件完成,像M48这样的单片机可以实现硬件IIS

出0入0汤圆

发表于 2011-5-11 09:18:54 | 显示全部楼层
我觉得用AVR做的话最大的困难是内存太小

出0入0汤圆

发表于 2011-5-11 13:09:54 | 显示全部楼层
我用STM8S103K3 + CH376T + EPM240  + AD1896 + AD1955 * 2 做了个播放双声道44.1KHz 16位 WAV文件的播放器,CH376T用来读取U盘WAV文件,STM8S103K3 管理文件并以中断方式通过8位IO向EPM240传送WAV数据,EPM240外接16.9344MHz晶振用于将音频数据生成I2S信号,AD1896用于升频和I2S重采样,每个声道一片AD1955解码,声音效果是十分地好。
但存在一个问题是STM8S103K3的SPI速度不够,STM8S103K3我用了24M晶振,但SPI速度只能到8M左右,因此U盘拷贝WAV文件后要做一次碎片整理,否则在播放音乐时有些地方有破音。

我的建议是不要用AVR来做,可以选速度再快一些的芯片来做,我正准备换用STM32F105或S3C44B0X来做,还自带I2S输出,为了保证时钟精准,可以用从模式的I2S,I2S的时钟由外部高稳定的TCXO晶振来产生。

出0入0汤圆

发表于 2011-5-11 14:17:24 | 显示全部楼层
回复【9楼】hzyjq  -----------------------------------------------------------------------
我觉得用AVR做,特别是用较低价位的M8/48/88这样的芯片来做是在挑战AVR的极限,是一种乐趣。
你说的爆音是文件系统没做好,做好了就不会爆了,不用进行碎片整理。

出0入0汤圆

 楼主| 发表于 2011-5-11 22:19:39 | 显示全部楼层
tda1543的程序写出来了,我把C语言和编译出来的汇编代码反复比对,不断优化,终于读写一次TDA1543只要310个时钟周期了。
不过现在我又卡在SD卡这块了,SD卡怎么都调试不通。
现在的电路图,加了一个SD卡和U转串。

(原文件名:图像030.jpg)

出0入0汤圆

发表于 2011-5-11 23:05:13 | 显示全部楼层
\回复【9楼】hzyjq
我用stm8s103k3 + ch376t + epm240  + ad1896 + ad1955 * 2 做了个播放双声道44.1khz 16位 wav文件的播放器,ch376t用来读取u盘wav文件,stm8s103k3 管理文件并以中断方式通过8位io向epm240传送wav数据,epm240外接16.9344mhz晶振用于将音频数据生成i2s信号,ad1896用于升频和i2s重采样,每个声道一片ad1955解码,声音效果是十分地好。
但存在一个问题是stm8s103k3的spi速度不够,stm8s103k3我用了24m晶振,但spi速度只能到8m左右,因此u盘拷贝wav文件后要做一次碎片整理,否则在播放音乐时有些地方有破音。
我的建议是不要用avr来做,可以选速度再快一些的芯片来做,我正准备换用stm32f105或s3c44b0x来做,还自带i2s输出,为了保证时钟精准,可以用......
-----------------------------------------------------------------------

播放16bit, 44.1KHz wav, 只要保证读wav文件速度在大于176.4KB/S就行了, SPI时钟8MHz, 完全够的. 可能是SPI速度跟不上, 可能是文件系统没做好, 也可能是送数据到epm240有断流吧.

BTW: 有epm240做I2S的资料吗?

出0入0汤圆

发表于 2011-5-11 23:06:38 | 显示全部楼层
回复【3楼】mowin 雾湾
关注一下。不过在我看来,没有dma搞音频流应用相当有难度
楼主折腾stm32吧,我在弄stm32f103vc,还没有调通i2s的dma,有点头大……
-----------------------------------------------------------------------

stm32的I2S可以用中断方式发送, 不过做24bit 音频就得用DMA方式, 否则噪声啊~~~.

出0入0汤圆

发表于 2011-5-11 23:16:39 | 显示全部楼层
突然想想9楼的方法其实不错,碎片整理后会大大减轻文件系统的压力

出0入0汤圆

发表于 2011-5-12 23:27:45 | 显示全部楼层
回复【12楼】cheungman
-----------------------------------------------------------------------

CH376T是自带文件管理的支持FAT16和FAT32,但对win7格式化出来的FAT32兼容性不好,不认WIN7格的U盘,可能是它本身对U盘读写有快有慢(当扇区跳跃比较大的时候),我采用了双缓冲但限于STM8S103只有1K ram 只用了2个256字节的缓冲,在速度慢时可能会引起缓冲用尽,造成破音。

EPM240实现I2S是自已写的VHDL代码,只要看懂I2S时序图,I2S还是比较容易实现的。用EPM240实现I2S主要考虑这样可以把I2S的时钟稳定性做得更好,必竟象STM32f105等有I2S的芯片在主模式下,PLL和分频器的时钟抖动和误差还是挺大的。

STM8S103的中断响应是比较慢的,但采用8位传送数据速度是足够的,因为对于16位44.1Khz双声道数据的传送频率只有176.4Khz.

采用STM32F105这类的芯片还有一个考虑,是因为看到坛里已经有兄弟做出的ape解码的程序了,所以想是否能努力一把实现APE的播放,那就完美了。

出0入0汤圆

发表于 2011-5-14 15:58:19 | 显示全部楼层
回复【12楼】cheungman
\回复【9楼】hzyjq  
我用stm8s103k3 + ch376t + epm240  + ad1896 + ad1955 * 2 做了个播放双声道44.1khz 16位 wav文件的播放器,ch376t用来读取u盘wav文件,stm8s103k3 管理文件并以中断方式通过8位io向epm240传送wav数据,epm240外接16.9344mhz晶振用于将音频数据生成i2s信号,ad1896用于升频和i2s重采样,每个声道一片ad1955解码,声音效果是十分地好。  
但存在一个问题是stm8s103k3的spi速度不够,stm8s103k3我用了24m晶振,但spi速度只能到8m左右,因此u盘拷贝wav文件后要做一次碎片整理,否则在播放音乐时有些地方有破音。  
我的建议是不要用avr来做,可以选速度再快一些的芯片来做,我正准备换用stm32f105或s3c44b0x来做,还自带i......
-----------------------------------------------------------------------
简单的问题复杂了,搞一片带USB HOST , I2S的32位芯片,就都搞定了。

我用LPC1768从U盘读取 24bit/96kHz的WAV文件进行播放,相当流畅,无爆音。就算从U盘解码320kbps 的 MP3也相当流畅。
如果用SD卡,速度还会更快,因为这个片子的USB是12Mbps的, 24bit/96kHz的WAV文件数据流比较大。

出0入0汤圆

发表于 2011-5-17 00:03:29 | 显示全部楼层
回复【楼主位】haihuawu
-----------------------------------------------------------------------

-----------------------------------------------------------------------
我有同样的想法,用双核,理论上是可以的。
mega16L只有1K的RAM基本上不能满足。我在测试SD速度时发现它在响应读命令时有一个延时,所以须用大RAM单片机。
我现在测试PIC18F67J11+M8,读STM32F101R8读SD和M8/M48这样的单片机可以实现硬件IIS驱动TDA1543.另一方案STM32F101R8+M8.

出0入0汤圆

发表于 2011-5-17 00:27:11 | 显示全部楼层
TO【9楼】  【14楼】
在播放音乐时有些地方有破音
-----------------------------------------------------------------------
SD卡的簇大小设置为最大如64K,也可以减少破音

出0入0汤圆

发表于 2011-6-8 09:22:48 | 显示全部楼层
留个爪印先!!

出0入0汤圆

发表于 2011-6-8 10:22:04 | 显示全部楼层
曾经玩了一下NXP和Luminary的SPI模块模拟I2S
http://www.ourdev.cn/bbs/bbs_content.jsp?bbs_sn=4281292&bbs_page_no=1&search_mode=1&search_text=I2S&bbs_id=9999

出0入0汤圆

发表于 2011-6-13 21:29:34 | 显示全部楼层
很不错,支持

出0入0汤圆

发表于 2011-10-28 12:36:58 | 显示全部楼层
回复【楼主位】haihuawu
-----------------------------------------------------------------------

不知道楼主弄的怎么样了,想和你交流一下,能否留个QQ

出0入0汤圆

发表于 2011-10-28 15:57:54 | 显示全部楼层
mk

出0入0汤圆

 楼主| 发表于 2011-12-12 03:53:56 | 显示全部楼层
回复【23楼】tongxing
---------------------------------------------------------------------

楼主毕业,修机器去了。这个东西怕要不了了之了。

出0入0汤圆

发表于 2012-2-27 16:05:20 | 显示全部楼层
回复【8楼】hsztc
-----------------------------------------------------------------------

楼主EPM240 是什么东西来的
我最近在搞,汉字语音播放模块,
用的也是stm8s103,

出0入0汤圆

发表于 2012-4-16 11:19:14 | 显示全部楼层
STM32F103的软件解码MP3到底如何?

出0入0汤圆

发表于 2013-7-30 15:29:24 | 显示全部楼层
hzyjq 发表于 2011-5-12 23:27
回复【12楼】cheungman
-----------------------------------------------------------------------

如何进行“EPM240实现I2S”,恳请详细告知。
先谢谢了!
chujidashi@163.com

出0入0汤圆

发表于 2013-8-9 21:19:37 | 显示全部楼层
本帖最后由 hzyjq 于 2013-8-9 21:20 编辑

其实很容易的,你看一下I2S的时序就明白了,音频数据用SPI从模式输出,EPM240产生SPI时钟、I2S主时钟,I2S LR信号(对比I2S时序注意一下LR信号切换的位置就可以了),我用VHDL写没有多少行的,花的资源也不多。
我现在用的是STM32F105来做的WAV播放器,效果很好。

出0入0汤圆

发表于 2013-8-9 22:49:59 来自手机 | 显示全部楼层
hzyjq 发表于 2013-8-9 21:19
其实很容易的,你看一下I2S的时序就明白了,音频数据用SPI从模式输出,EPM240产生SPI时钟、I2S主时钟,I2S  ...

我记得我以前用avr做的时候是用spi加一个计数器作LR信号,计数器就是avr内部的一个定时计数器,具体忘了,太久没碰这个了
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-4-26 11:37

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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