PIC AVR 工作室->TopPage->実験くん->ディスクリート部品でコンポジットビデオ表示(デコッ8)

ディスクリート部品でコンポジットビデオ ”デコッ8”

これまでにもtiny2313でコンポーネントカラービデオ表示をやっちゃったり、 CPLDでコンポーネントビデオ表示の実験をしたりしたことがありますが、 もう一歩進んで(退化して?)、どこでも手に入るディスクリート部品だけを使ってカラーコンポジットビデオの表示をやってしまおうという 無謀な実験に挑戦してみました。

これを使えば、専用のビデオデコーダICやCPLDなどを使わずに、普通のマイコンでも少しの外付け部品で カラービデオ信号が作れるようになるわけです。

デコッ8とは

安い汎用オペアンプやいつでもどこでも手に入る汎用のロジックICを数個使用するだけで コンポジットビデオのカラー表示が一応なんとか実現出来ました。CPLDやFPGA、CXA1645などを使わなくても マイコンに数個の汎用ICを繋ぐだけでカラーコンポジットビデオ表示が出来ちゃうってわけです。 しかもマイコン以外の外付け部品は合計で約500円程度と安く済むので専用ICやCPLDよりも安価。 しかもアナログ入力なので、場合によってはCPLDよりも応用範囲は広いかも知れません。

オペアンプや汎用ロジックICはICであってディスクリートじゃないジャン!という突っ込みもあると思いますが、 まぁ、専用ICと違っていつでもどこでも手に入る汎用品だけで組むっていうことで…。

ディスクリート部品を使ったデジタルRGB(8色)のコンポジットビデオ表示…名づけて”デコッ8”。 相変わらずのネーミングセンスなのは内緒。

例によって、適当なマイコンでRGB信号を吐き出しておいて、それをネコ8 の時の様にコンポジットビデオ信号に変換します。なので、大元のビデオ信号を吐き出すためのマイコンは 白黒ビデオ信号が出力できる程度の処理能力があれば何でも構いません。PICでもAVRでもH8でも…お好きなものをどうぞ。

外付けICでRGB→コンポジットの変換をやってしまうことで、マイコン側のソフトウェア上は やっかいなサブキャリア変調を完全に忘れちゃってもOK。白黒信号並にシンプルなプログラムにできちゃうので、 アプリケーションの仕様検討や設計だけに意識を集中できるってわけです。ハードウェア任せでいいので、 位相が勝手にズレて色が狂ったりしてカラーキラーが働いちゃう心配もありませんし。

arduinoとかでも白黒ビデオ信号くらい作れるでしょうから、その映像部分をRGB出力に替えれば簡単にカラービデオ表示ができるってわけです。

改めて、ビデオ信号の復習から

例によって例の図がでてきます。コンポーネントビデオ出力やネコ8でもしつこいほど出てきたあの図です。まずは復習を。

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

コンポーネントビデオ信号の実験CPLDのコンポジット表示の実験の時と同じように、 マイコンでRGB信号を生成し、それをコンポーネント信号、コンポジット信号へと変換を掛けていくイメージのことをまたやるわけです。

CPLDのコンポジット表示の実験の時に書きましたが、 Sビデオ信号やコンポジットビデオ信号に含まれる色要素信号(C信号)は、RGB信号にマトリックス計算を掛けてCr、Cbを 算出しておきそれをCr、Cb、-Cr、-Cb…の順で14.3Mhzで切替えて出力することで生成でき、 それによって映像に任意の色を付けられることが判っています。専用ICのCXA1645なども内部で行っている処理は同じ内容です。

それと同じ事を汎用のICを使って行えばいいわけです。しかもいつでもどこでも手に入る部品、 しかも安い部品だけで行ってしまおうという魂胆です。

ビデオ信号の規格をキッチリ盛り込むとなるとそれなりにたくさんの機能要件を盛り込まないといけなくなって大変なので、 要件定義の結果から削っても問題ない要件はサックリと落としてしまい、最低限必要な要件だけに絞りに絞って、 その抽出した要件一つ一つについて機能分割~設計という具合にブレークダウンしていきたいと思います。

それが今回の実験:「デコッ8」というわけ。

要件抽出、要件定義

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

まずはザックリ

まずは盛り込むべき機能の用件をザックリと洗い出していきたいと思います。まずカラーコンポジット信号で一番気になるのは、 何と言っても3.58Mhzでの変調機能。そしてRGB信号をYCbCrに変換するマトリックス計算機能。この2点かと思います。

そして、これらの機能を支える基盤機能…電源回路など…を盛り込んで統合すれば一丁あがりという感じです。 これら1つ1つの要件をもう少し詳細化してみます。

3.58Mhz変調機能

ここでいう変調とは、3.58Mhzの1波形を4等分した時間ごとにCr、Cb、-Cr、-Cbと出力を順に時分割で切り替える機能です。

CrやCbといった信号はいわゆるアナログの電圧情報なので、これを時分割で切り替えるにはマルチプレクサ(MUX)、 しかもアナログ信号を扱うことができるアナログMUXが必要になるわけです。動作速度的には、3.58Mhzの4倍速=14.3Mhz が余裕で扱えるスイッチング速度が必要になるでしょう。そして、このアナログMUXの4つのチャンネルを0、1、2、3、0、1、2、3…と順に 切り替えるためのタイミングを教える情報…つまり2ビットカウンタと、その2ビットカウンタをカウント動作させるクロック源が必要になるでしょう。

纏めると、3.58Mhzの変調を行うためには14.3Mhzのクロック信号源、2ビットカウンタ、 4チャンネルアナログマルチプレクサが必要になります。

なお、以前VHDLとCPLDでコンポジット信号の表示をしたとき にあれこれ実験してみてわかったことですが、2ビットカウンタはフリーランさせておけば色信号の位相がきちんと保たれ、 カラーキラーも働かないことが判っているので、それを踏襲すれば2ビットカウンタにはリセット機能は必要ないことが判ります。

マトリックス計算機能

RGB信号をY、Cb、Crの各信号に変換することをマトリックス計算といい、NTSCの標準画質(SDTV)では コンポーネントでもコンポジットでも以下の計算式を用います。

Y = 0.587G + 0.114B + 0.299R
Cb = -0.587G + 0.886B - 0.299R
Cr = -0.587G - 0.114B + 0.701R

そしてさらに、コンポジット信号の場合はこれらのCb、CrをY信号にこのまま合成するとコンポジットビデオ信号が取り扱う電圧の幅を はみ出してしまうため、さらに以下の計算式を使って色信号のレンジを狭めるということを行います。

Cb’ = Cb ÷ 2.03 
Cr’ = Cr ÷ 1.14

これらの計算を行うことをマトリックス計算といいますが、まぁ、線形の計算式ですからオペアンプを使って変換するのが いちばんシンプルでしょうね。

ちなみに、今回はマイコンにtiny2313を5Vで動かす前提なのですが、上記の式のRGB信号は0V~0.7Vの約0.7Vpp (シンクロ信号除く)を元にした計算式なので、マイコンのRGB出力が5Vだとすると、マトリックス計算の式は

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

