トップページ > 電子工作インデックス > CRTCその1 > ディスプレイの原理
CRT(あのブラウン管のディスプレイのことです。)や液晶の物も含めて、
一般的にDサブ15ピンコネクタ(普通、青いです。)でつながっているディスプレイ機器は
「RGBラスタースキャン方式」で制御することができます。
これに対してテレビ用ディスプレイなどは単一のRCA端子(…あの赤・白・黄の黄色のヤツ)
からのNTSC信号(National Television Standars Committee)で制御することが多いようです。
「RGB」はRed、Green、Blueで加法混色をする…ということですね。全部の色がそろったところが白 になります。
「ラスタースキャン」はいわゆる走査線の動きのことで、画面上を横方向(画面に向かって 左→右)に非常に小さくて速い"光点"が動きます。すると、画面上には横に細い線が一本 ひかれたように見えます。さらに、この線を上から下へと動かしてやれば今度は"線"が画面中に びっしり埋まって"面"が画面に現れたように見える…というしくみです。
この"光点"は、その瞬間におけるR・G・Bの入力電圧を元にそれぞれ赤・緑・青の光の強さが決められ、それらを 重ね合わせて出力されます。ブラウン管だと本当の電子ビームが光点を作りだしますが、 液晶ディスプレイの場合は組み込まれている制御系で同等の扱いができるように処理されているようです。よって、 この光点の色を指定するための「クロックパルス」のようなものは存在せず、 完全な非同期というか、こちらからタイミングを合わせて信号を送ってやるしかありません。 そのためのタイミング信号として2つの「同期信号」があります。
2つの同期信号とは、「水平同期」と「垂直同期」のことで、それぞれパルスの立ち上がりで
検出され(…るハズ)ます。水平同期信号は入力されると
光点の位置がすぐ下の列の一番左(スタート地点)に移動します。この移動の期間は
RGBの入力を受け付けません。余計なところで光る心配はありません。
垂直同期信号は、入力されると光点の位置が最初の場所まで戻ります。タテ方向の移動で
最後の行まで掃き終わったあとに、リセットする信号のイメージです。
イメージ的には「水平同期」は横方向に何個の点(画素、ピクセル)を打つかを決める 役割を果たし、「垂直同期」は縦方向に何列のラインを引くのかを決める役割をすると考えて おきます。
画面に好きな画像を表示するには、光点がいる場所ごとにRGBの各端子に加える電圧を 変えてやります。光点は勝手に横へ動いていくので、このRGB信号を変化させる速度が 速いほど、"その色の幅"が小さくなります。つまり「1画素あたりの大きさが細かくなる」 ということで…高解像度のものが欲しければ高速動作のグラフィックボードが必要なのは このためです。
垂直同期のタイミングを決めるには、まず横方向の解像度がどのくらい欲しいのかを考えた上で、
さらに自分の回路のスピードも考慮にいれ、算出することになります。
…まぁそれをイチイチCPUから出力させていたらソースコード書くのが大変ですし、処理も
遅くなるので普通はやりません。(後述)
今度は垂直同期のタイミングについて考えてみます。垂直同期は”光点”を
最初の位置に戻すリセット信号のようなもので、垂直同期のあとは、またはじめから次の
画面を描き始めることになります。つまり、垂直同期の間隔は画面1コマあたりの時間だと
考えることができます。もし画像を少しずつ変化させてアニメーションのようなことを
したいのであれば、この間隔が短いほどなめらかに動いて見えます。(画像用のメモリが
たくさん必要になりますが…。)
垂直同期信号は、
一般的に「60[Hz]!」とういイメージが強いようです。一般的にTVゲームやPCディスプレイは
1秒間に60フレーム(60画面)表示すれば人間の目には完全に動いているように見える…と。
これを60[fps](Frame Per Second)なんて呼んだりします。
(実際、20[fps]もあれば十分アニメーションして見えます。)
たしかに垂直同期を60[Hz]に設定すれば60[fps]を実現することはできますが、そのためには 画像をそれに合わせてコロコロと変えなければなりません。画像を変えなければ、普通に 静止画に見えます。今はこのへんのところは深く考える必要がないので、詳しい内容は 後述…。
さて、だいたいディスプレイを動かすにはどんな感じの信号が必要なのかイメージができた
と思います。要はRGBと水平同期&垂直同期の計5本(それとGND)ですね。
案外単純だと感じるかもしれません。
面倒なのはこれからで、イマドキの液晶ディスプレイは垂直同期と水平同期のタイミングが
なかなかシビアです。規定の範囲内でないと”Out Of Range”と表示されて
受け付けてくれません。まぁ実際に電子銃を動作させているわけではなく、シミュレート
しているのですから当然かもしれませんが…。これがなかなかイヤなものです。
水平同期、垂直同期が決まったとしても、今度はそれに合わせて画素のデータを次々と
出力しなければなりません。これも大変そうです…。
以上のことを実験的にマイコン(H8など)で行ったところ、水平同期・垂直同期の 信号はタイマーをつかって生成できても、1ピクセルのデータを送るのに時間がかかりすぎて 実用レベルの解像度は得られませんでした。かろうじて可能であっても、ほかの処理が満足 にできません。そこで、CRTを動かすのに専用のハードを作ることになります。それが CRTC(ディスプレイコントローラー、グラフィックボード)と呼ばれる回路です。