2013年8月3日 星期六

自製 MP3 播放機

本文在 2013/08/03 16:27 發表於 Yahoo!奇摩部落格
因Yahoo!奇摩部落格將於2013年12月26日終止服務故遷移至此


今天很高興來介紹本實驗室新產品XD
開始之前先說明一下為什麼要做這東西
這是一個被暫停後重開的計畫, 原案是退伍計時器
近三年前的文章 : 2010 年 10 月 4 日
當時的目標是做一個有時間日期並包含退伍日期時數計算的小工具
而這小工具上包含了另一項重要的功能, 就是要能播放 MP3
因為軍中生活是非常無聊的, 但是 MP3 屬於管制品
管制的原因好像只是因為它有儲存資料的能力
好吧, 既然你們怕我複製資料, 我讓卡拔不出來總行了吧?
於是原案的板子上做了個向內的 SD 卡槽XD
也就是若有外殼, 表面是沒有 SD 卡孔的, 要換資料需要整台拆開XD
不過那個計畫失敗了, 主要是欠缺設計電路板的經驗
而且都還沒入門就開 32-bit 的 MCU 板
32-bit 和 8-bit 最大不同大概就是時脈了
撇除些像是對岸 STC 的超高速改造 8051 不看
一般 8-bit MCU 速度通常不快, 20 或 40 MHz 就差不多頂級了
可 32-bit 通常動不動就 50MHz 起跳
這類 MCU 速度很快, 板上的震盪器, 接地和電源舖銅都必須仔細檢視
而當時我就只是把它連起來而已, 加上挑戰板廠極限, 所以怎麼也動不了
這個計畫也隨著我退伍就收起來了



直到今年初, 我收到了一封信件

靠夭 ! 教召耶 !! XD
雖然只是待命, 但這意味著我已經在抽選範圍內了
我又有機會進去那鬼地方算日子了(?)
所以就重開了這計畫, 理由很簡單吧 (路人: 我看你乾脆簽了吧 !)
經過了兩次開板經驗, 看過許多業界板子, 累積了些經驗
這次就不再失敗了, 分開測, 兜起來也會動 !
這張板的原型

這張板就是把上面那堆東西扣除中間的感測器板剩下的全擠上一張板
感測器不一起上板, 因為感測器是很脆弱的
就算是業界老手把那小東西手工烤上去一樣容易壞
那需要很緊密的溫度控制, 沒設備最好買現成的

經過驗證後, 畫線路


然後送廠




本實驗室第九號板 WT-09
當我要找廠商時發現以前聯絡的 mail 不見了
只好再去拍賣找, 結果就看到另一家
價錢砍半, 只要一周就能出廠, 四倍服務啊(?)
還可以選防焊漆顏色, 真是超讚的
現在連板廠都這麼競爭啊, 會不會哪一天個人也能出晶片?XD
藍色板看起來就專業 ! 可能是因為電腦主機板多是選這色所以產生這種幻覺XD

板子架構圖:

有顆音訊 DSP (VS1003), Micro SD 卡槽, 還有 OLED 顯示幕
第一次在 SPI bus 上串這麼多設備
它可以從 SD 卡讀出音樂讓 DSP 去解, 不過目前實測速度不快
因為還要讀取 FAT32, 不過這還有改進空間就是了
D flip-flop 用來 hold 一些狀態控制信號
像是 chip select, data select, ... 等
GPIO 腳是重要資源, 只是拿去用在控制信號太浪費了
所以用這招, 上兩顆正反器, 一顆信號出去給控制信號用
另一顆外接, 拿去當 output 使用, 讓一隻腳可以用兩次

目前生產了兩張

這兩張差別只在右上角的接頭
左邊的外出用, 右邊的開發用
外出用的燒錄介面上 SMD 料, 用 FPC 連接
那個燒錄介面真的蠻擋路的, 這是組裝了一些板的心得
所以就用 co-layout 方式二選一
然後做一張轉板轉回一般燒錄介面

板上貼一張紅色小板, 那是把鋰電池升壓的電源板
本來那裡的空位是要來畫紀錄表格
這板子上有許多 co-layout, 希望做個注記
後來發現畫表格挺麻煩的最後就沒畫了XD
結果那空位剛好可以黏上電源板, 這是一開始沒想到的XD

接著測試

從 SD 卡讀取資料, 讀取 FAT32 檔案系統, 只要檔案用讀卡機丟進 SD 卡即可
讀出檔案後資料連續的塞給 VS1003 去解
目前連續播放數個小時了, 能用 !
板上右上角為 co-layout 注記, 最後就擠到那邊, 用兩行文字而已XD

這張板還是有點小缺陷
由於驗證時拿的板是 VS1053, 可是上料是上 VS1003, 這兩顆並沒有 pin 相容
雖然很接近, 但是 GPIO 有些不同, NC 腳有一隻變成接地
於是就搞壞一顆 VS1003 了XD
所以最後解法是上料前先把 pin35 ㄠ斷, 然後 pin34 附近割斷銅箔
這是目前抓到的硬體 bug
軟體方面缺陷則是播放 bitrate 低, 目前 MP3 必須壓在 100kbps 左右
不是 VS1003 的限制, 而是 AVR 的限制
選用 Atmega32L, 以 3.3V 運作, 時脈只能 8MHz, SPI 最快 4MHz
理論上是 4Mbps, 但是要讀 FAT32, 結果最後只剩 100kbps
這是可以改進的, 因為我要看讀的 block 在哪
上圖 BLK=00705F70 那行會不斷印出當前讀的 block
由於 OLED, SD, VS1003 都共用一條 SPI, 取出文字圖然後印出也是要時間
加上 FAT32 找 cluster 每次都去 FAT 查詢, 每查一次都要讀一個 block
所以就慢下來了, 這是可以軟體改進的, 不過能不能改到 1Mbps 以上就不知道了
能改到 1Mbps 才有上 VS1053 的價值, VS1053 多了無損格式支援
但無損格式串流量大, 若沒有能力讀, 上了也只是浪費

這張板目前錄音部份都沒上料, 錄音部份扯到 FAT32 寫入, 那很麻煩
讀取效率都沒解決, 寫入就更不用說了, 先丟著了

這裡放出這板修正後的電路圖
wt09-fix.pdf

這是集以前計畫成果而成的產品
相關技術都有以前文章可參考
以前文章列表 :

讀取 SD 記憶卡

用 VS1003 播放 MP3

用 AVR 控制 OLED (LY096YB-128064 黃藍雙色)

讀取 FAT32 檔案系統

如果需要做外殼還有這篇XD :

用水晶膠 (環氧樹脂) 製作模型


這張板有生產一片只上一半料的, 拿去控制鏡頭用


外殼:

細節等功能完整後再寫

最後, 面對學長(?)

和第一片比, 第一片的線真是亂七八糟
明明是手工拉的卻活像自動繞線XD

貼完這篇就出門抗議去(?), 為了國軍 ! XD


更新:MP3 已可解 320kbps, SD 卡讀取更新, 並提供源碼
請參考新文章:自製退伍計時器

沒有留言:

張貼留言

注意:只有此網誌的成員可以留言。