といった感じになります。マイコンが3.3V動作の場合は計算式も適宜変える必要があるのは言うまでもありません。 (式の一番後ろの部分の5で割っているところを3.3で割ってください)

バースト信号生成

白黒映像信号と比較して大きく異なることの1つは、水平同期信号のすぐ後ろに載っているバースト信号の有無でしょう。 このバースト信号も実はマトリックス計算に含まれます。バースト信号について軽く復習から。

バースト信号は、水平同期信号の立下りから19サイクル(@3.58Mhz)経過後から9サイクル(同3.58Mhz)の間 出力することになっています。14.3Mhzクロックで言うと、立下りから76クロック経過後から36クロック分出力するわけです。

バースト信号生成で少々やっかいなのはこのタイミング管理です。逆に、3.58Mhzの変調処理自体は色信号の変調処理と何ら変わらないので、 変調についてはマトリックス計算の中に押し込んでおけばいいと言う事になります。つまりRGBの色信号と同様に扱うわけです。 そうすれば、バースト信号生成のタイミングでパルスをマイコンから一つ吐き出すだけで済みます。

さて、そのタイミング管理…このシンクロ信号からちょっとだけ(数u秒)送れたパルスを作り出す…みたいなことを外付け回路でマトモにやろうとすると、 カウンタ回路と比較演算回路が必要になっちゃって規模が大きくなっちゃいます。 なので、マイコン側のソフトウェア上でパルス生成をする方針で行きます。 それなら水平同期信号生成のついでにちょっとバースト信号用パルスを出すだけなので外付け機器は要らないし、 ソフトウェアの負荷も非常に軽微で済みますからね…。

まぁ、最近は8ピンなどの小規模マイコンが1個100円程度で買える時代なのでそういうのを利用しちゃう手もあります。 つまり、シンクロ信号をトリガに外部割込み→一定時間後に一定幅のバースト信号用パルスを生成。そんなことも簡単でしょう。 CPLDなどを使わなくてもこの程度の機能なら安いマイコンに負担させることも充分可能かと思われます。

まぁ、バースト信号用のパルスも色信号と合わせて変調するということになるので、 先ほどのマトリクス計算の式にも組み込む必要が出てくるわけですが、それについては後々。

その他周辺部分

上記の2つの機能を盛り込むにあたり、必要となる周辺回路の洗い出しをするためにある程度カラクリにアタリを付けておこうと思います。 要件抽出のためなので、ザックリです。

まずクロック信号ですが、今回はマイコンを14.3Mhzで動かしつつマイコンのckout端子からクロックを引っ張り出せば特別な回路は不要でしょう。 逆に、発振回路を別途用意するとなるとちょっと面倒なので、今回はマイコンのCPUからクロックを外部に引っ張り出すことを念頭に置きます。

2ビットカウンタ。これはマイコンの内蔵PWMを2個使えば十分に生成可能ですが、 貴重なPWMを湯水のように使わなくても済むようにということで外付けのカウンタICを使う方向で考えておきます。 ちなみに上位ビットと下位ビットでタイミングに遅延があるとハザードがバリバリ出ることになるので、 同期カウンタ74HC161か74HC163あたりが候補に挙がるでしょう。リセット機能は必要無いのでどちらでもいいはずです。 これらのICは普通に5V単電源で動くのでマイコンと共用で充分です。

(本当は、0、1、3、2、0、1、3、2…とカウントができればグレーコードになるので、ハザードに関する心配は更に小さくできるのですが、 それらしい汎用ICは見つかりませんでした)

なお、内蔵PWMでカウンタを組むのであれば、上記のクロック回路を引っ張り出す必要が無くなるのは言うまでもありません。

アナログMUXですが、同様に74HCシリーズから探してみます。今回の要件にマッチするのは74HC4052になるかと思います。 このICは2ビットのコントロール信号(A、B端子)に従って4つのアナログ入力から1本選択して共通端子に繋いでくれるものです。 このICは今回のように入力信号に負電圧も扱う場合はVee端子に負電源を接続する必要があります。

(ちなみに74HC4052は4つの端子と共通端子の間に数Ω~数十Ωの内部抵抗があるので要注意です。 テレビ内部の75Ω負荷をドライブする時に無視できない大きさです)

そしてオペアンプ周り。今回は上記のマトリックス計算の算出式を愚直にハードウェア仕様に落としていきたいと考えているので、 扱う信号は正電圧、負電圧の両方が現れます。つまり電源も正電源、負電源が必要ってことです。

オペアンプ上で扱う電圧にオフセット電圧を加算して「正電圧の信号しか使わない」ということにしてしまえば負電源は要らなくなるのかも知れませんが、 オペアンプにしても74HC4052にしても、5V単電源だけで扱うと動作速度が遅くなっちゃうという弊害もあるので、 今回はそのあたりも考慮して正負両電源を使用する方向で進めます。

デジタルRGBの様に少ない色数しか扱う必要が無いのであれば、マトリックス計算にオペアンプを使わないという裏技も考えられるのですが、 そのことについては後書きででも触れたいと思います。その場合はマトリックス計算をオペアンプで演算処理をさせる必要がなくなるので 複雑な抵抗計算の手間が省けて面白そうなのですが…この場合でもインピーダンス変換に最低1個はどうしても必要になりそうです…

以上のことから、アナログMUXやオペアンプに供給する負電源が追加で必要になりそうだと判りました。

結局

結局必要となる機能要件をまとめると、「クロック源」「2ビット同期カウンタ」「アナログMUX」「オペアンプを使ったマトリクス回路」 「バースト信号タイミングパルス」そして「負電源」となるかと思います。この程度組み込んでおけばビデオ信号に好きなように色をつけられます。

逆に、要件から除外する機能も挙げておきましょう。SC-H管理、4フィールドシーケンス、その他厳密なタイミング管理、厳密な波形形状の再現などなど。

概要設計、基本設計

機能の洗い出しが出来たので、それを繋いでいって全体像に描き出してみます。

まず左側にあるBOXがマイコンで、今回はRGB信号などを生成する機能を担います。適当なマイコンに置き換えていただいて構いません。 今回はtiny2313を使います。

で、マイコンから出力する信号が主に4つ。RGB信号、混合同期信号、バースト信号、CPUクロックです。 正確に言うと、図の下部にある負電圧生成のBOXへ供給するパルスもマイコンで作り出すことになるのですが、これについては後々。

まずマイコンからの出力を受け取って処理するBOXが2つあります。一つは2ビットカウンタ。もう一つはマトリックス回路です。 2ビットカウンタは3.58Mhz変調を行う際に使うもので、3.58Mhz×4倍の速度でカウントすることになっています。 別にマイコンから供給しなくてもいいのですが、発振回路って個別に作ると結構厄介なので、マイコンのCPUクロックを頂戴することにしました。

もう一つのマトリックス計算の回路ですが、これはオペアンプを使ってRGB信号をY、Cb、Crの各信号に変えていく演算処理を担います。 もう少し言うと、輝度信号(Y信号)にはこの時点でシンクロ信号を混ぜてしまいますし、色信号(特にCb信号)には映像情報としての色信号だけでなく、 バースト信号の要素も混ぜて計算をします。ビデオ信号規格自体の生成については既に他のページ などでちょくちょく取り上げているのでこのページでは説明を省き、主にビデオ信号における色信号の生成について触れていくことにします。

