これは、小型で携帯できる電池駆動のオーディオレコーダーを自作しようと思い立ち、完成するまでの過程の記録です。記録媒体は低消費電力、着脱可能、堅牢な構造で入手可能な理由からコンパクトフラッシュ(CF)メモリを使用します。パソコンで読み書きできるように FAT16 ファイルシステムに対応させます。
はじめに目標とする仕様を決めます。記録形式は、圧縮形式は使用せずに サンプリングデータをそのまま記録する WAV 形式とします。サンプリングレートは CF メモリの価格、記録時間と実用的な音質として 22.05KHz 16bit モノラルを目標とします。128MB CF メモリを使用すると約48分の録音時間となります。
次は CPU を決めます。必要な機能は
上記の条件に合う CPU は数多くあるでしょうが、ここでは既に使い慣れている EZ-USB で挑戦してみます。この EZ-USB は 24MHz 動作の高速 8051 CPU で外部bus を持つ AN2131QC が最適です。この CPU の特長は
EZ-USB の開発環境は Cypress社から無償の Tool が提供されています。これを使用すると特別なプログラミングなしで USB bus からプログラムを download することができて非常に便利です。但し、評価用コンパイラには、プログラムサイズ制限があり実用的ではないため、別に用意する必要があります。8051用の無償で使用できるコンパイラに sdcc があります。Inline-assembler も可能なので最適化作業がやり易くなります。この製作では、Inline-assembler を使用してプログラムサイズと実行スピードを最適化した結果、22.05KHz サンプリングレートとプログラムサイズ 7Kbyte以下を達成しています。
次は Audio codec を決めます。必要な機能は
これには、個人入手しやすい TLV320AIC23 が最適でしょう。この codec と CPU の組み合わせには、下記のようは好都合な点があります。但し、CPU との接続を如何するかが問題ですが。
CPU と codec の接続は如何するか。CPU は codec のclcok 同期シリアル入出力と直接接続できないため、シフトレジスタを上手く使用して、CPU の外部 bus に接続することにします。これを行うために 74HC タイプの標準ロジックの中に 74HC299 というものがあります。これは、パラレルイン/パラレルアウトのシフトレジスタでスリーステート出力という今回の用途に最適な機能を持っています。但し、CPU からの read/write とシフト動作を行うためには、shift clock、frame sync、RD、WE、CS 信号を上手く組み合わせて control 信号を生成する必要があります。この回路は 74HC00 NAND GATE 3 個と 74HC125 3-State Buffer を組み合わせて実現できます。また、TLV320AIC23 の Serial Data format には、Left-justify、Righ-justify という便利な data format 切り替え機能があり、録音/再生で切り替えて使用します。この回路は詳細をここでは説明しきれませんが、使用部品の機能を上手く使用して最小の部品構成で実現するというハードウェア設計を楽しめる部分でしょう。
ここまでで、回路の主要部分が決まりました。後は、下記のような付加回路を仕様を検討して追加していきます。仕様の詳細はここにあります。
これで回路図を書き上げて、PCB の製作に入りますが、PCB のサイズを決めるにはケースを決める必要があります。これには携帯サイズのもので加工のし易いものが必要です。これに最適なものはないかと探し回っていて目に付いたものが、ゲームボーイ用カセットケースです。これはゲームに付属するものではなく、6個(6色)セットで販売されているものです。このケースはゲームボーイ専用のため、ゲームボーイアドバンスの販売以降は入手が難く、色々と探し回ってまとめて購入しました。
PCB のサイズは、ケースと電池ホルダの間に上手く挟まれて固定できるサイズに決めます。
PCB の製作は、使い慣れた EAGLE を使用します。まず回路図を書く前に使用する部品を登録します。下記が主な使用部品です。PCB サイズも考慮して小型、面実装タイプのものを使用しています。
3.3V DC-DC コンバータは、現品com で販売されていた電子キットを使用しました。
これだけの部品を限られたサイズの PCB 上に配置配線することは困難な作業ですが、製作好きには面白い部分でもあります。PCB は OLIMEX に 10枚注文を出して、約 2week で入手しました。