搜索
bottom↓
回复: 19

PIC分区的第一个帖子 -- 我做的mega8 mp3 player的pic移植(18F458)

[复制链接]

出0入0汤圆

发表于 2007-12-2 20:10:41 | 显示全部楼层 |阅读模式
我玩PIC单片机和AVR单片机是同时开始的,一年半前去上海赛格同时买了些AVR和PIC的片子回来,会来后自己用通用板做了些实验板,到网上找了编程器的制作资料,各种都悉数做了一遍。当时用的是PICC的编译器,写过一些程序后就放下了,接下来基本上都是做AVR的了。之所以当时放弃PIC而选择用AVR是因为一方面PIC的片子贵而且难买,片内资源有限(16系列的8级堆栈,太少了,只适合用汇编写)。另外我最崇拜的老师也不用PIC,也是基于这个原因。 所以PIC就没怎么用。

后来大学里对面宿舍的一个老乡找工作,很巧,去当Microchip的FAE去了。在他的鼓动下(他毕业设计也用PIC做的),我又用起了PIC。那时我又做了另一个开发工具:ICD2 由于条件限制,我只能做只有串口的ICD2了,用起来就是比原装的,USB口的慢一点,其它还好,不过用它来仿真还是不行,太慢了,受不了,还不如自己多打印些调试信息呢。

最近他想多学点东西,要我找些好玩的东西让他做做,于是我就把我以前用mega8做的mp3改成pic版的了。

由于我这边板子基本上都是模块式的了,所以前后花了三天时间做了移植,当然之前要回顾一下,再熟悉以下pic的编程。整个程序用到的片上外设只有IO口和SPI接口,所以首先写了这两个的程序,程序调试时需要串口,不过串口的程序以前写过,所以就直接拿来用了(其实mcc18的库函数都有这些外设的程序)。由于需要用到大的数组,所以按照mcc18的手册学学修改了lkr文件,配合驱动3310LCD做了这个大数组实验。

移植程序花了5个小时,另花了2个小时整理。一开始SD卡一直初始化不成功,偶尔能初始化成功,但是到FAT初始化又挂了。后来发现自己拷的一段程序少了几行,汗啊! 后来把按键程序加上,又出问题了,PORTA口不按我想的做。后来发现又被ADCON1坑了(最早用16F877时有过一次)。接着修改随机播放的程序,由于mcc18只提供rand()函数,其返回值只有0~32767,所以精度不够,我原来的算法只能随即播放256首歌(PS: 现在想起来可以修改程序来达到更多个,但是懒得改了,板子给同学了)。在这里要用到定时器,又出问题了(不过开始没发现是定时器的问题)。最后发现原来是库函数我用的不当,配置定时器1的时候把定时器外部振荡器使能了。唉,对着手册写程序就会出现很多差错阿。

好了,说说这个播放器的功能:
     根以前我做的mega8 mp3 player的功能一样,可以播放任意目录下的歌曲(由于文件夹信息是存放在eeprom中的,18f458只有256字节的eeprom,所以只能播放最先找到的64个文件夹下的歌曲,同样你也可以修改fat.h的宏FIX_DIRECTORY的值为1来取消这个功能,这样歌曲就放在PATH指定的文件夹下),拥有6个按键:播放/暂停 模式 VOL+ VOL- NEXT PREV,模式可以选择单曲循环,全曲循环(默认),随机播放。拥有两个指示灯。这个版本的由于板子上有uart模块,458的空间足够大,所以增加了串口输出信息的东西。

mega8 mp3 player的连接:(最新的程序是最后发的,具体多少楼忘了)
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=694093&bbs_page_no=1&search_mode=1&search_text=wma&bbs_id=9999


说说硬件连接:
    SD和VS1003的连接请参照我做的mega8 mp3 player的硬件图。
   
    SD:
        CS   --  RC0
        SCK  --  RC3   (SCK)
        DO   --  RC4   (MISO)
        DI   --  RC5   (MOSI)

    VS1003:
        XCS   --  RB2
        DREQ  --  RB3
        RESET --  RC1
        XDCS  --  RC2
        SCK   --  RC3   (SCK)
        DO    --  RC4   (MISO)
        DI    --  RC5   (MOSI)

   LED:
        LED1  --  RB1
        LED2  --  RB1
  
   UART:
        (这个不用说了,我就不去翻手册了,呵呵!)

   KEYs:
         MODE       -- RA5
         PLAY/PAUSE -- RA4
         VOL+       -- RA1
         VOL-       -- RA2
         NEXT       -- RA0
         PREV       -- RA3

以上这些管脚,除了串口和SPI口的几根线不可以变其它均可以在程序中人以修改(RB6,RB7不要用)。

来些图片:

串口调试工具的画面

板子(全是用杜邦线接的)




我做的ICD2,样子还不错!




上程序,基本上和那个AVR做的一模一样,c语言就是强大阿,移植方便多了:
(包含mplab的工程文件,和修改过的lkr文件)
点击此处下载ourdev_184647.zip(文件大小:33K)

在此感谢一下我的好朋友,提供芯片的云龙兄 (叶云龙), 还要感谢一下坛子里的 楚天歌 热心网友,俺的这块板就是他送的。
当然还要感谢一下ouravr了。/a>

