PIC AVR 工作室->TopPage->実験くん->コンポジットビデオ64色表示

コンポジットビデオ64色表示

これまで、白黒ビデオ表示から始まって 8色カラーのコンポジット64色のコンポーネントとやってきましたが、 やっぱマイコンとは言ってもアナログカラービデオ(コンポジットビデオ)の表示までこぎつけたいものです。ってことでやってみました。

マイコンとオペアンプを組み合わせて、64色カラーのコンポジットビデオ表示の実験をやってみた記録です。 CXA1645を使わなくてもここまで出来るという証です。

ちなみにこの画像はLM6172を使った場合。オイラの好きなNJM072Dを使うと、今のところもう少し淡い色調しか再現できないんだなぁ…(後述)

今回の作戦

これまでコンポジットについては、マイコンやCPLDを使って8色表示まで挑戦してきました。 でもやっぱどうせならRGB各ビットの有無だけでなく「中間色」も表示したい…アナログRGB表示がしたい…と思う訳です。

アナログといえば当然ながらマイコンから出力するデータ量が増える訳だけど、 8ビットマイコンだからI/Oポートを1クロック動作させる間に出力できるのは8ビット幅。 その中でアナログカラー表示を行うっていうと、各色2ビットずつで6ビット=64色がせいぜいでしょう。

特定の色だけビット数を増やして8ビットフルで使う作戦もあるんだけど、むしろ残った2ビットは映像の重ね合わせ処理なんかに使って、 スプライトと背景の合成とかに使ったほうが賢そうな感じ。

ってことでコンポーネント64色のときと同じように、 RGB合計6ビットの64色「準アナログカラー」を目指します。

やっぱりビデオ信号の復習から

例によって例の図がでてきます。しつこいほど出てくるあの図です。

RGB信号をコンポーネント信号へ、コンポーネント信号をSビデオへ、Sビデオをコンポジット信号へ次々と変換を掛けていくというあの図です。

例によってマイコンでRGB信号を生成し、それをコンポーネント信号、Sビデオ、コンポジット信号へと変換を掛けていくわけです。 ただし、今回は64色なのでRGB各2ビットとなります。

要件抽出、要件定義

例によって組み込んでいく要件を抽出して明確化していきます。

まずはザックリ

主要機能は今回も3.58Mhzでの変調機能、そしてRGB信号をYCbCrに変換するマトリックス計算機能。この2点かと思います。 あとは、それを支える基盤機能をちょいちょい…と。

3.58Mhz変調機能

例によってCr、Cb、-Cr、-Cbと出力を順に時分割で切り替えて「C信号」を生成する機能です。 4つを順々ってわけだから、やっぱり3.58Mhzの4倍の周波数を使ってCr、Cb、-Cr、-Cbを順々に切り替えていけばOK。

そのためにはやはり14.3Mhzのクロック源と2ビットカウンタ、そしてアナログマルチプレクサが必要でしょう。

マトリックス計算機能

マトリックス計算自体はかわりません。例の計算式です。(コンポジットなのでやはり2.03や1.14が登場します)

Y = (0.587G + 0.114B + 0.299R) × 0.7/5 - Sync × 0.3/5
Cb = (-0.587G + 0.886B - 0.299R) ÷ 2.03 × 0.7/5 - Burst × 0.14/5
Cr = (-0.587G - 0.114B + 0.701R) ÷ 1.14 × 0.7/5
-Cb = (0.587G - 0.886B + 0.299R) ÷ 2.03 × 0.7/5 + Burst × 0.14/5
-Cr = (0.587G + 0.114B - 0.701R) ÷ 1.14 × 0.7/5

今回もオペアンプを使うので負電源が必要です。ちなみに、RGBの各情報が2ビットになる点に注意。今回のポイント。 オペアンプ周りでうまい具合にRGBを各2ビット入力出来るようにします。

ここが何と言っても今回の肝。計算式自体は8色カラー表示と一緒ですが、 RGB各2ビットずつを入力して、Y、Cb、Cr、そして-Cb、-Crの5つの信号を出力します。 -Cb、-Crが要るっていうのがミソです。

アタリマエですが、これは5V用の計算式なので、3.3Vマイコンなら計算式中の5で割っているところが全部3.3に替わるわけです。

