これはVisor Prism でビデオキャプチャするための Springboard の製作記録です。
主な機能は次のとおりです。
Springboard は Handspring 社の Visor が持つ外部拡張スロットに挿して使用するモジュールです。モジュールの仕様は、Handspring 社のホームページで公開されており、無償の開発ツールをダウンロードすることができます。
まずはじめに、このツールのインストールとコンパイルの手順について簡単にまとめておきます。
Handspring 社のデベッロパサイトに置かれている Handspring Palm OS GNU Tools を全てダウンロードする。この他のサンプルファイルやマニュアル等も全て揃えておきます。
Cygwin.exe と PalmOSGNUTools.exe をデフォルトの設定でインストールすると、C:\Handspring\prc-tools ディレクトリが作られます。このディレクトリが Project ディレクトリに相当します。続いて HandspringHeaders_Win.exe を展開して Handspring Tool のインストールは終了です。
次に、palmos.com から Palm OS 3.5 SDK をダウンロードして、C:\Handspring\prc-tools\PalmDev\sdk-3.5 に展開します。このディレクトリは C:\Handspring\prc-tools\PalmDev にある sdk システムファイルから参照されます。このファイルには !(symlink)sdk-3.5 と記述されています。
以上でインストールは終了です。ここでコンパイルができるか確認してみましょう。
Samples.zip の中に Tex2Hex サンプルがあるので、これを C:\Handspring\prc-tools に展開します。Tex2Hex ディレクトリの下に、Build、Obj、Rsc、Src というディレクトリが作られます。make file は、Tex2Hex\Build にあります。
"スタート"-"プログラム"-"Handspring"-"Tools"-"Palm-Bash sell"を起動します。コンパイルはコンソールウインドウから make[return] で実行します。cd ..[return]、Tex2Hex[return]、Build[return] で make file のあるディレクトリに移動して、make[return] でコンパイルします。
エラーなしでコンパイルできれば OK です。環境変数エリア不足のエラーが出た時は、Win95/98 では Config.sys を修正、WinMe では "Palm-Bash sell" のバッチファイルのプロパティ-メモリの環境変数の初期サイズを変更します。
注) Tex2Hex の make file は 1 つのソースファイルからなるプログラム用です。
新規のプロジェクトを追加するには、C:\Handspring\prc-tools にプロジェクトディレクトリとその下にサブディレクトリ Build、Obj、Rsc、Src を作り、Tex2Hex の make file を Build ディレクトリに copy します。
copy した make file の Tex2Hex の部分を適当に修正して使用します。
使用する部品は次のとおりです。
MSM7664B
沖電気製のビデオデコーダです。コンポジットビデオとS-ビデオ入力が可能でアナログビデオをディジタルデータに変換します。キャプチャボードでは、コンポジットビデオを ピクセル周波数 13.5MHz の 16bit YCbCr データに変換します。内部レジスタには I2C Bus から書き込みます。データ出力をハイインピーダンスにする機能があり、キャプチャした画像データを出力することを可能にします。
MSM7654
沖電気製のビデオエンコーダです。ディジタルビデオデータをアナログビデオに変換します。キャプチャボードでは 16bit YCbCr データをコンポジットビデオに変換します。内部レジスタには I2C Bus から書き込みます。75ohm 負荷を駆動するドライバを内蔵しており、カラーバーパターンを生成する機能があります。フィルタ回路を追加するだけでビデオ出力が得られます。
MD2310C
富士フィルムマイクロデバイス製 JPEG コーダです。16bit YCbCr ビデオ入出力インターフェースを持ち、JPEG エンコードと JPEG デコードを行います。
16Mbit EDO DRAM
MD2310C のビデオメモリに使用します。
74AC139 (TSSOP)
アドレスデコーダです。Visor が出力するチップセレクト信号 CS1 とアドレス A22、A23 をデコードします。
74AC175 (TSSOP)
4bit レジスタです。I2C Bus のデータとクロック、Compact Flash メモリの制御信号に使用します。
TC74WH125FU
3-ステートバッファです。Comact Flash メモリの検出とステータス信号の読み込みと I2C Bus のデータ出力に使用します。
27MHz Xtal OSC
ピクセル周波数の 2 倍のクロックを生成する 3.3V 動作のクリスタルオシレータです。7mmx5mm サイズの表面実装タイプを使用します。
3.3V 1A 3端子レギュレータ
5V から 3.3V に変換します。1A 以上のものを使用します。結構発熱します。
Springboard 68pin connector/case
Visor に接続するためのコネクタと専用ケースです。ここで販売されています。
Compact Flash 50pin connector
Compact Flash メモリを実装するためのコネクタです。メモリ挿入時にメモリの裏面が見えている状態になるものを使用します。
Video Pin Jack
ビデオ入力とビデオ出力のジャックです。ボードサイズを小さくするためケースマウントタイプを使用します。
200ohm VR
ビデオ出力の輝度調整用の可変抵抗です。
L、C、R 各種
C、R は 1608 サイズのものを使用します。L はリード線タイプを直付け。
5V 1A スイッチングタイプ AC アダプタ
ボードは最大で500mA 位の電流が流れます。レギュレータの発熱を抑えるためにスイッチングタイプを使用します。
部品を集めるのは結構大変です。ビデオ関係の部品 4 点はメーカーに直接問い合わせないと入手できないかもしれません。
使用する部品が決まれば、後は回路図を書いて基板を作ります。Springboard の connector と case を見て基板サイズと部品配置を決めていきます。ビデオエンコーダとビデオデコーダは放熱のためにケースの外に出します。厚さが 1.6mm の基板を使用すると部品は片面のみの実装に制限されるので、JPEG コーダと DRAM 以外はケースの外に出るような配置になります。ビデオエンコーダとビデオデコーダを表面に、Compact Flash メモリを裏面に配置します。
基板CAD は無償で提供されている Eagle を使用して作ります。但し、製作できる基板サイズに制限があります。
基板はここに発注。約 2 週間で 3 枚の基板着。
MBM7664B とMBM7654 の動作を確認する。
I2C Bus から内部レジスタにデータを書き込むだけで動作します。下記が書き込んでいるデータです。
Byte msm7664_dev = 0x82; // I2C device id
#define BYTE_7664 21
Byte data_7664[BYTE_7664] = {
0x81, 0x10, 0x80, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0xd0, 0x00, 0x1a, 0x22,
0x02
};
Byte init_7664[BYTE_7664] = {
0x81, 0x10, 0x80, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0xd0, 0x05, 0x1a, 0x22,
0x02
};
Byte DATA_OUT_7664[1] = { 0xb4 }; // address 0x1e = 30
Byte DATA_HIGHZ_7664[1] = { 0xb5 }; // address 0x1e = 30
Byte standby_2[BYTE_7664] = {
0x81, 0x10, 0x80, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x40,
0x00, 0x05, 0x20, 0x00, 0x00, 0x00, 0xd0, 0x07, 0x1a, 0x22,
0x02
};
Byte msm7654_dev = 0x88;
#define BYTE_7654 4
Byte data_7654[BYTE_7654] = {
0x85, 0x43, 0x00, 0x00
};
Byte colorbar_7654[BYTE_7654] = {
0x85, 0x43, 0x08, 0x00
};
Byte standby_1[BYTE_7654] = {
0xa5, 0x43, 0x00, 0x00
};
MBM7664B とMBM7654 の Datasheet は沖電気のホームページから download できます。使用方法を説明している Q&A があります。この中に初期化についての注意事項があります。
内部レジスタに設定するデータについての資料はないので、Datasheet を調べて決めることが必要です。MBM7664B はレジスタが多く正しく設定するのはたいへんです。そこで、この IC を使用している製品がないか検索してみると、TBC-7 という製品が見つかります。この製品には MBM7662 と MBM7654 が使われています。MBM7664 ではありませんが同等の機能を持っています。
上記のデータは TBC-7 の I2C Bus をモニタしたデータをもとにしています。
MD2310C の動作を確認する。
この IC の Datasheet は富士フィルムデバイスのホームページから download できます。制御するソフトウエアは機能を一つずつ確認しながら作成していきます。実際には、MD2310C のみを実装したテストボードで実験しながら各機能のためのソフトウエアを作成しています。実はこのテストボードは、Springboard の前に製作したもので、Cypress EZ-USB AN2131Q を使用しています。ソフトウエアのほとんどの部分は、このテストボードと TBC-7 を繋いで動作確認済みのものを組み合わせて作成しています。
EZ-USB については、"CQ 出版社のインターフェース増刊 USBハード&ソフト開発のすべて"で詳しく解説されています。
Compact Flash メモリの動作を確認する。
上記のテストボードに PCMCIA 68 Pin connector を取り付け、市販のアダプタを介して Compact Flash メモリをテストします。
"CQ 出版社のインターフェース増刊 ATA(IDE)/ATAPIの徹底研究"のサンプルプログラムが参考になります。また、FAT16 File System については、多くのホームページを参考にさせて頂きました。
カラービットマップを表示させる。
Visor Prism は 6万5536色(16bitカラー)表示に対応しています。リソースのビットマッップを表示させて確認します。
static void DrawBmpResource (SWord PenX, SWord PenY, int ResourceID)
{
VoidHand ObjectBitmapHandles;
BitmapPtr ObjectBitmapPtr;
ObjectBitmapHandles = DmGetResource( bitmapRsc, ResourceID);
ObjectBitmapPtr = MemHandleLock(ObjectBitmapHandles);
WinDrawBitmap(ObjectBitmapPtr, PenX, PenY);
MemPtrUnlock(ObjectBitmapPtr);
DmReleaseResource(ObjectBitmapHandles);
}
結果は、8bitカラーです。16bitカラーモードに変更する方法を WinDrawBitmap で検索して探してみます。
これを実現するコードは、サンプルプログラム HSPhotoAlbum の EyeModuleDB.c の中に見つかります。
YCbCr 形式のデータをビットマップ形式に変換するコードもあり、ほとんどの部分はここからをコピーしています。
Scroll View を追加する。
Compact Flash や ユーザインターフェース関係のコードをテストするために、データを表示する Scroll View を追加します。
これを実現するコードは、サンプルプログラム HandTerminal の HandTerminal.c と AppStdIO.c の中にあります。
StrPrintF() と printf() を使用して データを 16 進数で表示できるようになります。また、テキストエディタの機能もあるのでメモ帳としても使用できます。
Software を Debug する。
Scroll View で動作をモニタします。ビデオ関係は動作確認済みのコードを使用しているので、新規に作成した Compact Flash 関係の動作確認がメインです。
まずはじめに、ビデオエンコーダからカラーバーパターンを出力させて VR で輝度を調整します。次にビデオ入力にTVのビデオ出力を繋いでビデオデコーダを動作させます。ここまではテストボードで動作確認済みです。次は DRAM のテストです。これも動作確認済みのものですが何故か動作しません。これは、Address と Data をテスタでモニタするなどして確認した結果、Address が 1bit ずれています。Springboard では A1 が A0 になります。
MD2310C の A0、A1 を A1、A2 に修正して解決。2 本なので簡単ですが、Compact Flash メモリは 11 本あるので配線修正は困難です。そこで Software のほうで 1bit ずらし、A0 をレジスタ出力にして修正しました。これで Hardware の問題は解決です。後は、Compact Flash 関係のコードを追加するだけです。
Scroll View にデータをダンプ表示をさせて、FAT16 形式で JPEG file の書き込みと読み出しを行うコードを Debug します。
FAT16 の構造を確認するため、BPB(BIOS Parameter Block)、FAT Table、Root Directory などを Scroll View にダンプ出力させてみます。次に FAT Table を load しながら、1 セクタ(512Byte)毎に data を read、write する処理を追加、続いて、file directory data の処理を追加など。また、PC から正常に読み出せるかどうかも確認します。
最後にメニュー等を操作しやすいものに修正して完成です。
以下は使用した感想です。
キャプチャしたビデオが Visor に表示されるまで約 7 秒、CF から読み出して表示するまでに約 10 秒かかります。640x480 サイズのデータ転送とビットマップの変換にかなりの時間がかかっているようです。表示されるまで少し待たされる感はありますが、ボタンを押すだけでキャプチャできるので操作は簡単です。キャプチャした画像もボタンを押すだけで CF に保存され、64MB CF で 100枚以上のキャプチャが可能です。
ビデオをキャプチャしたくなった時は、Visor にこの board を挿して AC アダプタとビデオケーブルを繋ぐだけです。手軽に Visor でビデオキャプチャできる操作性には満足しています。