ITU656規格の信号をFPGAで撮り込む

デジタル出力 (ITU-656) 付小型カラーカメラ
1、ITU-656 のデジタル信号
2、カメラ以外に使用する基板
3、H8/3069Fと、FPGAの接続
4、FPGA用3.3Vと、カメラ用の12V電源を作る
5、ステップアップスイッチング電源の波形
6、カメラデータから同期信号分離
7、同期信号判定回路のテスト
8、撮り込んだカメラデータはどこに書くか?
9、SDRAMをH8からアクセス
10、複数マスター間のアービター回路
11、カメラデータをそのまま2MBまで連続で撮り込む
12、有効画素の撮り込み
13、有効ラインの撮り込み
14、そのまま2MBまで連続で撮り込んだデータの解析
15、H8/3069Fのモニタ、”HDM”
16、H8からパソコンへLANでデータ転送



撮り込み例(320x240)。画像はパソコンでRGBへ変換処理、こちらは処理前


秋月電子通商の小型カラーカメラのITU656の撮り込みは、
すで製作を公開しているところがあります。
例1:http://arx.ee.utsunomiya-u.ac.jp/azlab/members/sinsaku/old/itu656.html←いつも接続できるとは限りません


1、ITU-656 のデジタル信号

秋月電子通商で入手できる MTV-54K0DN という型名のカラーカメラは、デジタル出力付きですが、これが ITU-656 という規格のデジタルビデオ信号で、資料は、ITU 国際電気通信連合のダウンロード手続きから直接ダウンロードするか、ITU-656 規格のデジタル信号を出力する沖電気のエンコーダーICなどの資料を参考にして、画像データの撮り込みを行います。
これらの資料によると、以下の表で示されるバイト列が、同期信号の始まり(EAV)と、終わり(SAV)とを、他のデータ列から区別しているようです。これらの4バイトのデータ列は、画像データの中には存在しません。
表1:EAVとSAV
同期開始 EAV
同期終了 SAV
0xFF,0x00,0x00,0xF1 0xFF,0x00,0x00,0xEC
0xFF,0x00,0x00,0xB6 0xFF,0x00,0x00,0xAB
0xFF,0x00,0x00,0x9D 0xFF,0x00,0x00,0x80
0xFF,0x00,0x00,0xDA 0xFF,0x00,0x00,0xC7

画像データは、常に出力されており、オシロスコープで観察しても、同期信号(FF,00,00の3バイトで始まる)に相当するデータ列を、容易に見つけることができません。そこで、とにかく全データを撮り込む回路を作ってメモリに書き、それをパソコンなどに読んで解析してみることにします。

2、カメラ以外に使用する基板

左から、FPGA基板 XCM-001-400、基板間の接続ユニバーサル基板、H8/3069Fネット対応マイコンLANボード

装置全体を組み立てた状態

FPGAを上にして撮る。カメラを上にすると、画像が逆さまになる

左の状態で撮ると、正立画像が撮れます。右は、カメラが上に乗っかった状態ですが、このままだと、左右、上下反転の画像になります。カメラは、ユニバーサル基板に2.54mmピッチのフラットケーブル用10ピンのコネクタで接続しています。各基板を接続するのに、2列2.54mmピッチのスタック用コネクタを取り付けています。FPGA基板の外部接続部分は、66ピンあるので、64が最大ピン数のスタック用コネクタでは2ピン不足なので、切り出して追加しています。


装置のブロック図


拡大
カメラには、小さな基板に10ピンのコネクタを取り付けて固定し、カメラのリボンケーブルコネクタの足から、直径0.1mmぐらいのウレタン線で引き出しています。





3、H8/3069Fと、FPGAの接続