在此感谢一下我的好朋友,提供芯片的云龙兄 (叶云龙), 还要感谢一下坛子里的 楚天歌 热心网友,俺的这块板就是他送的。
当然还要感谢一下ouravr了。ouravr了。

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

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-12-2 20:25:15 | 显示全部楼层
顶一下~那个ICD2是自己做的麽?有没有制作资料?

出0入0汤圆

 楼主| 发表于 2007-12-2 20:34:01 | 显示全部楼层
是自己做的,当时结合了很多资料做的,现在都忘了。

这个东西网上资料很多的,如果你有18F4550还可以做个usb口的icd2
你看看这个是不是,我没装protel,看不了。
我的做了最简设计,缓冲都没加,不过icd2对目标板的电源还是加了控制了。
其实就是利用232产生13v编成电压,其余的也没什么了。
点击此处下载ourdev_184650.rar(文件大小:10K)

出0入0汤圆

发表于 2007-12-2 20:54:54 | 显示全部楼层
好的~谢谢~

出0入0汤圆

 楼主| 发表于 2007-12-2 21:35:53 | 显示全部楼层
不客气!
友情提醒:串口的ICD2,usb转出来的串口是不可以用的(我试过的不同种类的都不行),我用的是PCMIA转出来的才可以用,那卡花了我200多呢

额外提醒:请注意自己本本的插槽类型,别买错了。

出0入0汤圆

发表于 2007-12-2 23:55:27 | 显示全部楼层
bozai厉害啊,通吃了,啥时候再出一个51版的?

出0入0汤圆

 楼主| 发表于 2007-12-3 00:21:31 | 显示全部楼层
51的话估计速度不够,不过听说有STC系列的,速度快,不过我还没用过。还有就是需要硬件SPI
另外程序还得做较大变化,keil51的数据是大端格式。

我之前在玩 win2kddk (在此要谢谢win2kddk)送我的msp430f1491的时候也移植过一个,那个是16位的,也要做不少修改,因为16位的,那些结构体就会有边界对齐问题。

再弄就用arm了,51太熟了,学不到东西。

出0入0汤圆

发表于 2007-12-3 00:30:29 | 显示全部楼层
对的,bazai 章其波。

16位以上的单片机你这几段程序就要改好多好多啦,就是因为结构体边界问题。

当时我和一个同事一起把你的程序移植到 ARM7 上花了好几天才解决所有问题。

出0入0汤圆

 楼主| 发表于 2007-12-3 00:39:21 | 显示全部楼层
呵呵,是的啊,这些程序都是我一点一点写出来的,当时只是针对8位机的,所以都是按8位机处理数据的规则做的。
我当时把它移到430上就被卡在结构体边界问题上了,不过还好知道问题在那很快也就改完了(不过苦了不懂得程序的人了,当时有个老师带的研究生向我要程序,我直接给他了,结果就是没移植成功,这也是我移植到430的原因)。

再改的话,就要把那些结构体成员全都定义成byte 数组,然后搞一个 get16() write16() get32() write32(), 如果碰到大小端问题再添swap16() swap32()两个函数,这样就算完整了,这样的程序兼容性才更好。

辛苦你了,呵呵!

出0入0汤圆

发表于 2007-12-3 00:51:33 | 显示全部楼层
应该谢谢你的无私奉献才对,哈哈!

出0入0汤圆

 楼主| 发表于 2007-12-3 01:00:58 | 显示全部楼层
呵呵,客气了!
睡觉去啰,明天还得上班呢,8点7分起床,还有最多7小时的觉,还不错!
头像被屏蔽

出0入0汤圆

发表于 2007-12-3 01:12:25 | 显示全部楼层
谢谢bozai的共享。 呵呵,足够资格任PIC版主了 :)  

已经任命为PIC与AVR版块版主。谢谢对我们网站的支持。

出0入0汤圆

发表于 2007-12-3 03:08:55 | 显示全部楼层
恭喜bozai升官,哈哈~

希望bozai版主有空闲的时候介绍介绍在各个平台移植时遇到的麻烦,比如上面提到的结构体、大小端问题,是如何解决的,以及在最初书写程序的时候是否可以采取什么方式避免在移植时遇到这些麻烦。。

出0入0汤圆

 楼主| 发表于 2007-12-3 12:22:54 | 显示全部楼层
啊? 一宿没来都成版主了!
呵呵,armok太抬举我了,相对于坛子里的高手来说,我还是个菜鸟呢。谢谢了!

to【12楼】 avruser:
   谢谢!
   有空写写。

出0入0汤圆

发表于 2007-12-4 11:41:26 | 显示全部楼层
從PIC那邊幹過來,頂一下!

出0入0汤圆

发表于 2007-12-8 08:47:12 | 显示全部楼层
友情提醒:串口的ICD2,usb转出来的串口是不可以用的(我试过的不同种类的都不行),我用的是PCMIA转出来的才可以用,那卡花了我200多呢
看了你的介绍 买了张pcmcia转串口卡 结果发现本本是express插槽  555555   希望大家以后买卡注意这个问题,先看看自己的电脑是什么插槽再买相应的卡.

出0入0汤圆

 楼主| 发表于 2007-12-14 17:33:49 | 显示全部楼层
才注意楼上兄弟的留言,呵呵,不好意思。 我改一下帖子,加入这个提醒。

出0入0汤圆

发表于 2009-8-22 16:00:54 | 显示全部楼层
mark

出0入0汤圆

发表于 2010-1-5 17:40:37 | 显示全部楼层

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-15 21:31

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

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