あとバースト信号がCb信号に特に影響しているということを触れましたが、その理由について補足を。

C信号上には映像に色を付ける為の「色信号」と、その色信号の色相(タイミング)を規定する「バースト信号」が含まれているのはご存知のとおりです。 そのバースト信号は、位相の角度でいうと180°に相当し、Cr、Cb、-Cr、-Cbの順に出力電圧で表現すると それぞれ「0V、-0.14V、0V、+0.14V」となります。つまり、Cbと-Cbのところだけ電圧が現れるわけです。

マトリックス計算の式ではこのことを加味して、マイコンが出力したバースト信号のパルスをCb、-Cbの計算時にだけ取り込んで 計算すればよいということになるわけです。

というわけで、図の中でマトリックス計算のBOXがバースト信号パルスをマイコン側から入力しているのは、マトリックス計算に、 特にCb計算に必要となるためです。

マトリックス計算回路が出力したCr、Cb、-Cr、-Cbの各電圧を14.3Mhzで時分割で切替を行うのがMUXで、 その切替タイミングを規定しているのは2ビットカウンタから出力されたカウンタ値(AとBの2ビットの情報)ということになります。

さて、コンポジット出力と言いながら図上ではY信号とC信号が別々に吐き出されていますが(Sビデオ信号)、 これらY・Cを合成していわゆるコンポジット信号に混合するのは簡単なので、とりあえずSビデオ信号を出すことを第1に考えます。混合回路は後々。

そして、マトリックス計算用のオペアンプやMUXには負電源が必要になるので、何らかの形で負電源を登載することにします。

ザックリですが、以上が上の図の意味です。で、これらをもう少しブレークダウンしていきます。

詳細設計

諸々の個別機能について実際に作りこみができるレベルまでブレークダウンしていきたいと思います。

マトリックス計算回路周り

RGB信号を入力してYCbCr信号に変換する回路です。ただ今回はこの計算回路上でY信号にシンクロ信号を載せたり、 C信号(特にCb信号)にバースト信号を載せることにします。このことをマンガにしたのがこれです。

まずはマイコンから出力する必要のある信号から。

これはマイコンから出力するRGB信号などのパルスを簡単に表したものです。走査線1本を表示するのに必要な情報だと思ってください。 今回はマイコンにtiny2313を5V14.3Mhzで稼動させようと思っているので、パルスの電圧は5Vになります。

出力のタイミングですが、まず左側にシンクロ信号(水平同期信号)があります。このへんは白黒映像と変わらないので特に説明は要らないでしょう。 そのすぐ右にバースト信号用のパルスがあります。バースト信号は水平同期信号の立下り(この図のパルスで言うと立ち上がり)から 19サイクル(@3.58Mhz)経過後から9サイクル分出力することになっているので、 そのタイミングにあわせてマイコンからバースト用パルスを出力しておきます。

ちなみに19サイクル、9サイクルは、14.3Mhzクロックではそれぞれ76クロック、36クロックに相当します。

今回はマイコンが映像信号を生成しているのでバースト信号用パルスもマイコンで簡単に生成出来ますが、MSXやPC8001シリーズなどの 古いPCのRGB信号を扱いたい等と言った場合には、シンクロ信号を基準に外部回路でバースト信号用のパルスを生成する必要が生じるでしょう。

さらにその右隣には、RGBの各信号が並んでいます。白黒映像の場合はここが1つの信号しかなかったわけですが、 カラーなのでRGBの3つに分かれているわけです。まぁ、それだけの話なので複雑なことは何もありません。

で、これらの信号をマトリックス計算に掛けてYCbCrの信号に変換したイメージがこれ。

上の4つがそれぞれCr、Cb、-Cr、-Cb信号です。Cb、-Cbのバースト信号の部分にはご覧の通りバースト用の信号が載っていますね。 (±0.14Vの小さいパルスです)

今回はこれらをオペアンプで演算させることにします。ポイントになるのは、Cr、Cbの2つだけ計算すればいいというわけではなく、 -Cr、-Cbの計算もしないとイケナイということ。

論理の世界であれば、マイナス値の算出って単純に(-1)を掛けてあげればいいだけなんですが、 リアルの世界でアナログ電圧値について同じ事をしようとするとCr、Cbを計算したオペアンプの後続にもう1個直列に 正負反転用のオペアンプを噛まさないといけなくなりそうな感じがします。倍率1倍の反転増幅回路です。

でもそうするとCr、Cbと-Cr、-Cbでは出力端子に出てくるまでのタイミングに差が出てしまうし、 使用するオペアンプもそれなりに速い物が必要になりそうです。

なので別の作戦で考えてみます。Cr、Cb、-Cr、-Cbの4つの計算を4つのオペアンプで並列に行ってしまいましょう。 当然4つのオペアンプが必要になりますが、オペアンプを直列に繋いでいるわけではないのでオペアンプの動作速度が多少遅くても大丈夫っぽいです。 具体的には、コンポーネントビデオ表示ができる程度の速度が出せれば充分でしょう。過去の実験 によるとNJM2114DD、NE5532、NJM4580あたりでも大丈夫でしょう。 今回はコストをギリギリまで切り詰めるという意味で、IC1個(2回路入り)50円(@秋月)というNMJ072Dを使ってみました。

秋月で売っているNMJ072Dはスルーレートが20V/usという高速バージョンなのですが、 ボルテージフォロアや低倍率の増幅では発振しやすいという不安定バージョンなので、 スルーレートが13V/usの別バージョン(こちらは同じ072でも発振し難い設計になっている)を使うほうが安全かもしれません。 …速度的には映像のエッヂが少々崩れるかもしれませんが…

これらのオペアンプから適当に好きなものを選択し、以下の計算式となるような回路・抵抗値を組み込みます。

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

計算式から抵抗値を算出するやりかたについては本筋ではないので端折りますが、 以前書いたあのページ が参考になるでしょう。実際の回路配置や抵抗値などは後ほど回路図にまとめて示します。本当は詳細設計上に明記するのでしょうが、 複雑すぎて書くのが面倒なので計算結果の抵抗値だけ回路図に書くことにします。興味のある方は独自に計算してみてください。

実はCrと-Cr、そしてCbと-Cbの各抵抗は単純にプラスマイナスを逆接続すればいいという話ではなく、 4つそれぞれを個別にゼロから計算しないとならないので、実は物凄く手間が掛かります。しかも1個1個の計算が全部複雑だし…。 算数苦手なオイラは何時間も掛かってしまった…でもまぁ1回計算しておけば使いまわしができるからね…。使いまわししてください。

ちなみに図の一番下の黄色いところ…C信号…については次項のMUXのところで触れます。

MUX(マルチプレクサ)周り

その名の通り、単純なマルチプレクサの処理をさせます。今回はCr、Cb、-Cr、-Cbの4つの信号を時分割で切り替える という機能を担います。ただし扱う信号がアナログ電圧なので、アナログMUXを使います。