H8/3069Fの外部信号レベルは5Vで、FPGAは3.3Vなので、H8からFPGAへの信号は、直接に接続できません。そこで、右の図のように、H8から出た信号を、抵抗で分圧してFPGAに接続します。H8が出力する信号は、4.5Vにもなるので、分圧して3V程度になるようにします。FPGAが出力する電圧は3.3Vあり、2.2kでプルダウンになっていてもH8側では2VをHighとして認識できるので、使えます。この接続では、H8のクロックなど、22MHzで変化する信号は伝えることができません。データバス、アドレスバスなどでは、約50nsの遅れで伝えることができます。レベル変換のICを使うと、もっと高速に伝えられますが、H8の外部データバスはそれほど高速ではないので、これで実用になります。

4、FPGA用3.3Vと、カメラ用の12V電源を作る

H8/3069Fネット対応マイコンLANボードは、5Vで動作しますが3.3Vがないので、基板間の接続ユニバーサル基板に3端子レギュレータを付けてFPGA基板に3.3Vを供給します。カメラには12Vが必要なので、12V電源を作ります。カメラの12Vは、せいぜい100mAなので、5Vからスイッチングレギュレータでステップアップします。専用のICとコイルでも作れますが、ここではFPGAでステップアップ用の信号 V12SW で作ります。コイルと、ダイオード、12V以上にならないようにするフィードバック回路が必要ですが、フィードバックはやめて、12Vのツェナーダイオードで12Vに抑える簡単な回路とします。12Vのツェナーダイオードは、1WタイプのRD12F、または相当品とします。24μ秒間に6μ秒の3.3VのHigh波形でコイルに磁気エネルギーを溜め、OFF時にコイルのエネルギーを開放して高圧を発生し、ダイオードで取り出します。カメラを接続していると約10.5Vの出力が得られます。カメラは、9.5V以上あれば動作するので、この電圧で十分動作します。カメラモジュールは、内部で使う電源を、12Vからステップダウンで作っているので、入力範囲は広くなっています。この回路で注意するのは、FPGAが出す V12SW 信号のピンは、電源投入時にHighにならないようにします。FPGAのコンフィギュレーション中、もしくは回路のテスト中、 V12SW 信号が直流的に3.3Vになると、コイルに電流が流れたままになって、コイルかトランジスタを熱破損してしまうことがあります。これらの回路をまとめたものが、FPGAとH8/3069Fの接続でFPGA周辺の回路は省略しています。XCM-001-400の回路図は、こちらです。また、H8/3069FLANボードはキット取扱説明書・回路図集に資料がありあます。
表2:12V電源部品
部品番号
品名など
主な仕様
L1 RCH8011 SUMIDA 150μH MAX 1A 0.33Ω
D1 RB060L-40 40V 2A(0.5V) 1A(0.45V)
D2 RD12F 12V 1W
C1 電解コンデンサ 25V 100μF
Q1 2SC3518 60V 5A hFE 100
CN1 B2P 日圧 2P
R1 SIZE 2012 330Ω

5、ステップアップスイッチング電源の波形

右の写真は、ステップアップが動作している波形です。下の信号が V12SW で、上が 2SC3518 のコレクタの信号波形です。 V12SW がLowになってから約5μ秒ほどで、0V付近から11Vに上がっています。トランジスタのベース電圧がLowになってもすぐにはコレクタはオープンになりません。この波形から、コイルには、約11μ秒の間、5V電源から磁気エネルギーとして蓄積され、開放後、約10μ秒かかって放出しています。放出電圧は、ツェナーダイオードとカメラの負荷が無いと、数十Vまで上がってしまいます。 このスイッチング電源の V12SW 波形を作る回路の Verilog HDL ソースです。ソースでは、 v12out というのが、 V12SW 信号です。







7、同期信号判定回路のテスト

vsync と、NTSC映像信号

