回路図集4

 ここでは、参考資料として、さまざまな機器の回路図を掲載しています。
 これらはあくまでも技術的興味に基づく参考資料であり、これを製品などに実施した場合の問題に関しては一切責任を負いかねます。
 個人的に独自に調べた(または設計した)ものであり、内容の保証はできません。また、これらに関する質問にはお答えできない場合が
あります。


(1)ディスプレイコントローラ
 これは1995年頃に、ビデオ信号を理解するために作りました。全てTTL−ICで組んでいます。
 ラッピング配線ご苦労さんなブツですな。


 どういうものかというと、RAMの内容をテレビの画面に表示するものです。タイミングが面倒なので1バイト1ドットで、
320×200ドットの白黒7階調で表示できます。
 RAMの内容が丸見えだから、こいつをマイコンのメインメモリとしてつなげば、プログラムがメモリに書き込んでいるのが
見えるだろうし、メモリテストを走らせれば、模様が動くのが見えて面白いでしょう。

 映像信号のタイミングを検討した時のノートを示します。’95年8月末頃のものです。


 640×200ドット表示のタイミングを検討した時のノートを次に示します。これは拡大して見られます。

 一番下のところは、なにやらプログラム風に書いていますが、これは信号生成のタイミングを自分なりに
まとめてみたものです。CやBASICなどのプログラム言語なら、二重ループですね。垂直のループの内側に水平のループ
がある。ハードウェア的には、カウンタを何段もつないで実現します。そのカウンタから、同期信号のタイミングやRAMの
表示アドレスを取得します。


 ところで、(最初の写真)一番右側の白い基板によって、モデムのアイパターンが表示できる・・・はずでした。しかーし、
その当時は理解が甘くて失敗。画面表示の機能は、左と真ん中の茶色い基板だけです。

 回路図ですが、原図がB4のため手元のスキャナで取り込めないので、詳細表示は無しとしました。A4で取り込んでいるので
一部欠けています。またアイパターン回路(右側の白い基板)は省略しました。

*これは、SRAMへのアドレス切り換え部分と、水平・垂直カウンタです。
 右側の回路図の右下をよく見てください。コンデンサがくっついています(見えないって)。はじめて電源を
入れたとき、動作がおかしかったので調べたら、この信号にヒゲがあったのでコンデンサをつけて対策したわけ
です。ところが勘違いで、もう忘れましたが、どこか配線をミスっていただけでした。
 右の回路図で、上段のカウンタが水平・垂直用で、下段のはRAMの表示アドレス用です。RAMの表示アドレスカウンタは
表示有効期間のみ回すのでイネーブル信号が入っています。


 配線チェックに赤鉛筆を使っているのも意味があって、蛍光ペンだと乾くからです。1本ずつ配線しながら
塗りつぶしていくので、キャップをあけたままにしておくと乾くのが気になります。赤鉛筆だとそんな心配は
無用です。

*これは、ビデオ信号生成回路と、表示タイミングを書いたもの。
 ビデオ信号回路は、FM−7のマニュアルを参考にしましたが、そのマニュアルの回路が間違っていて
最初なんで動かないんだと悩みましたよ・・・。マニュアルではXORゲートなんですが、正しくはORゲート
だったのです。やられたー。


*これは、カウンタから必要なタイミングを拾い出している回路。左のがデコーダで、3ビットずつ区切って
います(8進数ってやつね)。右のは、そのタイミングから水平、垂直信号を作っています。
 こうやって赤鉛筆の跡をみると、デコーダがずいぶん遊んでいるようで・・・(笑)。
 いやそれはわかるんですよ。簡単にできるって事はね。しかしこれは実験だった。ビデオ信号回路なんか
初めて作ったから、タイミングが間違ってるかもしれない。そのためにデコーダで、単純にばらしたのです。
こうしておけば、簡単に変更できます。