バースト信号生成

CXA1645と違って、バースト信号のタイミングは例によってマイコン側から教えてあげないとダメ。 ってことでその点はマイコン側でプログラム制御することにします。3.58Mhzの変調自体は色信号と一緒なので共用。 まぁ、8色カラー表示の時とやることは一緒。

先ほどの計算式中にも出てきますが、Cb、-Cbの計算にはバースト信号生成用の入力が必要です。

その他

RGB信号の生成は、64色のコンポーネント の時に使ったプログラムをそのまま流用します。なおAVRのフューズビット設定ですが、 clock outをenableにしておけば3.58Mhzの変調はそのまま使えるはずです。

RGB各2ビットの出力をTINY2313でやろうとすると、以前作った負電源回路 に入力させる約100KhzのPWM出力が取り出せないので、負電源回路は別途必要です。 (後述の74HC161のQD出力は約900Khzでデューティー比50:50なので、もしかしたらこれで負電源をドライブしたら動くかなぁ…実験未済)

当然ですが、このプログラムなりマイコンなりの部分で動画出力を行えば、64色で自由自在に動き回る画を描く事が可能です。 今回はオペアンプ周りの実験が目的なので、動画とか画とかではなく、色付き豆腐だけにとどめますが。

あわせると

やはり「14.3Mhzのクロック源」「2ビット同期カウンタ」「アナログMUX」「オペアンプを使ったマトリクス回路」 「バースト信号タイミングパルス」そして「負電源」あたりが必要になるでしょう。

今回も要件から除外する機能を。SC-H管理、4フィールドシーケンス、その他厳密なタイミング管理、厳密な波形形状の再現などなど。

基本設計

8色のコンポジットビデオ表示が以前動作確認出来ているので、 基本路線はこのままってことにして、ジャンジャン手抜きをします。

8色表示の時と変更になるところは主に2点。1点はマイコン側の出力がRGB各2ビットの計6ビット幅になること。 もう1点は、それを受けるオペアンプ側の入力数がやはり6ビットになること。

逆に変わらない所。14.3Mhzの4クロック毎にCr、Cb、-Cr、-Cbを切り替えるので、 同期カウンタIC(74HC161)を2ビットカウンタとして使います。 あとアナログ信号であるCr、Cb、-Cr、-Cbを切り替えるために4CH入力のアナログマルチプレクサ(74HC4052)を使う辺りも一緒。 このへんは8色コンポジットの時と変わりません。

以下、変わる部分に関して対応を整理します。

変更点1:マイコン側出力を6ビットに

とりあえず64色のカラー表示ができればいいだろうってレベルで考え、 コンポーネントで64色の実験をやったときのプログラムをソックリ頂きます。 RGB各2ビットの計6ビット出力するようになっているいるだけでなく、水平同期の直後にバースト信号のタイミングを出力するプログラムです。

というか、そもそもコンポジット表示用に作ったプログラムをコンポーネント用に流用していただけなので、使いまわせて当然なんだけど…

変更点2:オペアンプ周りの入力を6ビットに

コンポーネント64色の実験と同じように、8色RGBの各入力抵抗を2本の並列抵抗に分け、 2つ併せると元の抵抗値となりかつ各抵抗の比を1:2となるように設定してあげると、 抵抗値の小さいほうが上位ビット、大きいほうが下位ビットということになるはず。

そういう感じでRGBの各抵抗値を上位・下位の2つに分けて6ビット化する作戦。

何と言っても、オペアンプ1個で加減算を行うっていうと、 死ぬほど大変な方程式解かないといけないので、そういう時は何と言っても手を抜いて逃げるのだ…

変更点 その他

8ビットコンポジットの回路ではRGBで3ピンしか使ってなかったので、余ったピンのうちPWMの1ピンを使って100Khz程度の方形波を出力し、 そこからチャージポンプで負電源を動かしていたんだけど、6ビット化したらPWMピンが余らなくなっちゃいました。

なので、負電源回路にはLTC1144でとりあえず間に合わせることに。もっとピン数が多いマイコンならPWMの1個や2個くらい余っているだろうから、 それを使えばLTC1144みたいな高いICは使わなくてもよいかと。