同期信号(FF,00,00の3バイトで始まる)を検出し、4バイト目のデータから同期信号を取り出します。右の写真は、同期信号検出回路で、vsync 信号をテストピンに出力し、映像信号との位置関係を記録したもの。上が vsync 、下が、NTSCの映像信号です。ここで、vsync という名称は垂直同期信号という意味ですが、波形は、同期信号よりも幅の広いLowの期間となっています。NTSCでの同期信号は、写真の下の左付近に、CH2 1.00V とありますが、1.00の文字位置の約250μ秒の区間が垂直同期信号になります。検出回路での vsync は、Highの期間に、有効な映像信号があることを示している信号です。vsync がHighでも、hsync がLowの場合は、有効な映像信号は無いので、vsync と hsync の両方がHighのとき、有効なデータになります。

8、撮り込んだ画像データはどこに書くか?

ITU−656のカメラデータは、1フレーム33msあたり、900kBほどになり、しかもデータレートは27MB/秒と高速なので、H8基板に搭載されている2MBのDRAMではDMAでも間にあいません。27MHzだと、高速SRAMでなんとかリアルタイムの撮り込みができますが、FPGA基板には高速SRAMのパターンはあるものの、容量が512KBと少なく、標準では実装されていないので、SDRAMを追加します。SDRAMは単体では入手困難なので、パソコン用のDIMMから取り外して使います。DIMMからICを取り外す方法は、天ぷら油を180〜200度ぐらいに熱し、その中にDIMMを漬けると、簡単に外せます。天ぷら油は、熱すると煙が出て引火の危険があるので、加熱は電磁調理器か、電熱器を使います。200度以上計れる温度計も必要です。
今回は、パソコン用の512MBメモリから、MICRON の、48LC32M16A2P-75 という型名のSDRAMを使いました。データバスは16ビットあり、1個で64MBあります。SRDAMは手持ちのものを使いましたが、48LC16M16A2P-75 などの、256Mビット品の方が多く見かけます。必要なのは2MBなので、64Mビット品でも使えます。データバスは8ビットでも使えますが、16ビットの方がデータ転送に余裕が出てきます。

右は、FPGA基板の裏で、SSP-82 サンハヤトのIC変換基板に取り付けたSDRAMと配線している途中のもの。SRAM用パターンのパッドも使って、上下のコネクタに出ているFPGAのユーザーI/Oピンをできるだけ使わないようにします。ヒューマンデータ製のFPGA基板には、SDRAMを搭載しているものもありますが、数万円以上もするので、( XCM-005-1000 ) 今回は XCM-001-400 を改造しました。余談ですが、ヒューマンデータ製のFPGA基板は小さいのが売りですが、高価なのが難点です。また小さくするために、本来なら使えるユーザーI/Oピンが使えないという基板が多いようです。



画像データは、27MHzのクロックの立ち上がりでサンプリングすると撮り込めます。 まず、FF0000の3バイトで始まるデータ列の後の、1バイトのデータの、D4ビットが0か1で、SAV と、 EAV の、映像範囲を指定しています。これらは、画像データ部分には無いデータ列で、連続したデジタル信号から見つけることができます。

9、SDRAMをH8からアクセス

画像データをSDRAMに書くとして、書かれたデータをH8で読み出せないと意味がないので、画像を書く回路を実装する前に、H8からSDRAMの任意の番地を読み書きできる回路を先に作ります。H8からのアクセスは、データバスを16ビット接続しているので、8または16ビットで任意にアクセスできる回路とします。SDRAMのアクセス動作モードには、シングル、2バースト、4バースト、8バースト、フルページバーストの選択があり、H8からは、シングルアクセスとなるので、このシングルモードでもよいのですが、画像データを書く場合は、FPGA内のブロックRAMに512バイトほど貯めておいて、いっぱいになると、まとめてバーストで書くという動作になるため、モード設定では、フルページバーストとしておきます。フルページバーストの設定で、H8からのアクセスの場合は、途中でバースト転送をSTOPさせる回路にします。リードの場合は、読めた時点でSTOPをかけ、ライトの場合はCASコマンドの次にSTOPコマンドを出します。
SDRAMを制御する回路はかなり複雑になります。それは、DRAM特有のリフレッシュを行わないといけないからで、これが他のアクセスと同時に実行できないので、アービター回路を付けることになります。