東芝などのサイトに行って汎用ICの一覧から「4入力のアナログMUX」を探してみると74HC4052に行き当たります。 このICはA端子、B端子から2ビットの制御信号を入力して、それに併せて4つのうち1端子を共通端子に接続してくれるというものです。 Xチャンネル側、Yチャンネル側の2組の信号群を扱うことができるのですが、今回はC信号用のCr、Cb、-Cr、-Cb の4つの切り替えしか行わないので片チャンネルだけ使います。

A、Bの各制御端子に2ビットカウンタを繋いでおいて、0Y~3YにCr~-Cb入力を、Y-comにC信号出力を繋げば、 あとは自動的に3.58Mhz(14.3Mhz÷4)で変調処理が行われることになるわけです。先ほどの図で出てきたC信号(黄色の波線)の部分が このY-com端子の出力と考えて下さい。まさにCr、Cb、-Cr、-Cbの電圧が順々に切り替えられて出力された波形がC信号というわけです。

と言うようにこのIC自体は単なる電子スイッチのようなものですが、ただこのスイッチには数Ω~数十Ωの内部抵抗があるため、 各信号をこのIC経由で取り出した場合、テレビ側の75Ω抵抗をドライブする際に無視できない大きさの抵抗となってしまいます。 なので、このICの出力を一旦オペアンプで受けてインピーダンス変換してからテレビに接続する必要があります。 回路図に落とし込むときの要注意事項。詳細はのちほど。

今回のカラーコンポジットの作戦の中で最も動作速度が求められるのは、マトリックス計算用のオペアンプではなく実はこのアナログMUXです。 最も速い14.3Mhzでの切替が行われるからです。しかも切り替えをダラダラやってしまうと信号が乱れてしまうので、 14.3Mhzよりもかなり速い速度じゃないとダメなはずです。逆にマトリックス計算用のオペアンプが少しくらい遅くても ドット表示や発色、同期信号などへの影響は殆どありません。表示できるドットが少し大粒になる程度です。

ちなみに74VHCシリーズにもう少し高速なバージョン(フラットパッケージ)があるのですが、 近所のお店の店頭では入手し難いと思うので74HC4052で我慢します。 本当は、データシート見ると74HC5042ではちょっと微妙なスペックではありますけどね…

2ビットカウンタ周り

次に2ビットカウンタ周りについて。大した機能じゃないのでアレコレ書くほどの物でもないんですが、 動作の内容とその「意味」を明確化しておきたいと思います。

図の下のほうから見ていきます。まず一番下。これは74HC4052の0Y~3Yのどの端子をY-comに接続するのか そのタイミングを表した図です。0Y~3Yの4個一組を出力すると1波形3.58Mhzになると言うわけ。 で、そうなるようにA、B各コントロール端子に0~3のカウンタ値を入力してあげればいいわけです。 今回はこのカウンタ値を作るのをカウンタICが受け持ちます。

マイコンの余ったPWMで作り出してもいいけど、PWMは音声出力その他色々使える便利なリソースなので無駄遣いせず、 今回はカウンタ単機能のICをチョイス。

図の上の方は、マイコンから14.3Mhzのクロック出力を受けてカウンタを動かしますよっていう意味。難しいもんではありません。

本当は、カウンタ値を0、1、3、2、0、1、3、2…と切り替えられればグレーコードとなり、ハザードが少なくできるのですが、 そういう都合のいいカウンタICが見つかりませんでした。CPLDならなんとでもできるんですけどね…

負電源周り

オペアンプとアナログMUXを動かすのに今回は負電源が必要になります。

オペアンプIC3個(6回路)と74HC4052が1個の合計4個のICを動かすのに充分な電力が取り出せる必要があります。

ビデオ信号を扱うので、扱う電圧はせいぜい±1Vです。これにオペアンプの不感領域の分を考慮し(今回rail-to-railのオペアンプは使わないので…)、 -2~-3V程度の負電圧が得られれば何とか実用になるでしょう。

IC4つ、しかも最終段のオペアンプ以外はそれほど電流を取り出さないので、 以前実験で組んだチャージポンプ式の負電源でもなんとかなるだろうと予想し、 今回はこれをそのまま使うことにします。

ちなみに本当はインピーダンスマッチングを考慮して、オペアンプから出力するビデオ信号は2倍の電圧(1.4Vpp)にしておき、 オペアンプ出力直後に一旦75Ω抵抗を直列で経由して、テレビ側内部で再度75Ω抵抗を通過するというのが正しい姿だと思われます。 そのためにはオペアンプが出力する電圧も2倍にしておくのが正しい姿ですが、 そうするとオペアンプのSRに求めらられるスペックも2倍の数値が必要になっちゃうので、 ここは我慢してSR=20V/us程度で済むようにインピーダンスマッチングは考えないことにします。

回路図

以上のことを加味して、回路図に落とし込んでいきます。

縮小表示してます。クリックすると別窓で拡大表示します。

簡単に解説を。

まず左側の緑の丸で囲ったところ。RGBからCr、Cb、-Cr、-Cbに変換する回路です。 それぞれがオペアンプ1個で構成した加減算回路です。4つの信号を作るためにオペアンプを4回路使っています。NJM072DならIC2個に相当。

ちなみに抵抗値ですが、以前のコンポーネントビデオ用の回路を組んだときと違い、 理論値より2~3%程度の誤差なら目をつぶり、E24系列で丸め込みました。5%のカーボン抵抗でも十分でしょう。

あと、-Crの計算は紙上で延々と手計算したんだけど、綺麗な数値で上手く解けなかったので仕方なく適当に抵抗値を取っ替えひっかえし、 それっぽい出力になる抵抗値(近似値)を見つけて充てました。お暇な方は是非キッチリした抵抗値を探してみてください。

Cbと-Cbは先述のとおりバースト信号も入力して計算に充てています。

青い丸は3.58Mhzの変調を掛ける回路です。14.3Mhzのクロックで2ビットタイマーをフリーランさせるのが74HC161。 その2ビットタイマーを受けて、Cr、Cb、-Cr、-Cbと順に切り替えするのが74HC4052です。14.3Mhzのクロックは マイコンのclkoutピンから供給していますが、14.3Mhzのオシレータを繋いでも構いません。部品代が高くなりますが。

赤い丸の部分は負電圧生成のためのチャージポンプ回路と、それをドライブするバッファ回路です。トランジスタは型番どおりのモノか、 もしくはIceがこれ以上大きいトランジスタペアを使ってください。 現時点では秋月でも千石でも手に入るメジャーなトランジスタなので特に問題は無いでしょう。 トランジスタの上下の抵抗は使い慣れない6.8Ωです。6.8kΩでも6.8MΩでもないのでご注意を。

チャージポンプ回路で使っているダイオードはショットキバリアなら多分何でもOK。 コンデンサは普通の黒い電解コンではなく、低ESRタイプを使ってください。東信の茶色のやつなら殆ど同じ値段(1個2~30円程度?) なのでこれが良いでしょう。OSコンなら尚更良しです。普通のシリコンダイオードやESRの大きいコンデンサを用いると、 出力できる負電圧の電力が小さくなってしまいます。