これ以外の部分、たとえば3.58Mhzの変調回路などはおおよそ8ピンRGBと同じ仕組みで行くことにします。

詳細設計

詳細設計というほどのもんではありません。ありあわせのものを基本設計の方針に従ってつなぎ合わせるフランケンです。

回路図

回路図です。(クリックすると別窓に拡大表示します)

これはSビデオ信号(YとCが別)になっているので、Y/C混合回路を組み込むとしたら上記のC回路用オペアンプ (ボルテージフォロアになってるところ)の代わりに、↓

という感じにすればよいでしょう。この場合C信号は74HC4052からの信号を、Y信号はオペアンプからの信号を接続します。 今回はこのようにY/C混合の状態で実験しました。

回路図の簡単な補足1:マイコン周り

まずAVR周り。マイコンにはTINY2313を使います。で、例によって14.3Mhzで動かしてRGBの各上位・下位ビットや同期信号、 バースト信号を出力しつつ、クロック信号はそのままPD2から14.3Mhzの方形波として出力し、74HC161と74HC4052を通して3.58Mhzの変調を掛ける作戦。

回路図の簡単な補足2:オペアンプ周り

各オペアンプ周りの抵抗は、8ビットコンポジットの計算結果を元に1:2に按分して、 それをそれぞれTINY2313の出力ピンに1本1本繋いでいきます。いっぱいあるのでメンドウ。

あと、8色の時はすべてのオペアンプはNJM072Dで行けたんだけど、今回も同じように組んで実験したら一部動作がうまく行かなかったので、 Y信号、C信号用(もしくはY/C混合用)のオペアンプはもうちょっと上等なヤツをチョイスしてみました。

具体的には、OPA2134PA、LM4562NA、LM6172あたりならokでした。SR=20以上で、ユニティーで安定なものなら何でもいいと思います。

逆に、Cr、Cb、-Cr、-Cb用のオペアンプは、NJM072Dより少しくらい遅いアンプでも動くはずです。(SR=15程度?)

回路図の簡単な補足3:変調回路

8色カラーの時と同じで、74HC161と74HC4052を使って変調を掛けます。

回路図の簡単な補足4:負電源

各オペアンプと74HC4052は負電源(Vee)が必要なので、そのために使うのがLTC1144。5V電源からおよそ-5Vが作り出せて、 しかも面積も小さくて済むので便利。ただ秋月で300円はちょっと高いね…。

コンデンサには、普通の黒い電解コンではなく、東信の茶色のやつ(低ESR品)を使いました。 どうせ1個20円前後だし、この手の用途では出力電力的に有利です。

回路図の簡単な補足4:テストボードのクセについて

ブレッドボードにtiny2313マイコン登載ボードを挿して実験する場合、一つ注意点があります。

tiny2313では出力端子の絶対数が少ないため、ISP関係の端子までビデオ信号出力に利用しています。

ISP端子は、デジタルI/Oとして使うならあまり気にすることもないんですが、 通常は外部回路とショートしないようにボード上に保護抵抗が挿入されていることが多いと思います。

保護抵抗が入っていること自体は問題がないんですが、今回のような場合は保護抵抗がオペアンプ周りの抵抗と競合して悪さをします。

この実験でtiny2313を使用する場合は、一旦プログラムを書き込んだらIC単体でブレッドボードに挿して実験するか、 ISP周りの端子だけは別途ICから直接線を引き出すなどの工夫が必要になります。 メンドウな場合はmegaシリーズなどの多ピンのマイコンを使ってください。 RGBの6ピン分を独立して引っ張り出せるマイコンならOKです。

プログラム

コンポーネントの64色表示の時に作ったプログラムそのままです。もともとコンポジット用に使おうと思って書いたプログラムなので…。

tiny2313用のプログラムです。

今回は14.3Mhz÷4=3.58Mhzの変調も必要になるので、clkout信号も出力して使います。

実験結果

盛り付け例

ブレッドボードに盛り付けたらこんな感じです。オペアンプ周りの抵抗と配線が特盛りです。

実験結果:LM6172の場合

ボードに電源を繋ぎ、ビデオキャプチャーボードで取り込んでみたらこんな感じになりました。 オペアンプは3つ(6回路)ともLM6172を使った図です。