*これは、水平・垂直のタイミングを利用して、画面に垂直線・ドット・水平線を表示する回路。要するに
水平のタイミングに同期させれば垂直線、垂直のタイミングに同期させれば水平線、その両方のANDを
とればドットというわけです。論理処理によって、いろいろなパターンを表示することができます。
 線やドットを太くするには、下位のビットを無視すればいいですね。縦にも横にも、倍にできます。
 こうやってどんどん進めていくと・・・あれ!ブロック崩しができるのでは?そうなんです。

 当時は、LS193だったか、アップダウンカウンタをこの回路につないで、UPやDOWNのパルスを入れるたびに、画面上の
線が動くのを見て喜んでいました。幸せだなー(笑)。


 これらの回路は、アルテラ1個に余裕でおさまるでしょう。むかしは、HD46505だったか、汎用のディスプレイコントローラ
のチップがあったのですが現在はそんなの流行らないみたいで、手に入りません(そりゃ、あるところにはあるが)。
 そういえばこれを作った頃は、仕事でも画像処理装置に関わっていて、あれはGALを70個ぐらい、でっかい基板に並べて
強引に作ったヤツでした。スピードを稼ぐには、この方法しかなかったのですよ当時は・・・たしかに力仕事ですけど。
 GAL70個のソースリストを、一日で打ち込んだ時は気が狂いそうでした。

 確か当時、アルテラは浸透してなくて、ザイリンクスの石が他機種で実績があったので、使わないんですかって上司に進言
したけど、遅いからダメだと断られたような記憶があります。まだ使いこなしていなかったしなあ・・・コンパイルするたびに
ピンアサインが変わるのが不便で(ピン固定するとコンパイル通らない)・・・。そういえば、手配線の試作機の大改造で、
「切れ!斬り捨てい!」と、まるでチャンバラのような展開になってしまって大変だった。208ピンだったか、あの石は・・・それを
2階建てにして、鬼のようなジャンパー線だった。それを全部切って作り直せって・・・なんのためのFPGAなのか、すごく不満
でした。

 アルテラのセミナーに行ったとき、さっき書いたようにロジックだけで作ったブロック崩し(壁打ちテニスだったかな)を見ました。
しかも上下左右4面で。あれはインパクトあった。VGAのカラーで、プロジェクターに画面が映しだされた瞬間、会場からオオーと
いう声が。作ったのは、たぶんアルテラ本社の、日本語が堪能な外人さんで、なかなかすごかった。


 さてRAMへのアクセスは、表示回路とホストで切り換える必要がありますが、この回路では、特にアービタなど設けていま
せん。いつでも読み書きしてよって感じ。つまり、アクセスの状況によっては、画面がちらつく事があるわけです。わはは・・・。
 対策は色々考えられますが、この基板を作った目的とははずれるので省略しました。いや、RAMのソケットから外付けの
別回路に接続して、それを研究する予定だったっけか。忘れた。
 デュアルポートRAMを使うのが一番簡単そうですが、普通のRAMでもタイミング回路しだいですね。表示期間中は、ホスト
にウェイトをかけ、ブランキング期間中にアクセスを許すとかね。PC−6001がこの方式でしたが、でも遅くなります。

 アービタというのは調停回路とも言って、リレーシーケンス回路では優先順位をもたせたインターロック回路が近いかな。
日常生活でたとえれば、信号のない交差点で、直進、左折、右折の順に優先順位が決められているようなもの。ひとつの
資源を、複数の人が同時に利用できないから、優先順位をつけて順番に割り当ててやるわけです。
 マイコンのDRAMメモリなら、リフレッシュは定期的に行い、途切れてはいけないから、最も優先度を高くします。他のアクセス
に対しては、ウェイト、つまり待ってもらいます。

 画像の表示にはDRAMが向いてるんですけどね。なぜなら、表示するということは常に読み出しを行っているから、とくに