その他の部分について補足。Y信号周りのオペアンプ抵抗計算は考え方がコンポーネントビデオと全く一緒です。 74HC4052の出力を一旦オペアンプのボルテージフォロアに繋いでいるのは74HC4052の内部抵抗が無視できないほどの値を持っているからで、 このままではテレビに直接繋ぐと出力電圧が微妙に狂います。なので、ボルテージフォロアを使ってインピーダンスを下げています。

今回はオペアンプにNJM072D(SR=20V/us)を使いましたが、このバージョンはボルテージフォロアなどで発振しやすいため、 SR=13V/usのNJM072Bとか、NJM2114DDとか、別のオペアンプを使うと良いかもしれません。 あと、比較的低価格ながら50V/usと高速なNJM318Dあたりも選択肢に入りそうですが、これはIC1個に1回路しか入っていないので、 6回路分揃えるとそれだけで1000円近く行ってしまいます…。予算がゆるせば悪くは無い選択かも。

マイコンやオペアンプ含め、各ICのVccとVeeには0.1uFのパスコンを入れて下さい。トランジスタで組んだバッファ回路にも パスコンが必要です。(上下の6.8Ωも含めバッファ回路全体を挟み込む感じでパスコンを入れて下さい)

YC混合回路

上記の回路ではY信号とC信号が別々に出力されてますが(つまりSビデオ)、YC混合のコンポジット信号に変えるのは簡単です。 ボルテージフォロアになっているオペアンプの周りを少々弄ればYC混合回路に簡単に変えられます。回路はこんな感じ。

YとCを入力して、非反転の増幅率1倍で加算して出力します。つまり単純な足し算。この回路の動作原理は簡単。

74HC4052から出力されるC信号の電圧と、オペアンプから出力されるY信号の電圧を、2個の10kΩ抵抗で分圧しています。 すると非反転入力端子にかかる電圧は中間値(平均電圧)となるので(Y+C)÷2となります。 で、それを非反転増幅の増幅率2倍で出力すると言う回路です。

すると、(Y+C)÷2 ×2 =Y+C、つまり非反転でYとCを加算したのと同じ電圧になるわけ。 で、先ほどの回路図の右下にあるボルテージフォロアの部分をこの回路に置き換えて使ってください。

ただ、今回の実験ではこのYC混合回路は使ってません。Sビデオ出力(Y-C分離の回路)だけしか実験してません。 必要に応じて使ってください。(実験未済なので何の動作保証もありませんが…まぁ、でも単なるYC混合回路なので動くでしょう、多分)

ソフトウェア

これまでに挙げた機能の中で、プログラムに組み込む対象の機能を抜き出して整理し、特に決まっていない部分に関しては今回の回路の確認用として 最低限必要な機能を満たしつつ、かつこれまでに作ったプログラムを最大限流用して手を抜きまくる方針で行きます。

で、以下のような感じに考えてみました。

(1)処理概要…表示内容

tiny2313のメモリ量ではどうせ大した事はできないので、例によってシマシマのテクスチャーを含むカラーバーコードを表示することにします。 絵が動かないのはイマイチなんですが、今回の実験の本質ではないので手抜きしまくります。

(2)動作クロックとその周り

回路図の通り14.3Mhzのクロックを使用しますが、これまで作ったtiny2313用カラーバーのプログラムは10Mhzとか20Mhzとかだったので、 1ラインの処理の長さが大きく変わります。14.3Mhzなので1ラインあたり910クロック程度で表示させることにします。 まぁ、1ラインのクロック数なんてあまり正確なタイミングじゃなくても大体動きますよ。あまり神経質になる必要はありません。

(3)出力1:RGB信号とシンクロ信号

基本はこれまでのカラーバー表示用の信号とほぼ一緒。ただし14.3Mhzなので、これに合わせてカラーバーの幅や 表示するテクスチャーの変更が必要になります。 ちなみにシンクロ信号はポジティブロジック(シンクロ信号タイミングでHIGH出力)とします。オペアンプ周りがそういう風に組んであるので。

(4)出力2:バースト信号

シンクロ信号出力開始のタイミングを基準にして、76クロック後からHIGHを36クロック分出力します。(それ以外の期間はLOW出力)

多分、おおよそタイミングが合っていれば表示に問題ないと思います。大体でいいです。

(5)出力3:チャージポンプ駆動信号

負電源生成回路を生成するための回路として今回はチャージポンプを使いますが、これをドライブするための信号が必要です。 以前の実験結果に従っておよそ100Khzの矩形波をデューティー比50:50で マイコンから出力することにします。

今回tiny2313のペリフェラルはビデオ信号周りを除けば全部余っているので、その余っている中からタイマー1のPWMをチョイス。 タイマー1のPWM出力端子ならビデオ信号出力とは端子が重複しないから選びました。他のマイコンなら適当に余っているPWMを使えばいいですし、 空いてなければ外部回路で555タイマーとか使ってもいいかもしれません。555なんて1個単価20円くらいだしねぇ…。

ちなみに今回の14.3Mhzクロックではオンとオフはそれぞれ75クロックずつ(@14.3Mhz)としました。 これで約100Khzでデューティー比50:50の出力になります。

(6)出力4:クロック出力

2ビットタイマーをドライブし3.58Mhzの変調を行うためのクロック源を出力します。

14.3Mhzで動くマイコンではソフトウェア的に14.3Mhzを作り出すことは出来ませんが、 tiny2313ならそもそもCPUクロックと等速かつ同期したパルスをckout端子から引き出すことが可能なので、 今回はCPUに供給しているクロックと等速の14.3Mhzをckout端子から出力させます。

その方法ですが、プログラム上ではなく書き込み時にフューズビットで設定します。書き込みのダイアログでckoutビットをチェックしてください。 するとPD2端子(ckout)から14.3Mhzのクロックが常時引き出されるようになります。

ckout以外のフューズはそれなりの値で適当に設定してください。

と言った感じです。あまり細かいところは書いてませんが、これら以外は散々作ったバーコードプログラムを踏襲することにします。

プログラム

ソフトウエア仕様にしたがってプログラムに落とし込んでいきます。で、こんな感じ。

以前作ったカラーバーのプログラムから数点変更になっているので、その辺りについて幾つか補足を。

(1)バースト信号周り

今回はRGB信号やシンクロ信号以外にもバースト信号を出力しないといけないので、 垂直同期期間を除くすべてのラインでバースト信号用のパルスを出力するようにしました。

(2)1ライン表示の長さ

910クロックで1ラインを表示するように変更しました。

(3)負電源周り

負電源生成用のチャージポンプ回路をドライブするため、約100Khzのパルスを出力します。 今回はピン配置などを考慮して、タイマー1を高速PWMモードで使用することにします。

まぁ、この程度の違いしかありません。基本は周辺ICに負担させているので、 コンポジットビデオとは言ってもソフトウェア上の配慮は白黒と殆ど同じ。心配不要ってことですね。