大体okでしょう。

5%誤差のカーボン抵抗を使っているせいなのか、計算自体に誤差があるのか、色調に多少の誤差はあるみたいですが、 大体目論見通りの発色が出て一安心。ふぅ。

とりあえず安全牌としてのLM6172なので、もっとSRが遅いオペアンプでも実験をしてみました。

実験結果:NJM072Dの場合

オペアンプを3つ(6回路)ともNJM072Dにしてみました。このオペアンプは秋月では単価約50円と安い割に、 SR=20V/usと速いので個人的にお気に入りのものです。ただ、NJM072C(同SR=13V/us)と比較すると、 ユニティーで安定し難い(使用が推奨されてない)ので、そこが心配の種。

同じ仕組みの8色カラーの実験では何とか色が出ていたので、 今回もうまく行くだろうと思ったら…

微妙な発色…。(これはキャプチャーじゃなくてデジカメで撮ったものですが、発色悪いのはデジカメではなく信号波形のせいです)

パスコン入れたり色々試してみたものの、とりあえずうまく行きませんでした。発振したみたい。 負電源に使っていたLTC1144が非力だったか、ノイズを撒き散らしているかどちらかのような気がします。 オシロで見たらC信号が殆ど潰れて死んでました。

実験結果:Y信号生成とYC混合だけをLM6172に戻してみる

Cb、Cr、-Cb、-Crの信号生成には元々それほどの速度は必要無いので、今回の回路で速度が必要な部分… 特にYC混合まわり(と、ついでにY信号)用のオペアンプだけを高速なLM6172に戻して見ました。すると…

バッチリ出た。見た目の発色はかすかに違うんだけど、全部LM6172にしたときと一緒。

やっぱYC混合周りの速度が必要だったか…。ただ、LM6172は単価がちょっと高いので、 もうちょっと安い(かつSR=20V/usの)オペアンプに替えてみることに…

実験結果:LM4562を試してみる

LM6172のところ1個を高音質オーディオ用のLM4562に替えてみます(同様にYC混合部分)。

やっぱ出るじゃん。LM4562、イカス!

ちなみに、似たようなオペアンプとしてOPA2134を使っても大体同じ結果になります。 SR=20V/usの線っていう考え方自体はokみたいだけど、どうやらNJM072Dの安定性に問題があるみたい。

まとめ

オペアンプと発色について

とりあえず、動作原理と回路図自体はまぁ旨く機能することが確認出来ました。よかった、よかった。 抵抗値もまぁ大外しではないっぽい。(白がちっとピンク掛かったりしてるけど)

やはり問題は使うオペアンプのスペック。

8色の時と同じように、NJM072D×3個で旨く動いてくれればよかったんだけど、 結果的には最終段(YC混合回路とY信号)のオペアンプには低倍率で安定なオペアンプじゃないと厳しいみたいです。

逆に、Cb、Cr、-Cb、-CrはSR=20V/usも要らないので、 もうちょっと遅いオペアンプを使ってそっちでコストを削ってみるのも一興でしょう。

安定しつつ、できるだけ安く仕上げると考えると、オペアンプ2個をNJM072D、もう1個にOPA2134をチョイスし、 抵抗43個(@5円)、ロジックIC2個を積み上げると、合計約715円(nekosan調べ)。CXA1645よりちょっと安い?

RGB各2ビットずつの64色カラー、全部で6ピン+シンクロ関係と非常に省ピン。 ということで小さいマイコンでも十分にカラービデオが簡単に出せてなかなかかと思います。

そこそこの応用範囲とそこそこの安定性、そこそこの表現力、そこそこのコストってことで、 まぁ期待してた通りの結果がでて良かったと思います。できれば全部NJM072Dで済ませると良かったなぁ… 電源の安定性次第かなぁ…

電源について

今回は負電源にLTC1144を使いました。高速オペアンプ3つをドライブするのは厳しかったようです… もしくは、ICの発振周波数と今回の回路が相性悪かったか…

8色の実験を行った時は、余っていたPWMとチャージポンプ回路で負電源を作り出してましたが、 そんな風にしたらNJM072D×3つでも旨く動いてくれるかもしれません。

というわけで、以上を以って実験を終了とします。