搜索
bottom↓
回复: 16

关于单片机制作MP3的一些小问题

[复制链接]

出0入0汤圆

发表于 2011-10-20 12:29:52 | 显示全部楼层 |阅读模式
我用单片机做了一个MP3 CH375读写U盘 VS1003解码 STC12C5A60S2控制命令  
现在已经可以听到歌曲的声音了,但是有几个问题还没解决
1.我用的STC12C5A60S2单片机控制VS1003和CH375 用的是24M的晶振 但是速度还是太慢 音质不是很好 后来我换成了32M但是效果还不如24M的(跟12M的差不多 而且我下载程序的时候竟然显示晶振是12M的 不知道是什么原因?
2.程序的一些问题
我想增加一些功能(上一曲,下一曲,暂停,播放) 不知道怎么修改程序。
例如我想加一个下一曲的功能 本来想用中断的 但是发现中断完成后还是会回到解码程序里面 这样还是会继续解码上一曲的歌曲,不能跳到下一曲(因为解码程序师一个循环)。
3.STC的片子还是比较慢了 大家推荐几款速度比较快的片子(DIP40封装的)。

谢谢了。

出0入0汤圆

 楼主| 发表于 2011-10-22 21:11:18 | 显示全部楼层
我用单片机做了一个MP3 CH375读写U盘 VS1003解码 STC12C5A60S2控制命令   
现在已经可以听到歌曲的声音了,但是有几个问题还没解决  
1.我用的STC12C5A60S2单片机控制VS1003和CH375 用的是24M的晶振 但是速度还是太慢 音质不是很好 后来我换成了32M但是效果还不如24M的(跟12M的差不多 而且我下载程序的时候竟然显示晶振是12M的 不知道是什么原因?
2.程序的一些问题
我想增加一些功能(上一曲,下一曲,暂停,播放) 不知道怎么修改程序。
例如我想加一个下一曲的功能 本来想用中断的 但是发现中断完成后还是会回到解码程序里面 这样还是会继续解码上一曲的歌曲,不能跳到下一曲(因为解码程序师一个循环)。
3.STC的片子还是比较慢了 大家推荐几款速度比较快的片子(DIP40封装的)。

谢谢了。

出0入0汤圆

发表于 2011-10-23 00:12:22 | 显示全部楼层
其实stc的片子不慢了,8位1T的MCU 都差不多啦,建议你好好优化一下数据传输的算法。在速度要求高的数据处理单元,能用寄存器的,最好用寄存器处理,数据能放在内部ram的尽量放在内部ram,少用xram

出0入0汤圆

 楼主| 发表于 2011-10-26 11:48:35 | 显示全部楼层

出0入4汤圆

发表于 2011-10-26 18:47:18 | 显示全部楼层
你买的24M晶振是倍频晶振,振在12M基波上了!

出0入0汤圆

 楼主| 发表于 2011-10-26 21:34:15 | 显示全部楼层
回复【4楼】yk28981
-----------------------------------------------------------------------

什么意思呢?不懂。

出0入0汤圆

发表于 2011-10-26 22:08:44 | 显示全部楼层
你的单片机不是一直在送数据到VS1003吧,VS1003有一个数据缓冲区(大小是32字节吗?这个忘记了)单片机一次可以送32多字节到VS1003,之后就不能送了,直到VS1003发出中断才能继续,或者查询VS1003相应的管脚。那么可以利用这个功能!比如用的中断送数据到VS1003,你可以在进中断的先查询标志位(这个标志位在控制上一首和下一首的按键中断里面控制),当标志位没有置位的时候继续上次的文件传送,如果置位了则根据标志重新读取新文件再送到VS1003同时将标志位清零。

出0入0汤圆

发表于 2011-10-26 22:59:42 | 显示全部楼层
你买的32M晶振是泛音晶振,起振是有条件的,否则会起振在基频上。下次买时看清楚。
可以肯定的是,32M肯定比24M要快。
你的SPI是硬件驱动还是IO模拟?硬件驱动速度要快些
你的CH375是总线驱动的还是IO模拟的?总线驱动要快些
还有软件的优化
总之,STC的速度还是可以的,关键在于你的思路和设计

出0入0汤圆

发表于 2011-10-27 09:08:02 | 显示全部楼层
用ATMEGA8比较好,公认的

出0入0汤圆

 楼主| 发表于 2011-10-27 12:12:50 | 显示全部楼层
回复【7楼】renpeng009 大鹏集成
-----------------------------------------------------------------------

“32M晶振是泛音晶振,起振是有条件的,否则会起振在基频上”这个我还真不知道,还有CH375是IO模拟的。

出0入0汤圆

发表于 2011-10-27 12:17:10 | 显示全部楼层
正准备搞个MP3呢。个人认为还是软件上的问题,12放128kbps的应该没什么问题的

出0入0汤圆

 楼主| 发表于 2011-10-27 13:02:37 | 显示全部楼层
回复【6楼】s200661524
-----------------------------------------------------------------------

如果是查询VS1003相应的管脚进行数据传送呢 该怎么编写程序 谢谢了。

出0入0汤圆

发表于 2011-10-27 21:59:12 | 显示全部楼层
学习了

出0入0汤圆

发表于 2011-10-28 20:53:53 | 显示全部楼层
vs1003解码MP3数据,你只要把MP3数据送给它,它就能自动识别MP3码率,然后按照这个解码速率进行解码。vs1003有0.5k的数据RAM做为音频数据的缓冲,为了确定数据缓冲区里是否有数据,芯片设定了一个中断脚DREQ,当DREQ变高时,外部可以至少向vs1003发送 32字节的数据,当vs1003收到32字节的数据之后DREQ脚变为低,如果数据缓冲区内再次少于32字节的数据,那么vs1003又将DREQ置为高电平。之前说数据缓冲区是0.5k,这里又说每次送32个数据,vs1003只是设置了一个32byte为标准,你可以当在检测到DREQ脚变高时,往里边一次性发送少于0.5k的字节(这个我没验证,有网友说可以,但是一次送32字节肯定没错,这是官方的说法),然后再去检测DREQ的状态。
所以程序中可以这样写(可以定义#define DREQ P2.0,keyup,keydown分别对应上一首和下一首按键,在中断里面改变)
while(true){
   while(DREQ )
   {
      send_to_vs1003(32);
      //这里可以检查单片机内部缓冲区是否空,如果是则在这里去读SD卡或者U盘上的文件到缓冲区,如果不用内部缓冲区就可以省了这一步,你用的STC12C5A60S2单片机,内部RAM应该够用了吧!
   }
  if(keyup)//上一首按键按下
  {
      keyup=0;
      sd_read_prev();
  }
  if(keydown)//下一首按键按下
  {
      keydown=0;
      sd_read_next();
  }
}
其中send_to_vs1003是从单片机的数据缓冲区读取数据到vs1003,而sd_read_next,sd_read_prev则是从外部存储器(U盘,SD卡)读取下一首(上一首)歌曲数据数据到单片机的内部缓冲区,如果单片机内部没有足够的RAM来做缓冲区(一般大小为一个扇区512字节)则send_to_vs1003可以直接从U盘,SD卡读取到vs1003,而sd_read_prev,sd_read_next则只是打开对应的文件。

修改:特别注意keyup,keydown定义为全局变量,必须加上volatile修饰,否则默认优化级别都可能会出问题,原因你懂的!

出0入0汤圆

 楼主| 发表于 2011-10-29 18:36:46 | 显示全部楼层
回复【13楼】s200661524
-----------------------------------------------------------------------

非常感谢你 我试一下你的思路。

出0入0汤圆

 楼主| 发表于 2011-10-29 18:37:37 | 显示全部楼层
回复【13楼】s200661524
-----------------------------------------------------------------------

你是不是也用51做过MP3啊 你用的什么型号的单片机呀?

出0入0汤圆

发表于 2012-2-19 18:54:27 | 显示全部楼层
回复【15楼】zengwei
-----------------------------------------------------------------------

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

本版积分规则

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

GMT+8, 2024-5-8 08:08

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

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