言うまでも無く、カラーバーだけではなくRGB信号でなにか複雑な画や動く画を出せば色が付いて表示されるわけなので、 もっとメモリ容量の大きいマイコン使ったりして動くRGB映像を出力したりと色々応用範囲はありそうです。 (今回はtiny2313の容量で入りきる程度のプログラム、グラフィックデータってことで機能確認レベルに留めたので…)

実行結果

実際に動かしてみた結果です。アレコレ作り込みしている割には単機能レベルの機能しか持ってないので、 いざ動かしてみて色が出るか出ないかだけ見れば充分判るでしょう。テスト項目のチェックリスト挙げたりとかは面倒なのでやりません。

実行風景

今回はブレッドボードで実行しました。オペアンプで組んだマトリックス回路で配線がグチャグチャです。

左上がCPUボード。左下に負電源生成用のチャージポンプ。右上が2ビットタイマー+アナログMUX。 残った部分がマトリックス回路です。

ノイズ対策として適当にパスコンを入れまくっているんですが、そもそもこんなに配線だらけだと、配線が作るL成分、C成分や パスコンのC成分などで共振してノイズだらけになりそうだなぁ…と予想していたんですが、その点は後ほど。

実行結果

実際に表示してみた結果です。

まずブレッドボードからSビデオ信号でテレビに繋いで表示すると、それなりに綺麗に出ました。 次に、ビデオキャプチャーで取り込みするためにHDD-DVDレコーダーのSビデオ入力端子を経由してPCのビデオキャプチャー (コンポジット入力)で取り込んだのがこれです↓。

まぁまぁです。

じつは電源に結構なノイズが載ってます。オシロであたると0.1~0.2Vくらいあるみたい。 ブレッドボードにグチャグチャの配線では回路内で発振(共振)しまくる要素がいっぱいあるようで、パスコン程度では如何ともしがたい状況。 ちゃんとプリント基板でも作って試してみたいです。

あと、ノイズと言えばNJM072D。今回は速度と値段の点でこれを選びましたが、今回の回路では発振しやすい回路になっていると思うので、 NJM072Dにはキビシイ回路です。まぁ、それ以上に電源周りの方が明らかに大きいんですけどね。

オペアンプを取っ替えてみる

ということで試しにNJM2114DDに取り替えて実験してみるとこんな感じ。デジカメで撮ったのでちょっと色調が異なりますが…

まぁ、おおよそちゃんと出ているんですが、見比べた感じ、微妙に発色が地味な感じがしました。

もしかしたら、ボルテージフォロアで受けたC信号の増幅が微妙に間に合っていないのかなぁ…C信号の振幅はおよそ0.7V。 これが3.58Mhzの波になっているので、1/4波形分では少なくとも0.35Vの変化についていかないといけません。 いや、位相によっては0.7Vかな?一方、NJM2114DDはSR=15V/usなので、 3.58Mhzの1/4波形分の時間では辛うじて1V程度の変化に追従できそうというレベル。

0.7Vと1V。うーん、製品のばらつきなんかも考えると、やっぱギリギリかもしれないな…。

もしC信号の振幅に追従できずに振幅が狭まっているのだとすると、要は色成分が少なくなるって事だから、発色が地味に… つまりねずみ色に近づくのはまさにその通りということなのかも。

SR=13V/usのNJM072Bを使うともっと厳しくなるのかな?…発色できるか出来ないかギリギリのスペックか???

と言うわけで、最後のボルテージフォロアの部分(もしくはYC混合回路部分)のオペアンプだけは カラービデオ信号の3.58Mhzに追従できる程度のSRが必要になりそうです。…当たり前か。

オシロであたってみる

ちなみに、信号をオシロで拾って見るとこんな感じ。NJM072DでY信号にプローブをあてた時の波形です。 (Y+CではなくY信号だけです。念のため)

うーん、それっぽい波形ではあるんだけど、0.1Vppほどのノイズが載っています。C信号側も似た様なかんじ。 最初NJM072Dだから発振しちゃっているのかと思ってNJM2114DDに変えてみたんですがやっぱり同じくらいのノイズが載っちゃう…。

NJM2114DDでY信号といえば、以前コンポーネントビデオの実験やったときには同じ回路構成でもY信号にはこんなにノイズ載って無かったので、 その点から考えればNJM072Dだから発振してるわけじゃなくて、電源周りかグネグネ取り回しした配線あたりに原因がありそうです。 ブレッドボードだし、今回は回路がグチャグチャだからねぇ…。

このノイズ、ビデオ信号の3.58Mhzとは異なる周波数で発振しているようで(もっと高い周波数みたい)、 幸いにもビデオ信号上には縞が載ったりすることはありませんでした。テレビ側のノイズフィルター(?)とかで除去されているっぽいです。

ただ、色んな機器に繋いでみたところ相性なのか、一部の組み合わせで↓こんな映像が出たりするケースがありました。

カラー信号が中途半端に死んでしまっているようです。さきほどの電源あたりから拾ったノイズによってバースト信号が死にかかっているのかな?

でもまぁ、数秒放って置くと色が載った映像が安定して出てくるのですが、ちょっと気持ち悪い…っていうか、そもそもさっきのオシロで見る限り あんなに凄いノイズが載ってるのにちゃんと色が載って表示してくれるっていう方がビックリだよな。アナログの不思議。

いずれにしても、回路の動作の仕組みとしてはOKっぽいんですが、やっぱブレッドボード使ってるって言うのがイマイチな気がします…。

一方、当初一番心配していた74HC4052による3.58Mhzの変調処理。意外に上手くいったなぁ…。(^O^)

映像を細かい部分までじっくり見てみる

先ほどの縮小写真ではよく解り難いのですが、映像信号をじっくり細かいところまで見てみると1ライン置きに左右に1ドット(?) くらいのズレが交合に現れるのが見えます。

じつはこれはあらかじめ予想の範囲のお話。って言うのは、今回は1ラインのドットクロックを910クロックとしたので、 4で割ると余りが2。3.58Mhzの1波形分でいうと半波形分の長さに相当します。 ってことはつまり1ライン毎に波形の位相がひっくり返っているわけ。1ラインおきに位相の山と谷が現れるわけです。

NTSCの4フィールドシーケンスを守った信号であれば 4フィールドを表示し終わったときに重なる2枚の映像で打ち消しあって見えなくなるものなんですが、 今回は4フィールドシーケンスを守らない信号を出力しているので、この半波形分のズレが1フィールド置きに出ちゃうわけ。

ってことで、こういうモヤモヤを消すための簡単な対処方法を。1ラインのドットクロックを910ではない数値…4で割り切れる数値にすればOK。 たとえば908クロックや912クロックに。そうすれば各ラインの位相が一致するのでモヤモヤが出ません。正しいNTSC信号規格には反するのですが、 元々厳密にあわせるつもりはないし、少々正しくなくてもテレビ表示やビデオ録画、ビデオキャプチャーには問題ありません。

もしくは、現在は1フィールド252ラインで構成しているんですが、これを2つのフィールドで位相が逆転するように253ラインとする手もあります。 が、今回のプログラム、それほど厳密なタイミング管理はしてないはずなので… CPLDなんかを使って1クロック単位でキッチリ動かせばまさに上手く表示されるはず… なんだけど、それだったらオペアンプ使わずにCPLD内部で変調処理を行えばいい…ネコ8 のようにね。