1、H8
2、リフレッシュ
の2者間のアービターでいいのですが、画像データのライトも非同期に発生するので、撮り込み回路を入れると以下3者間のアービターになります。
1、H8 (cpureqdram)
2、画像データライト (camreqdram)
3、リフレッシュ (refreq)

10、複数マスター間のアービター回路

アービター回路は、以下のようなアルゴリズムで動作します。優先順位判定のため、要求からDRAM回路に届くまで、1クロック余分に時間がかかります。

1、H8とリフレッシュ同時の場合は、H8に制御を渡します。
2、片方のみ要求がある場合は、要求した方に制御を渡します。
3、制御を獲得して、DRAMのアクセスがまだ終了していない場合は、他の要求を待たせます。

これらの機能を入れた回路が、これ(dramctl5.v)です。H8の要求は、SDRAMの制御クロックとは非同期なので、要求信号をSDRAMの制御クロックでラッチの後、変化を検出して単一クロックで同期化を行っています。非同期に発生する各要求のアービター回路では、単一クロックによる要求信号の同期化が必要です。これらの機能を入れた全回路図ソースです。これらの回路で、H8からSDRAMの任意の番地をバイト、またはワードでリード、ライト可能です。

10−1、トップモジュール xcmh8cam.v


すべての入出力ピンと、サブモジュールを記述しています。
サブモジュールとして、XilinxのDCMと、BUFGも呼び出しています。SDRAMには、XCM-001-400 の48MHzを2倍にした96MHzのクロックを供給し、別の入力ピンでフィードバックしています。フィードバックした入力クロックに、DCMを接続して、SDRAMと、FPGAの内部の96MHzのクロック間のズレを無くしています。96MHzになると、使用スライスが増加してくると、このようにしないとタイミングが厳しくなってきます。
また、DCMを使うことにより、内部とSDRAMの外部クロックのスキューは小さくなりますが、DCMが安定するまで、SDRAMの初期化を遅らせる必要があり、そのために、内部のリセットカウンタを、DCMのロック完了信号が有効(High)になるまで、止めています。

10−2、H8のアクセス制御 h8interface.v


H8/3069Fと、FPGAの接続回路で、アドレスデコード、内部レジスタ、ウエイト制御を行っています。H8からの各信号は、すべて48MHzのクロックで同期化を行っています。H8からは、CS4とCS5を接続して、それぞれ2MBの領域がありますが、CS4を、すべてSDRAM、CS5を小さく分割して、SDRAMの上位バンクアドレスを設定できるように、レジスタを設けています。
H8からは、以下のアドレスでアクセスします。
表3:アドレスマップ
アドレス
機能
0x800000−0x9FFFFF SDRAM 32MBの内、上位バンクアドレスレジスタで指定された2MB
0xA00000 16ビット ダミーのレジスタ。常に0x1234が読み出されます。
0xA00010 16ビット SDRAMの上位バンクアドレスレジスタ16ビット (D8−−D5が有効)

H8は、外部バスのアクセスの初まりを、ASの立下りのタイミングとしていますから、ASを常に2段ラッチして、立下りのときにCS4かCS5かを判定しています。判定の後、ステートレジスタ、h8cs4seq か h8cs5seq をスタートさせて、同時にウエイトを有効にしています。内部レジスタの場合は、ウエイトは必要ありませんが、SDRAMの場合は、ウエイトをかけていないとH8がアクセスを強制終了してしまいます。H8のウエイト信号は、ふつうオープンコレクタなどにして、複数のデバイスからのウエイトが使えるようにしますが、今回は、FPGAだけなので、ウエイト終了か、CS4とCS5以外では、Highとなるようにしています。