リフレッシュ操作をする必要がないんです。アービタは、ホストのアクセス、表示の2つが対象ですね。タイミングをうまく設計すれ
ば、1回のサイクルの中に、その両方を入れて仲良く動かす事ができると思います。Apple][がそうでした。

 あと、画像は目で見て確認できるから、意外にトラブルが見つけやすいような気がします。ノイズなどは、画面をみている
と気づくんですね。おかげで、液晶とか電光掲示板のドット落ちなんか、すぐ見つけてしまいますが(笑)。
 画像処理装置のときは、ビデオA/Dコンバータのアナログ電源とデジタル電源の電位差によって発生した異常に気づきまし
た。

 ところでアイパターンの表示のことを少し書きましたが、当時はモデムにハマっていて、モデムチップから出力されている
信号を、外付けの回路でD/A変換してオシロのX−Yで表示していました。回線状態を見ながらパソコン通信をするためです。
しかしオシロは誰でも持っているわけじゃないから、どうにかして家庭のテレビで表示できるようにして、みんなにつかってもらえ
ないかと考えていたんですね。
 モデムチップからシリアルで出力されるX−Y座標データをもとに、水平・垂直のタイミングとコンペアしてドットを表示しようと
していたのですが、実際はそううまくいきませんでした。都合良くタイミングが合うわけがないんですね。甘かった。
 次に考えたのが、RAMにドットを書き込んでいき、一定時間ごとにクリアするというストレージ方式でした。しかしこれもどうか
と思うのです。ハード的に大変でしたし・・・。最後にはデジタルオシロを作ることになりそうでアブナイですね。大変だから、ほど
ほどにしてあきらめました。
 アイパターンは、市販のデジタルオシロのX−Yモードではきれいに表示されませんね。たぶんサンプリングをしている関係で
しょうけど、純粋なアナログオシロで表示するのが一番です。

 以前のトラ技の記事で、PIC1個でブロック崩しを実現していましたが、べつにCPU自身でビデオ信号を作るというのは珍しい
事ではないです。むかしからありました。
 ネットを探索していたら、むかしのパソコンのシンクレアZX81だったかな・・・あれなんか、まさにCPUが表示まで面倒見てる
んですよ。回路図を拡大印刷して、つなぎ合わせて読んだのですが、ちょっと普通の回路の描き方じゃなかったですね。かなり
トリッキーというか・・・きわどい感じがしました。
 ROMの内容を逆アセンブルしたら、BASICのコマンドとか、文字らしきものが普通あるはずなのに見あたらないんですよね。
何でだろうと思ったら、文字コードも独自のものにして、”最適化”しているらしいんです。こりゃあ参りました。
 FM−7だったか、あれも画像表示用にCPUを使っていたんじゃなかったかな。6809を2個搭載していて、ひとつは画面表示の
サブシステムだった。実機を持っていましたが、中はTTLがギッシリ詰まっていました。マニュアルが完備していて、一部の回路図
まで掲載されているぐらいで、かなりマニアックだったと思います。BASICの解説書は、独立した書籍としても市販され、独特の
挿し絵が印象的でした。
 秋月電子のNTSCテストパターンジェネレータキットを作りましたが、これもCPU(Z84C015)でパターンや文字の信号を作って
います。

 私自身、学生の頃でしたが、LEDディスプレイの表示をCPUに兼用させようと試みたことがあります。Rレジスタの値がバス
に出てくるタイミングをうまく使えないかなんて考えていました。割り込みによって表示を維持しようとしていたっけな。無茶な話
ですよね。横10×縦20のLEDの表示をちらつかないように維持しながら、テトリスを実行するなんて。横10というのがクセモノで
せめて8だったらまだ救いようがあったかもしれないけれど。例として7セグの場合、1秒間に50回以上リフレッシュしないとちらつきが
気になるそうですから、だいたいそのへんでしょう。
 結局、最後には専用の表示回路を使う方式に落ち着いて、完成することができました。そのバージョンは、横32×縦25だった
かな。バカでしたよ。フィルムにレタリングを手貼りして、それと感光基板をガラスではさんで屋上にのぼり、じっと我慢の15分で、
両面板だから位置決めをして、今度は裏面を焼いて。そいつを現像してエッチングして、1回目は露光不良で失敗してね。ガラエポ
板に穴開け1600個以上で、何本、ドリル刃をつぶしたやら。そしてLED800個のハンダ付けですよ。スルーホールじゃないから、
両面からそれぞれハンダ付けするわけで、大変でした。あとで不良を発見しても、交換するのは困難だから1本ずつ点灯テストして
から、ハンダ付けしていました。1000本も買うと、数本は不良が入っているものです。
 アクセス方式が少し変わっていました。VRAMがI/O空間の00h〜7Fhにマッピングされていて、INとかOUT命令で
VRAMの読み書きをするわけですよ。I/Oにマップしたのは、メインRAMを64Kバイトフルに確保したかったという趣味の問題
ですけどね。こいつで、ドットの表示とかライン描画(DDA)とか、いろんなアルゴリズムを試してグラフィックライブラリを作って遊び
ました。自己満足の世界でした。
 64KバイトというのはZ80システムで確保できる最大値ですが、アセンブラで64Kも作れるわけがありません。独自のOSを
アセンブラで作っていましたが、それが3000行以上あって、オブジェクトは8Kバイトぐらいでした。

 システムのパフォーマンスを重視するなら画面表示は専用チップに任せるべきだし、そこそこ動いてくれてハードウェアが
小規模(安価)なのが良いならCPUで画面表示も兼ねるでしょう。画面表示までひとつのCPUでやるのは、やりがいがありま
すが、あくまでも趣味の領域を出ないかもしれません。どうしてもアセンブラレベルで、実行時間を計算しつつ、ガリガリ作ることに
なりますから・・・。

 また昔の話、MSX2が出た頃だったかな、こいつに使っているVDP(ビデオ・ディスプレイ・プロセッサ)のV9938だったか、
MSX−VIDEOという名前でしたかね・・・東芝が作っていたと思うんですが、その「ブレッドボード」の写真はインパクトがありまし
た。それがまた巨大で、これがワンチップになったという記事でしたが、説得力ありましたね。
 ブレッドボードというのは、LSIを開発する時に、あらかじめTTLなんかのICで、論理的に同じ物を作って動かし、デバッグや評価を
するための試作基板です。もっとも、いまどきこんなモノを作ったりはしません。論理シミュレータとか、ありますから。もっと昔にさかの
ぼれば、トランジスタを組み合わせて作っていたらしいですね。電卓LSIの初期の頃とか。チカラ仕事で強引に、という感じです。


 ずいぶん脱線してしまいましたが、この表示基板を設計製作していた時の事を書きます。

 最初は、何とかしてビデオ信号を理解しようと決心したわけです。ナニ?高校の時やったじゃないかって?そりゃそうだが、
あの当時は、バカだから理解できなかった(笑)。いや、理解しようとしなかった。しかしいつまでも理解できないまま引きずって
いてもダメだから、よしやるか!って。
 毎日、通勤の列車の中で、ノートに書き殴ったりしていました。理解できたのは、処理手順をプログラム風にまとめてみてから
です。なんだー簡単じゃんって感じ。

 初めてだったから、タイミングが簡単になるようにしたね。モノクロ表示なら、普通はシフトレジスタを使って、1ビット1ドットで
表示するけど、面倒だし(笑)、1バイト1ドットにした。その代わり、FM−7のマニュアルからパクってきた階調表示回路で
7階調ができるようにした。それでも3ビットしか使っていないが・・・。
 別にシフトレジスタじゃなくても、デマルチプレクサ(8入力1出力)で3ビットのセレクト信号によって切り換え出力してもいいんだ
がね・・・。その3ビットはカウンタから持ってくればいい訳で・・・。

 回路図を描き上げて、ICを集めラッピング配線した。ICは、カウンタ(161と163)とデコーダ(138)が多くて、あとはゲートとフリップ
フロップ。

 はじめて電源を入れたときは、確か、早朝だったと思う。
 作っている間は、脳が興奮しているせいか、連日、早朝に目が覚めていた。朝の4時からラッピングご苦労さんである。1本ずつ
線を切ってむいて巻き付けて、あと何本かと、もどかしい思いをしながら完成に向け突っ走っていた。
 ようやく配線が終わり、ドキドキしながらテレビにつなぎ、電源を入れた。
 最初は、画面が流れてしまいうまく表示できなかったと思う。この場合は、同期がとれてないのかそれとも表示内容のカウンタが
ズレているのか見極める。確か垂直のカウンタが、回ってはいけないタイミングで回っていたため同期信号がおかしかったか。もう
忘れた。回路図の修正内容を見て当時を推測するのみ。
 それだけじゃ、まだダメだった。同期はとれるようになったが表示内容が流れていた。つまりこれはアドレスカウンタがらみの
トラブルだ。回路を見直したら、アドレスカウンタのリセットが、電源ONリセットのみとなっていた。バカじゃ・・・。VSYNCによっても
リセットがかかるようにゲートを追加した。
 ところが、まだダメで、どんな症状だったか忘れたが、時々画面がちらつくんだったっけな。オシロ(当時なけなしのお金で買った
20メガのアナログオシロしかない)で調べたら、リセット信号にヒゲがのっていて明らかに異常だった。垂直のカウンタのリセットに
ノイズがのっていると勘違いしてコンデンサをくっつけて対策した。じつは、あとでわかったのだが単に配線ミスだった。これだけ
配線がグチャグチャになるとノイズがのるような感じがするが、実際にはそんなに弱くはない。
 こうやってトラブルシューティングをしていると、いつの間にやら会社に行く時間になってしまった。もうサボっちゃおうかなあ、
なーんて思っていた(笑)。

 いじっていると、もう他のことは何も考えられなくなるもんね。これを解決してあれを修正して、こんな事できんかなあとか。こうや
って夢中になれる時間って幸せだ。これぞ趣味の醍醐味。


※※※ 文字表示実験 ※※※ 2002.04.01記 (←内容はウソではない)

 今朝、7年ぶり?に火を入れてみた。保管がテキトーだったわりには、ちゃんと動作した。オシロで同期信号を見たら、しっかり
出てたし・・・そうだ・・・これを作った当時は、アナログオシロしかなかったんだっけ。苦労したよな・・・と感慨深い。
 まだいじくりたくなってきたので、文字を表示させる実験に取り組んでみた。じつは昨日1日で、キャラクタジェネレータROMの
データを作ってしまったので、テスト表示してみたかったのだ。
 もともとグラフィックディスプレイだが、ちょっと改造すればキャラクタジェネレータROMで文字も表示できるはずだ。

 ゆうべから何となく考えていた内容で回路を描いて、小さい基板を追加してみた。テストだから画面いっぱいに同じ文字
が表示されるようにした。ROMに文字コードと垂直カウンタの下位3ビットが与えられると、文字パターンが74LS151に与えられ、
151は水平方向のアドレス下位3ビットで文字パターンのビットを選択し、出力します。それがビデオ出力回路のトランジスタに接続
されているので、画面に白(1)、黒(0)の点が表示されます。
 グラフィックディスプレイとして最初に作った頃は、シフトレジスタを使う方式はタイミングが面倒でイヤだなと思っていたが、なんだ、
データセレクタを使えば簡単じゃねーか・・・なんで気づかなかった>当時の自分。

 まず回路図を示します。・・・といっても、手書きで汚いので、控えめに小さい画像にしました(笑)。


 そして、これが現物です。小さい基板が、上の回路図のやつです。


 一発で動作して、テレビ画面に「A」がメイっぱい表示されたところ(デジカメが悪くて見えない)。

 うーむ・・・文字表示のテストなら、「イ」を表示するのが正義だったか?(笑)

 あと、細かい事を言えば、ROMのデータは一度ラッチしたほうがいいな・・・。

 キャラクタジェネレータROMのソース、PRN、HEXファイルのダウンロードが可能です。CHRGEN57.LZH
 誰もいらないとは思いますが(笑)、今回この実験をするために、ネットで探しても無かったからわざわざ作ったものです。
同じような境遇の人(いないか・・・)のために。
 そういえば昔は、漢字ROMが各社から市販されていたのだが、ある時期(私が最初の会社にいた頃)、生産中止になって
しまい手に入らなくなった。どこも作らなくなったのだ。困ったもんだ。あれは結局どうしたのかな。コピーしたのかも(笑)。
 トラ技の広告をよく見たら、やはりそういう需要に応えるためか漢字ROMを売り出している業者がいたっけな。

 それから思い出したが、世の中には「同期信号発生IC」という便利なものが昔からある。なんでそれを使わなかったんだ
ろうと、今さらながら思った(笑)。カウンタを何段も並べるのは邪魔だし・・・もしICを使えば、表示位置を決めるカウンタだけ
で済むだろう。まあ勉強だからいいや。
 ICは、たとえばソニーのCX7930A(現在の型名はCXD1217M)がある。以前、秋月の広告には掲載されていたが、
2002年4月号には無かった。若松の広告にはあった。
 そういえば、先日、外出したら潮干狩りで人とクルマがいっぱいだった。看板をみたらソニーさんの団体でした。


(2)ビデオスーパーインポーズの研究
 スーパーインポーズとは、映像に任意の文字を重ねることである。たとえば時刻の表示がそうだ。ビデオカメラで撮影
するときに一緒にカウンターや時刻が写しこまれるのもそうだ。
 JRC製のIC(NJM2217)をずいぶん前に入手していたが、全く使わないままだった。ところが最近、上記のディスプレイ
コントーラを再びいじり始めてから、こいつとくっつけられないかと考えるようになった。

 クルマにいろんなメーターを追加して楽しむ?事があるが、あまりあれこれくっつけると、ゴチャゴチャして見苦しい(メカ
っぽくて良いという向きもあるが)。計器がゴチャゴチャしているといえば、飛行機のコクピットを思い出すが、比較的新しい
機種では、計器は削減され、ディスプレイに必要な情報を集中表示するという形になっている。

 余談だが、WiLL Viには水温計もタコメータも無い。水温計は無いが警告灯がある。こんなんで大丈夫かと心配に
なるが、よく考えれば水温計なんか見ないし、もし付けたければ付けても良いのだ。付けたって、たぶん平常では80℃一定
だろう。
 タコもいらんな。何に使うんだろう。スピードは見るけど回転数は見なくていいだろう。オートマチックだし。エンジン音などで
だいたいわからないか?と思う。

 まあメーターをつけてもいいじゃないか。友人の要望もあって、車載テレビ(またはナビの画面)に、それらの情報を表示
する装置を作ることにした。飛行機のコクピットのように、必要な情報を表示しようと思う。

 NJM2217のデータシートを見ながら、ザーッと実験回路を描いてみた。

 (最近、ここのホームページ容量が不足しているので、大きい画像の掲載は避けている。)

 この回路を実際に作ってみたのが、次の写真。畳のカドのところにある小さい基板がそうだ。左側の箱は、秋月の
NTSCパターンジェネレータキットをアルミケースに組み込んだもので、右上の銀色の箱は5V電源だ。


 とりあえずテストで、映像信号をスルーしてみた。最初は同期がとれなくておかしいなあ・・・と思ったら、ビデオ出力の電解の
せいで、こいつをショートしたら同期がとれた。1000マイクロなんかの電解を追加しても同期とれんもんなあ。

 ふう、とりあえずスルーでは大丈夫だ。これから、同期信号などの波形をみたり、キャラクタジェネレータとのつなぎ込みをやって
みることにする。
 NJM2217が同期分離した結果を見てみた。左から、垂直同期、水平同期。うーむ、水平の周期が少々長くないか?



 それと、映像信号スルーといっても入力と出力で波形に違いが出てないか見てみた。左側から入力、出力。
 こっちの波形では、水平の周期が正常だぞ??


 NJM2217は、同期分離回路を内蔵しているから、キャラクタジェネレータのタイミング信号が得られて便利だ。キャラクタ
ジェネレータ側では、同期信号を基準にして表示位置のタイミングをカウンタ等ではかり、希望するタイミングで信号を出力
すれば良い。

 


戻る