今回のデコッ8…マイコンとちょこっと繋いでカラー表示って程度の使い方がお似合いだな。

改造案など

マトリックス処理の回路

今回は、マトリックス処理にオペアンプを使ってみました。安くてそこそこ速いNJM072Dをチョイスしましたが、 発振しやすいこのオペアンプはできれば避けたいところ。NJM2114DDなども候補にあがりますが、 今回の実験結果から、アナログMUXの出力を受けるオペアンプ(C信号用のインピーダンス変換用)はSR=15V程度だとちょっと厳しそう。 だからと言ってこれ以外の速いオペアンプとなると結構高そうだし…

ということで、このあたりの部分についてもうちょっと別案を。実は下記の案を先に実験してみようと思ってたんですが、 なーんとなくオペアンプ使った回路を先に実験してしまいました…。

で、オペアンプの方が上手く行っちゃったのでこっちはアイデア止まりで実験はしてません。なのでかなり省略した図ですが簡単な解説を。 クリックで別窓を開きます。

まず右側の方について。こちらは入力した色コードにしたがってY-comから出力する信号を選択する機能を受け持ちます。 AとB端子の2ビットで0~3の色コードを指定し、入力端子を0Y~3Yで切り替えします。 IC1個では発色数は少ないのですが、INH端子を上手く使い、複数のICを組み合わせれば発色数を増やすことも可能だと思います。

ちなみにこの回路の場合、0Yと2Y端子は何らかの色信号を左から入力していて、3Yは白固定、1Yは黒固定と言うことを想定しています。 X側の端子は使ってません。なお74HC4051なら8入力なので、もっと発色数を増やせて便利かな…。

次に左側の74HC4052。こちらは3.58Mhzの変調を受け持っています。AとB端子から2ビットカウンタの値を受け取るのは 先ほどまでと一緒なのですが、入力内容が大きく異なっていいます。先ほどはオペアンプでしたが、 この図ではオペアンプの代わりに抵抗2個の分圧によって電圧を作り出します。

面倒だったので0Yと2Yの2入力しか書いてませんが、その他の端子(1Y、3Y、0X、1X、2X、3X)も同様に抵抗分圧の結果を入力させます。

このように抵抗の分圧で4つ一組の電圧(Cr、Cb、-Cr、-Cbに相当)を使う色の数(+バースト信号分)だけ作り出しておいて、 それらを3.58Mhzで変調かけるという仕組みです。こちらも、74HC4052を並列に並べておけばそれなりに色数を増やすことが可能です。 ちなみにこれらの電圧は、Y+Cの分で計算してください。そうそうれば後続回路でY+Cの混合を行う必要がないので。

抵抗の分圧値の設定方法ですが、負電圧を扱うのは面倒なので正電圧側にシフトした電圧を作っておいて、 出力の最後の最後で直流カットを行う方が扱いが楽だと思います。例えば、一律1V足し算して全域プラスの電圧にしておくなど。 つまり、電源電圧を抵抗で分圧し、(Y+C+1)を作り出せばいいというわけ。CはCr、Cb、-Cr、-Cbの4パターンですね。

そうしておけばオペアンプで負電圧を使う必要もありませんし、マルチプレクサ自体も正電圧だけで扱うことができます。 (Veeはgndに繋げばいいです)

1点注意しないといけないのは、色コードの1つをバースト信号用に割り当てないといけないということです。 バースト信号も1つの色と同様に扱うことにして、3.58Mhzで変調を掛ける事によって有効なバースト信号として扱うわけです。

この図のように74HC4052を2個使う場合なら、白+黒+何らかの色+バースト信号の4つの信号が扱えます。 74HC4052をあと1~2個ほど使えば、もう少し発色数を増やすことが可能です。たくさんの色を出すのには向いてないでしょう。

まぁ、発色数が少ないのでアレですが、アイデアとしてはアリかも…ってことで。

そうそう。74HC4052の出力側のインピーダンスを下げないと75Ω抵抗をドライブ出来ないので、 やっぱり最終出力の部分にはボルテージフォロアなどのバッファ回路が1個必要になります。これは仕方ない…。

あと、アイデアだけで実験はしてないので、一つ心配なことがあります。分圧に使う抵抗値のこと。

あまり小さいと常時結構な電流が流れてムダなので大きくしたいのですが、大きい抵抗を使うと74HC4052のC成分で通過する信号が遅くなったり、 ノイズの影響を受け易くなったりします。程ほどの抵抗値を探す必要がありそうです。

アナログMUX

今回はMUXに74HC4052を使いましたが、もう少しお手軽なものは無いかな…と思って考えたのですが、 FETトランジスタとかで代替できないかな…。扱う電圧をプラス側にシフトして正電圧だけ扱うようにしちゃえば、 FETトランジスタでもスイッチングができるんじゃないかなぁとにらんでいるのですが、適当に安くて適当に速いFETを探すのがちょっと面倒。 というわけで、思いついただけで手が進んでません。

そもそも当初はMUXもFETトランジスタとかで組んで、抵抗の分圧で各電圧を作るとかして、 ほぼ全部をディスクリートで仕上げようと思っていたんですが、やっぱり1個100円程度で買える汎用ロジックICや 2回路50円で買える高速オペアンプなんて、使わないのはもったいないでしょう。

そう。このページのタイトルに「ディスクリート」って入れたのは、ホントにディスクリートでやっちまおうって言うアイデアだったからなんですよ。 当初の予定では。オペアンプ自体も(ある程度精度は犠牲にしても)ディスクリートで速度の速いアンプを組んでみようと思って例の 定本 トランジスタ回路の設計 買ったわけですし。でもまぁ、無理してディスクリート部品だけにするより、多少IC使っても安くて再現性が高い方がいいもんねー。(言い訳)

使用するオペアンプについて

これまでに触れたことから、Cr、Cb、-Cr、-Cb、及びY信号を生成するためのオペアンプには そこそこの速度で充分(コンポーネントビデオが扱える程度で充分)だと判りました。(SR=5V/usあたりがギリギリの線?)

一方、最後の最後の段…つまりC信号のインピーダンスを低める回路(もしくはY+C混合回路)の部分は 14.3Mhzをキッチリ扱える速度が必要になります。

目安としては、今回NJM2114DDでギリギリという感じだったのでSR=15V/usあたりが境界線といったかんじでしょうか?

と言うわけで、最終段だけはちょっと速いオペアンプを使う必要がありそう、ということでした。 LM318あたりがいいなぁ…。LM318はボルテージフォロアの時の入力インピーダンスが要注意だな。(詳細はデータシートご参照)

まとめと今後について

というわけで、ディスクリートと言いながら結局汎用ICを使っちゃったわけですが、いつでもどこでも手に入る安い部品で組めたし、 ほぼ期待通りの結果が得られたので、今回はホントの意味でのディスクリートまで分離せずに実験完了としたいと思います。 今回の実験結果を踏まえて総括し、今後の展開などを眺めてみます。

表示結果について