10−3、ITU−656信号から同期信号生成 ituframe.v


回路はすべてカメラからのクロック、27MHzで動作しています。8ビットのデータを4回、順にラッチして、pixd3,pixd2,pixd1,pixd0 とし、pixd3,pixd2,pixd1 の並びが、0xFF、0x00、0x00のときに、pixd0 のビットがどうなってるかで判定しています。pixd0 は、一回前の(0xFF、0x00、0x00の並びの時)データと比較するため pixd0old に残しています。pixd0 のD4の変化が、水平同期信号の変わり目となり、pixd0 のD5はそのまま垂直同期信号の反転した値になります。ITU−656の解説を見ると、ずいぶん複雑で、わかりにくい記述なのですが、これはNTSCのその他の定数などを埋め込んでいるのでそうなっているだけで、hsync,vsync を取り出すだけなら回路は簡単です。ITU−656信号の撮り込みの要点は、実はこの回路だけなのです。hsync と vsync を後でどう扱うか、そちらのほうがはるかに複雑です。特に、インターレースとして、640x480サイズを撮り込もうとすると、回路は大変複雑になりますが、ここでは、インターレースは後にするとして、1フィールド(320x240)の撮り込みとします。
ここで余談ですが、320x240としていますが、実際カメラからの有効画像信号は、1ラインで、320の4倍以上の、1408個あり、このままだと352x240になります。このページの先頭の撮り込み例は、352x240の内、320x240を切り出した画像です。なぜ横352もあるかは、画像をよく見ればわかりますが、横に少し間延びした画像だからで、これは、27MHzというサンプリング周波数が原因です。CRTの場合は、縦方向を広げると、縦横比がちょうどに設定できますが、パソコンのデータとしては、352x240をそのまま表示すると、横に間延びした画像になります。352ピクセルを、320ピクセルに圧縮すると、縦横比が正常になります。このときの圧縮の比率、352:320 は、ちょうど 27:24.545454 の比率になります。この24.545454というクロックは、工業用のCCDカメラが出す画像信号のクロックで、この周波数でサンプリングすると、縦横比がちょうど1対1になり、パソコンの液晶で正常に表示できる画像になります。
横352ピクセルから320ピクセルに圧縮するのはできないことではないですが、見た目きれいに、かつ、画像のシャープさを犠牲にせずに行うのは、限られた容量のFPGAではたぶん不可能と思われるので、そのままとしておきます。

10−4、SDRAMの制御 dramctl.v sdram16.v


回路は、2個のモジュールで構成しています。 dramctl.v は、SDRAMのリフレッシュ要求生成と、SDRAMへのアクセス要求のアービター、 sdram16.v はSDRAMのタイミングを考慮しながらI/Oピンを制御しています。SDRAMの制御方法はいくつかありますが、一番単純な方法として、モード設定をバーストモードのみにして、モード設定を固定とし、シングルアクセスは、バーストストップで対処という方法にしています。CPUからのシングル転送しかない場合は、シングル転送モードでよいのですが、あとでカメラからのデータをバーストモードで書くという機能を入れるため、バーストモードとしました。このため、シングル転送の場合は、アクセスの途中でバーストをストップしています。
ザイリンクスの開発環境である、EDKを使ったSDRAMの制御方法を観察していると、モード設定は、バーストモード固定であることが判ります。

11、カメラデータをそのまま2MBまで連続で撮り込む