とりあえず74HC4052の速度でも3.58Mhzの変調は上手く出来たようです。よかった、よかった。カラーコンポジットビデオ、 この程度の回路でも出来ちゃうっていうのが結構面白かったな…。安い部品をかき集めればCXA1645よりも安上がりで済みそうだし。 部品構成によっても若干変わりますが、500円程度で組めちゃうはず。

負電源生成のチャージポンプも、この程度なら一応実用になりそうです。ICを5個繋いでも-3Vをキープですか…。 ビデオ信号のような電圧幅ならなんとか実用に耐えました。(^O^)

一番の問題はやっぱノイズでしょうか。ブレッドボードでは如何ともしがたい…

でもまぁ、とりあえずコスト的にも機能的にも必要充分程度のモノが出来たと思うのですが…

多色化について

今回はご覧の通りデジタル8色(RGB各1ビット)としました。各1ビットずつ増やして2の6乗(64色)程度なら良いかもしれませんが、 あまり多色化するとなるとオペアンプでは部品が多くなりすぎて複雑になっちゃうので、 それ以上の色を出すならCPLDやFPGAを使う方が現実的じゃないかなぁという気がします。

っていうか、6入力のオペアンプ計算(バーストも考えれば7入力)なんて、考えただけでも恐ろしくなります…。 方程式解いてる途中で物凄い掛け算が出てくるので、そこらの電卓やwindowsアクセサリの電卓程度では桁数が足りず太刀打ちできないかも。

線形回路だって事を考えると、今回求めた各RGB用の抵抗について、合成抵抗がそれぞれに等しくなるような2つの並列抵抗に分離し、 そしてそれらの抵抗比が1対2になっていれば6ビットRGBとして機能してくれるんじゃないかな…って思ってるんですが。

あとで時間できたら表計算ソフト上でシミュレーションしてみようかな。

大昔のPCのデジタル/アナログRGB信号への応用

大昔のPCといえばコンポジットビデオ信号と同じ15Khzの信号なので、RGB→ビデオ変換回路などを通せばテレビに写す事が可能です。 昔秋月で売ってたRGB→ビデオ変換キットがそのいい例です。 この秋月のキットの機能がまさにこのページ上の方で出てきた図と同じ変換をやってるだけだから。

で、今回作った回路とその秋月の回路を比べて機能的に大きく異なるのは、バースト信号のタイミングを教えるためのパルスが必要になるということ。 当然昔のPCのRGB信号にそんなものは載ってません。秋月のキットではボード上に登載したCXA1645の内部機能で実現しています。 CXA1645はIC内部に一種のカウンタ回路が内蔵されているんです。

ですが、内容的には水平同期信号の立下りから19サイクル後にパルスを作り出せばいいだけなので、実現の方法はいくらでも考えられると思います。 19サイクル(14.3Mhzで76クロック)をカウントしたら9サイクル(同36クロック)の間パルスを出しておけばいいだけです。 ICでやると大変そうですが、機能的にはまさに鼻クソ程度です。

例えば8ピンのPICやAVRを使い、入力ピン割り込み(立下りエッヂ割り込み)でシンクロ信号のエッヂを拾って、 そこからクロックをカウントして適当な長さのパルスを出力する…それを1ライン毎に延々と繰り返し…なんて程度の追加回路でよいはずです。 CXA1645のデータシート読むと解りますが、水平同期信号の後部に「おおよそ正しそうな」タイミングでバーストを載せてあれば カラー信号として認識はされるようですし。

一方、垂直同期期間中にバースト信号が載っちゃっても無視されるだけなので、そのへんもあまり神経質になる必要はありません。

なので、トリガーに使うのは水平同期信号でも複合同期信号でもどちらでもいいです。適当にタイミングだけ拾えればなんとかなりますよ。 CXA1645なんて複合同期信号を入力する仕様だから、データシートにも「垂直同期期間にこんな風にバーストが載っちゃうよ。へへへっ、ごめーん!」 みたいな図が載っているくらいですから。

あ、シンクロ信号の電圧幅は0.3Vしかないし、映像信号とも分離しないとおかしなことになっちゃうので、 LM1881とかでシンクロ信号をデジタル信号として扱えるように同期分離を噛ます必要はあるでしょうね。でも大した話じゃありません。

あと、PCから出力されるRGB信号は75Ωでドライブした時に0.7Vppなので、これを5Vppに増幅してから入力する必要がありますね。 5÷0.7=約7倍に増幅すればOK。一旦75Ωで受けてからオペアンプ3回路使って非反転増幅回路で増幅率7倍に増幅してから入力してください。

まとめ

ようやくコンポジットビデオ信号を汎用部品で作っちゃう方法が確立できたので、 これでもうお店の店頭からCXA1645がなくなる日が来ても大丈夫。部品面積はちょっと大きいけど…

というわけで、今回の実験はこれで完了としたいと思います。

後日談

YC混合回路についても実験しておきたいなぁと思って、PCBEで専用基板を書いて実験してみました。↓こんなかんじ。

ご覧の通りオペアンプが3つにロジックICが2つ。あとはトランジスタで組んだ負電源回路です。ブレッドボードに挿して簡単に使えます。 このオペアンプのうち1回路分だけがYC混合回路に変更になってます。抵抗がいっぱーーーーーい。

今回はYC混合回路中で14.3Mhz以上の信号を削り落としてしまおうと色気を出して、適当なフィルターを組んでみました。 510Ωと18pFならカットオフ周波数が17Mhz程度になりそうなので、これをチョイス。 あ、よく考えたら3.58Mhz以上をカットすればよかったんだな…まぁ適当に定数を変えて使ってください。 必要なければ4つとも全部10kΩでいいと思います。

YC混合回路以外は一切変更ありません。

PCBEのデータも公開しちゃってもいいんですが、回路図中に抵抗値を明示してなかったりするので、 私以外の人が見てもよくわかんない状態です。それでもよいという場合はリクエストください。公開します。 (まぁ、こんな回路は各自のニーズに合わせて変形した方が使い勝手が良いでしょうからね…)

で、実際のキャプチャー画像です。あたりまえですが、ちゃんとでました。

ただ、テレビ直結やビデオキャプチャーボード直結なら綺麗に表示されるんだけど、HDD-DVDデッキに繋いでみると、 例の白黒映像みたいな映像になっちゃいました。(パ○オ○アのデッキです)

オシロで信号をあたってみると、なんとなくC信号成分の振幅が少々小さい気もします。 抵抗計算間違えている訳では無い気がするので、なにかを勘違いしているか、それともなにか別の部分が悪影響を及ぼしている…?

ちょっと怪しいのはアナログマルチプレクサの速度かな?表面実装になっちゃうけど74VHC4052を使った方が安全かも。どこで手に入るんだろう? あとは510Ωの抵抗があやしい?

まぁ、10kΩでYC混合回路を組めばそれなりに動くことが見えたからヨシとしましょう。 もしくは2kΩと18pFあたりがいいかな?カットオフ周波数が4Mhzくらいで…

あと、やっぱりノイズがでかいな…。NJM072Dが発振してるのかな…。他のアンプでも試してみたいところですな。