H8でSDRAMのリード、ライトができてから、次にカメラのデータを撮り込む回路を追加します。カメラからのデータは、27MHzのクロックで入力されるので、2バイトにまとめても、H8からのアクセス方法ではとても間にあわないので、FPGAのブロックRAM(BRAM)に溜めてからバーストモードで書きます。バースト個数は256回とし、16ビットで書きますから、512バイトまでBRAMに書き、溜まった時点で、SDRAMに書き込み要求を出して、後はアービターに任せます。これらの機能を入れた回路がこちらです。xcmh8cambk.lzhこの回路は、352x240ピクセルで撮り込める機能を含んだ回路ですが、2MBまで連続で撮り込む機能も残しています。内部レジスタは、大幅に追加して、以下のようになっています。
表4:352x240ピクセルの撮り込み機能追加。アドレスマップ
アドレス
機能
0x800000−0x9FFFFF SDRAM 32MBの内、上位バンクアドレスレジスタで指定された2MB
0xA00000 16ビット ここに何かを書くと、撮り込みをスタートします。読むと、1で撮り込み中、0で終了
0xA00002 16ビット 撮り込み機能を選択します。0=全データ2MB、1=有効画像2MB、2=352x240
0xA00004 16ビット テスト用。dramseq[15:0] を読み出します。
0xA00006 16ビット テスト用。dramseq[20:16] を読み出します。
0xA00008 16ビット テスト用。{captureseq,3'h0,camwaddr[24:16]} を読み出します。
0xA0000A 16ビット テスト用。camwaddr[15:0] を読み出します。
0xA0000C 16ビット ダミーのレジスタ。常に0x1234が読み出されます。
0xA0000E 16ビット ダミーのレジスタ。常に0x2345が読み出されます。
0xA00010 16ビット SDRAMの上位バンクアドレスレジスタ16ビット (D8−−D5が有効)
0xA00012 16ビット hsync 後、指定したクロック数のデータを捨て、以後に撮り込みます。デフォルトで 0x6
0xA00014 16ビット hsync 後、指定したクロック数の後、撮り込みを終了します。デフォルトで 0x586
0xA00016 16ビット vsync 後、指定した hsync 数の後、撮り込みを開始します。デフォルトで 0x1
0xA00018 16ビット vsync 後、指定した hsync 数の後、撮り込みを終了します。デフォルトで 0xF1
0xA0001A 16ビット 撮り込み機能が2の場合、メモリに書くサイズを512バイト単位で指定します。デフォルトで 0x294

xcmh8cambk.lzh の回路で、撮り込み機能を0に設定して撮り込んだデータが以下です。実際は、このようには表示できませんので、1/2に縮小した画像をBMP形式に変換したものです。もとの画像のサイズは、約2MBあります。xcmd2.rawそれらしいカラーボールが、モノクロで横に4倍に伸びた画像を、5枚ほど撮り込んでます。1枚が、1フィールドになり、上下2枚で1フレームになります。640x480の画像に変換するには、上下の奇数、偶数フィールドを、1ラインごとに交互に並べて演算しますが、ここではそれは行っていません。撮り込み機能が0の場合は、撮り込みスタートすると、最初の vsync の立ち上がり(終了)で27MHzで受信したデータを、ほぼ2MBになるまで連続でSDRAMに書いています。1ラインあたり、1716バイトあり、その中に、0xFF、0x00、0x00、0xXXのデータ列、同期信号があるブランキング期間の映像的には黒の部分を含んでいます。横1716ピクセル、縦1222ピクセルで、RAWデータの表示できるビュウワーでモノクロならそれらしく表示できます。

12、有効画素の撮り込み

次は、撮り込み機能を1に設定して撮り込んだデータです。これも1/2に縮小した画像をBMP形式に変換したものです。もとの画像のサイズは、約2MBあります。xcmd3.rawこの画像では、水平同期信号部分のデータを撮り込んでいないので、1ライン1408バイトになっています。

13、有効ラインの撮り込み

最後に、撮り込み機能を2に設定して撮り込んだデータです。この場合、vsync hsync 共にHighの期間を、1フィールドだけ撮り込んだもので、撮り込みメモリサイズを、0x294に設定しています。このRAWデータから、xcmd1f4.raw RGBに変換して、BMPファイルにしたものがこれです。xcmd1f4.bmp 下の画像。



xcmd1f4.raw から xcmd1f4.bmp へは、このコマンドラインのソフト chkcap.c で変換しています。使い方は、コマンドラインから、適当なフォルダ capdata にもとのRAWデータファイルを入れておき、

C:\capdata>chkcap xcmd1f4.raw c xcmd1f4.bmp 322 (enter)
です。
chkcap.c は、RGBへの変換時に、計算結果の8ビットのデータが、オーバーフロー、またはアンダーフローしたときに、それぞれ255、0にクランプしています。ここで、 chkcap.c の最後の引数である、322 は、元のRAWデータから、1ライン320ピクセルの変換後、残りの32ピクセル(128バイト)を読み飛ばす機能と、322の1の位の2で、最初に2バイトを読み飛ばす機能を入れています。これは、元のRAWデータの最初のデータが、Y Cr Y Cb の並びになっているので、Y Cb から変換するようにずらすのと、320ピクセル(1280バイト)変換後、1408−1280=128を捨てて、標準的な画像サイズにするためです。

14、そのまま2MBまで連続で撮り込んだデータの解析

ここで、xcmd2.raw の内容をチェックしてみます。バイナリーエディタを使ってファイルの先頭部分を見ると、以下のようになりますが、中央付近のアドレス0x11Dから、FF 00 00 80 のデータ列があり、これは、水平同期信号の終了を示しています。これに続く 7F 17 80 17が、色差信号と輝度の並び CbYCrY になっているはずですが、赤のボール付近のデータにエディタを進めてそれを確かめてみます。 CbYCrY の並びは、この資料から得ています。モトローラの、MC44722A のマニュアルから抜粋。赤のボールで、比較的赤色が鮮明にでている場所は、40ラインの、左から630バイト付近で、その部分のバイナリーエディタの表示がその次です。



黄色のカーソルが示すアドレス、0x10C20は、40ラインの先頭のアドレスで、画像の左端になります。(1716x40=0x10C20)ここから水平同期のブランキングが始まり、FF 00 00 80 の並びが、0x10D3D番地にあります。色差信号と輝度の並びは、0x10D41から始まり、7F 17 80 17 と、4バイト1組で続いています。4バイトの内、輝度が2個、色差信号が、青1個、赤1個と並びます。さて、赤のボールの左上付近は、0x10C20から、630バイト付近なので、0x10D41番地から4バイト単位で追いかけると、0x10E99番地がその部分の色差信号と輝度の並び CbYCrY になっているはずです。データを見ると、76 4B B1 4C となっていて、
Cb = 0x76 (118)
Y0 = 0x4B (75) Y1 もほぼ同じなので、これを代表にします
Cr = 0xB1 (177)
Y1 = 0x4C (76)
となります。明らかに、赤の成分が大きいことが判りますが、計算でRGBに変換すると、

  R = 1.164(Y-16) + 1.596(Cr-128)
  G = 1.164(Y-16) - 0.391(Cb-128) - 0.813(Cr-128)
  B = 1.164(Y-16) + 2.018(Cb-128)
R=69 + 1.596(177-128)
G=69 - 0.391(118-128) - 0.813(177-128)
B=69 + 2.018(118-128)
で、
R=147
G=27
B=48
となり、RGBで表現すると、以下の色になります。

赤っぽい茶色で、ほぼカラー画像と近いことが判ります。カラー画像と、2MBのRAWデータは、まったく同じシャッターチャンスではないので、 色や明るさに、もともと差があります。光は、窓から入力された自然光ですが、外には大きな柿の木が近くにあって、葉の緑の反射がおおきいので緑の成分がやや大きくなって、赤の鮮明さが劣っています。

15、H8/3069Fのモニタ、”HDM”

H8/3069Fには、いわゆるモニタを入れて、SDRAMのリードライトや、FPGAのレジスタ設定などを行えるようになっていますが、ここで使っているモニタは、単なるメモリやレジスタの設定を行う簡単なものではなく、C言語風のスクリプト言語で、条件判断とか、汎用レジスタ演算機能、ループ機能などを行えるものになっています。HDMは、ハードウエアデバッグモニタの略で、CPUの周辺回路のテストを、モニタに組み込みのコマンドだけでなく、スクリプト言語を実行することで、より複雑、且つテスト方法などをパソコンで管理できるものです。全体の主な仕様はこちらです。

16、H8からパソコンへLANでデータ転送

容量の大きいバイナリーデータをH8からパソコンに転送するのにイーサネットを使います。H8を操作するRS232Cでは、バイナリー転送は簡単にはいきません。メモリダンプをパソコン側で記録してバイナリーに変換という方法でも画像データを読み込めますが、データ量は3倍以上になり、352x240のRAW画像でも、1MB以上になり、115200ボーだと、100秒はかかります。秋月電子通商のH8/3069Fネット対応マイコンLANボードを買うと、TCP/IP のソフトも付属してきて、FTPなどで転送できるようですが、ここでは UDP/IP プロトコルの tftp を使って、バイナリーデータを転送することにしました。UDP/IPだと、ソフトもかなり小さく、独自の転送機能を追加することができます。スピードは、ftp より劣りますが、H8のこのボードで、200KB/秒ぐらい出せるので、352x240のRAW画像転送も、1.5秒ほどで行えます。
パソコンから、tftp コマンドで受け付ける主な機能は以下のようになっています。

C:\capdata\>tftp -i 192.168.1.115 get command filename (enter)

command のところには、tftp では、転送元のファイルパスを指定して、そのファイルを読み、filename として格納しますが、H8側には、ファイルシステムがありませんので、ファイル名の代わりに、1文字のコマンド + 先頭メモリアドレス,転送サイズ という書式として、

tftp -i 192.168.1.115 get r800000,52800 xcmd1f4.raw

などとコマンドを与えます。これは、H8の0x800000番地から、0x52800バイトだけ( read の r が1文字コマンド) 転送して、xcmd1f4.raw というファイル名で残すコマンドです。H8のIPアドレスは、192.168.1.115 と固定になっています。H8側では、パソコンからのファイル読み出しコマンド、get の後の r800000,52800 を、ファイル名ではなく、先頭メモリ番地+長さと判断して、ファイル名の代わりとして機能します。UDP/IPを使った tftp は、このような使い方もでき、単なるファイル転送のツールだけでなく、パソコンからのコマンド送信ツールとしても使うことができます。
この tftp サーバー機能を追加したH8/3069Fのモニタの全ソースはこちらです。ソースは、cygwin でコンパイルできる構成になっていますが、 cygwin のH8クロスコンパイラは、使っているものは、GCCの名前が、h8300-elf-gcc となっています。

このページの主要リンクまとめ

ITU-656 規格のデジタルビデオ信号資料 ITU 国際電気通信連合のダウンロード手続き
他のITU−656関連IC資料 沖電気のエンコーダーICなど
FPGA基板 ヒューマンデータ FPGA基板 XCM-001-400
秋月電子通商 H8/3069Fネット対応マイコンLANボード
SDRAMなどのメモリ  MICRON
装置全体の回路 FPGAとH8/3069Fの接続
XCM-001-400の回路図 XCM001E2.pdf
H8/3069FLANボード キット取扱説明書・回路図集 の H8/3069フラッシュマイコンLAN(ネットワーク)ボード
FPGA回路ソース 全機能を入れた回路。xcmh8cambk.lzh
RAW から BMP への変換 コマンドラインのソフト chkcap.c
CbYCrY の並び モトローラの、MC44722A のマニュアルから抜粋。
HDMの仕様 全体の主な仕様
H8/3069Fのモニタの 全ソース elf フォーマット


inserted by FC2 system