マイプロジェクトX 「ひみつ3(復活編)」
1年前に始めたプロジェクトだが、99%までできたところで行き詰まっていた。どうしようもなくなって、
去年の9月か10月頃に保留にした。
どうしても解決できない問題があった。画面に表示される文字がギザギザになる。水平方向の同期が
とれていないような感じで、できる限りの努力は尽くしたが、とうとう解決できなかった。
このまま放棄したくない。あきらめたくない。完成したい。
保留にはしたが、心の中では、いつか復活したいと願っていた。たまに思い出しては、関係する資料を
読んだり、調べ物をしていた。
そして3月22日、プロジェクトは、復活した。
今度こそ完成に向けて、動き出した。ゴールは、完成しかない。
← 全体ブロック図。A4用紙8枚に拡大分割したもの。
なお、以下の本文中のビデオ映像写真は、最近買ったカノープスのMTV3000Wによりビデオキャプチャー
したものです。いつか、こんな製品を自分で設計できるようになりたいものです。
●4月23日
まず、3月22日から今日までの動きをまとめておく。
・新しい機能の追加2件の構想。(現状の問題点解決が優先だが)
・仕様の一部を見直し、削除。
・CPLDとして、旧基板に使用していたMAX7128を2個ではなく、FLEX10Kを1個
使用する事にした。外付けしていたROMとRAMを内蔵できる。なぜ、この石を使わなかったのか、
なぜ気づかなかったのか、不思議に思う。
コストの問題だったか? FLEX10K+EPC2で¥8,000ぐらい。でも基板が簡単になるし
ROMもRAMも外付け不要だからメリットは有ると思う。
・必要部品の手配。
EPF10K10LC84−4を1個、EPC2とソケットを1個ずつ、そしてEPM7128SLC84−15を2個。
さらにPLCC抜き取り工具、これらをヒューマンデータの通販で入手した。2〜3日で届いた。早い。
サトー電気に、ロジックICなどを注文した。74LS221、74HC123は、水平同期関係で必要になるし
PLLに取り組むため74HC4046も。
秋月電子には、PLCC84ピンソケットを10個、注文した。
・新基板の試作。回路設計と、ユニバーサル基板の組み立てと配線。
・FLEX10KとEPC2の使い方の勉強と、テスト。どっちのデバイスを書き込むか、その切り替えの
ジャンパーが6個あって、回路図や資料を追いかけて、その使い方を理解するのが手間だった。
3つの状態がある。
1.FLEXの書き込み。
2.EPC2の書き込み。
3.電源投入でEPC2からFLEXの書き込み。
・VHDLでのROMの作り方。テキストエディタで、ひたすらデータを打ち込んでいたが、MAX+PlusII
関係の資料をみたら、LPMとして生成できることを知った。肩が凝って大変だったのに、HEXファイルを
読ませて簡単に作れるなんて知らなかった。マヌケ。
・VHDLやビデオ信号処理に関する資料の収集と、読書。トラ技のバックナンバーを過去15年分
ぐらいひっくり返し、関係しそうな記事を全部コピーしてファイルを作った。トラ技の別冊、それに
デザインウェーブなども手元に積み上げた。改めて考えてみれば、やたらにCQ出版の本だらけだ。
本棚を見ると、背表紙の文字「CQ出版」がズラッと並んでいておそろしい(笑)。
・ROMとRAMをCPLDに内蔵するところから発展して、たとえば用途別のRAMを、アドレスに細工して、
使い分けしていたのを、用途別に小容量のRAMを設けるように変更。結果的にメモリ空間の無駄を無くす。
・旧設計ファイルの見直し。もうずいぶん忘れていた。よくこんな複雑なカラクリを思いつくものだと、
自分で作ったくせに。
ワンホット・ステートマシンで、回路図入力していた。結果的に動けばVHDLだろうが何だろうが、
本質的には同じだと思う。論理はすでに完成しているから、いま、いじる事ではないと思う。やることは、
ROMとRAMを追加する事。
・LPMでRAMを作ってみた。初期値設定も可能との事、テストに使えるか?
ただLPMでのデュアルポートRAMの使い方がハッキリしない。デュアルポートRAMが使えれば
強力な武器となる。いままでのやり方は、普通のSRAMを利用し、メモリサイクルを表示と制御で
分け合っていた。表示は一瞬たりとも止められないから、最優先で、リードオンリーだった。制御系の
アクセスは、次のサイクルまでペンディング(保留)して読み出しまたは書き込みを行った。
・FLEX10Kは、PLCC84ピンのものは1種類しかない。ふと思ったが、集積度が高ければ、必要に
なる入出力ピン数は少なくなる場合もあるだろう。試作にはPLCCが便利だから、同じPLCCで、
ゲート規模の大きいデバイスがあれば?
・アナログ基板の製作。同期分離と、ビデオスイッチ。旧基板はNJM2217で同期分離+ビデオスイッチ
の働きだったが、NJM2246が1個で簡単にできそう。
・水平同期を基準に、画面に縦線を表示する実験。非同期カウンタのクリアをHSYNCでたたく。
クリスタルを8MHzから32MHzまで差し替えて、様子を見た。
・同期信号有無の検出と、内部同期回路は、最後に追加しよう。
さて、昨日は、74393(FLEX10K内)のクリアをHSYNCでたたき、16MHzのクロックでカウント
させ、得られた2MHzと、HSYNC、VSYNCのANDをとって、画面に白信号を入れるようにしてみた。
HSYNCとVSYNCのANDをとるのは、同期期間中以外という事。HSYNC、VSYNCは負論理なので、
Hレベルのときは、表示期間中という事になる(単純には)。
実際にやってみたら、縦の線がギザギザになった。
HSYNCと書いているがLM1881の出力はCSYNCだ。だけどタイミング的にはHSYNCとして利用
可能である。
マクロファンクションの74393は、中身を見たら、完全な非同期カウンタではない(単体の74393とは
一致していないという意味)。だから、自分でDフリップフロップをトグルにしたやつを並べてみた。しかし
結果は同じだった。
デジタルのクロックと水平同期が、お互いに同期していないためにギザギザになると考えて
完全にアナログな方法を試し、同期分離が確実かどうか確認する事にした。
74HC221のワンショットを2回路使う。
1回路目は、HSYNCでトリガされる約33μSのタイマーで、これは水平の表示位置を決める。
水平は64μS幅だから、33μSは中央付近になる。
1回路目の出力の下がりエッジで、2回路目のワンショットをたたき、表示する白信号の幅を決める。
これは1μSとした(下の画面写真では、1μSにしては広いようだが、要は縦線が表示できれば
良い)。
これが結果。やはりギザギザになっている。
同期分離から見直しが必要だ。
MAEDAという文字は、秋月のカラーパターンジェネレータで表示させている。これらの文字の縦線は
ハッキリ表示されているのに、74HC221で表示させた縦線は、ギザギザになっている。この縦線も、
文字と同じようにハッキリ表示されなければならないのに・・・?
なんで??
調べる事、試す事は山ほどある。
ビデオ信号のクランプは関係あるのか。レベルが不安定だと同期分離がズレる事があるのか。
カラーバーストが影響する事はあるのか。白黒カメラをつないで比較するが、最終的にはカラー信号にも
白黒信号に対しても、期待通りに動作する必要がある。
電源のノイズか。気を使ったつもりだが、まだ何か足りないのか。トランス式のACアダプターと、レギュレータ
で動かしてみる。あるいは乾電池で動かしてみる。
もとのビデオ信号と、LM1881のCSYNC出力の水平同期のズレ具合をオシロで観察する。ピッタリ一致
していれば、ギザギザ表示にはならないはずだ。これを一番に調べよう。
●4月24日
水平同期信号は、水平位置の基準だ。この基準から正確に遅延して、白信号を出力すれば、必ず
画面上の一定の水平位置に表示されるはずだ。
昨日の最後の実験は、LM1881と74HC221だけで、純粋にアナログ要素だけで構成したから、
必ず思い通りに動くはずだった。しかし結果は、ギザギザになっていた。
こんな基本的な部分に問題があったのかと思うと、自分の勉強不足というか甘さを痛感する。水平
同期が正確に検出できていないとすれば、それをもとに、PLLやら色々組み立てていっても、正確に
動作するはずがない。
LM1881の回路は、基本通りで何も問題ないようだ。他の人の製作例を参考にして、LM1881と
ビデオスイッチを組み合わせて使ってみたのに、ギザギザになるとは、一体何がいけないのだろう。
非常に簡単な事のように思えるが、実際、そうなのかもしれない。知っている人は、問題にするような
ことじゃないかもしれない。わかってしまえば、どうでもいいことなのかもしれない。
とにかく、ひとつずつ、つぶしていくしかない。
(実験1)カラーバースト信号が同期分離に影響しているのか?
確認方法: カラーパターンジェネレータの代わりに、白黒カメラを接続してみる。
結果: 症状は変わらず。ギザギザ。
結果から分かったこと: カラーバースト信号は影響していない。
完全にアナログと言いながら、デジタル部分の機能を止めているわけじゃないし、アナログ部との
一部の配線は残してあった。何かノイズが回り込んでいるのではないか。完全に切り分けて確かめる
べきである。
(実験2)デジタル部の機能を完全に停止してみる。
確認方法: デジタル部の電源および信号線を切断。
結果: 症状は変わらず。ギザギザ。
結果から分かったこと: デジタル部のノイズは影響していない。
なお、ギザギザをよく観察すると、1ラインごとに1ドットぐらいずつズレているように見える。じっと見て
いると上方向に流れているように感じられる。
□□□□
□□□□
□□□□
□□□□
□□□□
□□□□
こんな感じか? ↑
(実験3)電源のノイズか?
確認方法: スイッチング電源ではなく、乾電池(単3×4本=6V)で動かしてみる。
結果: 改善! 縦のラインがクッキリ、まっすぐ!!
結果から分かったこと: 電源が怪しい。
これが結果。前の映像とは明らかに違う。ギザギザが無い!! これだよ!!!!
そういえば、旧バージョンを最初にユニバーサル基板で手作りした時から、ギザギザに
なる問題が発生していた。そうだ、あの時、電源ノイズを疑って、コモンモードチョークや、
大容量の電解、セラミックコンデンサなどを追加したら改善したんだった。
じつは、この実験には、その旧バージョンをバラして同じ電源を利用していた。ありゃ〜。
今回の電源のノイズフィルタは悪く言えばいい加減で、パチンコ液晶のジャンクからはずした
3端子コンデンサと電解を適当にくっつけていた。こんなんじゃ不十分なんだ!!
電源のノイズの問題は、意外に見落としがちかもしれない。
試作機をテストする時は、実験室によくある安定化電源装置を利用する事が多い。中は
トランスが入っていて、スイッチング電源ではない。アナログ回路をつなげば素直に動くだ
ろう。
ところが実機には、コストの問題からスイッチング電源がよく使われる。実機に組み込んでから
とか、あるいはボード製品ならば、ユーザの使用環境でトラブルを起こすかもしれない!
そこまで考えて、評価試験を行うのが当たり前なんだ。
あれだけ苦労して行き詰まった原因は、まさか電源じゃないだろうな・・・・・・・・・(冷汗)。
そういえば、いつもスイッチング電源を使っていた・・・。
一度も、トランス式の電源とか乾電池で動かしてみた事はなかった。
しかし秋月のカラーパターンジェネレータは、同じく秋月のスイッチングACアダプタ(安いやつ)
で動かしている。信号源は、こんな電源を使っているのに、平気なんだな。
ところで、なんで「電源のノイズだ」って、結論を出してしまうのか。確かめたわけじゃないだろう。
電源が原因であろう事は、つきとめたわけだが、ノイズなのかどうか確かめていない。ノイズだった
ら、それをオシロで見るまでは断言できない。何事も現場に聞け、という言葉を思い出す。
電源の違いは、電圧の違いでもある。スイッチング電源は5Vだが、乾電池は6Vだ。6Vのほうが
回路の動作上、特性が良くなるとか、そういった事はないのか? これも確認が必要だ。
ただ、雑誌の製作記事などを見ると、LM1881を5Vで動かしている例もあることから、まず、
電圧に関しては問題がないだろうとみている。データシートを見ると、5Vから動作可能だから、5Vで
問題ないはず。
最終的には、どんな電源を持ってこられても、問題が発生しない対策をする事になる。もともとは
車載用として開発してきたものだった。クルマの場合は、電源電圧の変動が大きいだろうし、
なによりエンジンがノイズ源だろう。徹底した対策が要求される。
カノープスのMTV3000Wを使っているが、クソみたいなパソコンのスイッチング電源と、
ノイズばりばりの環境の中で、よく機能していると思う。ノイズ対策が徹底しているに違いない。
当たり前田。
それでは、電源の違いで、信号がどのような影響を受けているのか確かめてみる。
推測では、電源のノイズのせいで、水平同期の判定レベルが微妙に揺れていると思うが、
果たしてどうなのか。その通りなのか、オシロで確認してみる。
電源のノイズなら、どのような対策をとるのが効果的か。みんなは、どんなふうにしているのか?
ざっと見たところ、インダクタとセラミックコンデンサ、電解コンデンサでフィルタを構成している程度で
アナログとデジタルの1点アースが定石だが・・・。
実験。
でも今夜は、目が限界なので寝ることにする。身体が資本だから・・・。
●4月25日
朝っぱらから、うちのすぐ前で選挙カーが、「ただいまより、ご町内の皆様へ、政策を訴えさせて
いただきます」 (ゲゲッ!?) でかい、オッサンのダミ声が・・・。これもある意味ではノイズですな。
この人が良いか悪いかじゃないのですが、キレイ事を言うのは簡単です。口でなら何でも
言えます。汚職で逮捕された議員だって、選挙の時は、「金権政治を排除し、キレイな政治を」などと
言っていたに違いありません。
そして、「もうだめだ、できない」って言って放り出すのは簡単で、すぐにできる事。
第一歩を踏み出して行動する。そして目標に向かって走り続ける。何があってもくじけない。
最後には夢をかなえる。わたくしは、こうありたいので、あります。おやおや選挙調。
昨日の実験結果から、希望が見えてきた。
だけどこんなに時間をかけてしまって、もしプロの仕事なら失格だ。個人的なプロジェクトだから
良いのだが・・・それでも、心の片隅に、どこかで誰か同じ事をしているヤツがいるかもしれないという
危機感を持っていて、あせる気持ちもある。そう、世の中にはデキルヤツはいっぱいいて、私が1年以上も
時間をかけている事を、1週間で片づけてしまうだろう。
ただ、いまの自分には、アナログのビデオ回路に関する経験が薄いし、VHDLだって自分の思い通りに
コーディングできるほど慣れているわけじゃない。いまは、ただ、これらを修得する時間が必要だ。修得して
しまえば、1週間どころか3日で作れるだろう。
いまの目標は、完成することと、もうひとつ。この試行錯誤と執念を生々しく、みんなに伝えたい。前田と
いうバカが、こんな簡単な事で、しなくてもいい苦労をしている。頭が悪い、要領が悪いヤツだなあと笑われて
もいい。どんな回り道をして、わかってしまえば簡単な結果にたどりつくか。イライラしながら見ればいい。
結果だけ読んで、「要するにノイズだろ」と一言で受け止められたくない。回路図だけじゃ、こうなることは
予想できなかったのだから。実際に作って動かして初めてわかったこと。そのことに、どうやって到達したの
か。そこを知ってほしい。
いくつかのメーリングリストを購読しているが、よく見かけるのが「動きません。なぜでしょう」とか、
ソースリストを示して、人にデバッグさせようと(笑)しているやつ。回路でもソフトでも、実際にやってみれ
ばいいじゃないか。「現場に聞け」ということ。
実際にやってみて起きた出来事は、物理法則に基づいた、否定しようのない現実なのだ。何が間違って
いるかといえば、自分だ。自分のプログラムや回路に問題がある。それを追究していく。
追究するには、原因を切り分けていく。まずハードなのかソフトなのか。プログラムのどこまで正常に
走っているのか。このへんを実行していないようだとか、ボタンを押したときにここにジャンプしてくるのか
とか、ICEがなくても、たとえばLEDをつければわかるだろう。
その過程や経験は身に付くし、なにより、うまくいった時はとても嬉しい。この喜びを味わうことなく、
簡単に他人に質問して安易に答えを得るのは損だと思っている。
ただ最初の一歩は大変だ。勝手がわからない。とりあえず人のマネをしてみて、ちょっといじったら
動かない。訳の分からないエラーが出てさっぱり意味がわからない。C言語だって、}を忘れただけで
エラーがゾロゾロ出てくるから何事かとあせってしまう。
自分がPICを始めた頃を思い出す。まだ英文のデータシートしかなく、トラ技の初めてのPICの記事
ぐらいしかなかった。あの頃の先駆者たちは尊敬している。
さて、夜に、入力ビデオ信号とLM1881のCSYNC出力を同時にオシロで観測し、同期信号に揺れが
生じていないか調べた。しかし拡大しても、問題があるようには見えなかった。ちっとも揺れていない。
電池でも動かして波形を比べたが、この波形に関しては変わらない。別のところか??
おっと日付が変わっていた。今夜はここまで。
●4月26日
現象がつかめないのは、調べかたが悪いのだろうと思う。いろいろと戦略をたてて、それらを
ひとつずつ試そうと思う。
それから、ノイズだとしたら、その防止方法を検討せねばならん。ちょっと、実際の製品に
学んでみるか。そう考えて、以前ハ○ド○フで買ったジャンクのビデオプリンタをバラしてみた。
なおジャンクと言ってもきちんと動作した。ただ、消耗品のインクリボンが今後手に入るかどうか
不明。
ハ○ド○フ萌え〜。
スイッチング電源からメイン基板への電源入力部。
2個のコイルはビデオ入力と出力用。電源に関しては、インダクタなどノイズ対策部品はみられない。
そうか、裏側にチップがついてるんだと思って、ひっくり返したら・・・・・・・・・。
ぶわはははは!ダサイ!!
なんじゃこのデッカイ電解コンデンサは。
こういうの、以前にも見たぞ。哀話のポケットモデムで。カ○オのネー○ラ○ドでも。
民生品では定番の対策方法なのか?
きっと、試作機のノイズで困って、「とりあえずコンデンサでもぶちこむか」と、そのへんに転がっていた
やつをハンダでひっつけたら、うまくいったんでそのまま製品にしたのかもしれない。後付じゃ
なくてちゃんとシルクでその位置が示されているし。
おまけ。ROMの1ピン(たぶんVPP)を5Vにつなぐのを忘れたらしい。ありがち?
えーい、遊んでいる場合ではないぞ。ちっとも勉強にならなかった。
でっかい電解は、ひょっとしたらコストダウンの結果なのかもしれない。あらゆる工夫を盛り込んで、
インダクタやノイズフィルタなどを追い出したのかもしれないと思いつつ・・・。
●4月27日
昼前ぐらいから色々いじくり始めた。
電源の配線にチョークコイルやらコンデンサやらつないでみたり、配線を切ったりつないだり、
それから基板の電源配線をベタにして強化しようと、薄い銅板を切り抜いてハンダ付けし、各ICへの
電源を最短でつなぎ直した。
そう、電源の配線が弱かった。メッキ線を1本ひっぱっていただけだから。
LM1881の電源とGND間に100μFの電解をつないでも、目に見えるような効果は無かった。
アナログ部の電源とGND間にオシロのプローブをつないで、ACでノイズ波形を見ようとしたが、
スイッチング電源でも乾電池でもノイズレベルは変わらず。あれこれ試しては見たが、波形としてノイズを
観測する事はできなかった。
ここで見ていた波形は、電源の種類に関係なく出ている事から、ICの動作に伴って発生している
ものであり、これが症状の原因とは思えなかった。
電源からノイズがきている事は、電池の実験でわかったが、これはいわゆるコモンモードノイズかと
とりあえず、プレステの電源からはずしたコモンモードチョークコイルをつっこんだ。これで改善したが、
どうにも邪魔くさい。これをプリント基板化するかと思うとウンザリする。
ひょっとして片方だけで大丈夫ではと、ミノムシクリップでジャンパーしたら、GND側はコイル無しで
良い事がわかった。
結局、電源からのノイズ対策は、アナログ基板の電源のプラス側に、インダクタの47μHを直列に
入れたらOKとなった。オシロの波形よりも、実際のテレビ表示を見て調整したわけ。
47という数値には特に意味はなく、たまたま手元にあっただけ。別の大きいコイルでも試したが
大きさ的にも47μHが良いと判断した。
インダクタ無しと有りの場合。
映像を縮小したら、違いがわかりにくくなったが、無しのほうが、モヤモヤしていた。
デジタル部の基板をつないで、いよいよアルテラの中身を動くようにしようと思う。まずはテスト用の回路で
テスト表示をした。おっと、ギザギザだ。
デジタル部をつないだ事で、干渉があるのだろうか。デジタル部の電源にはノイズフィルタを入れていない。
アナログ部の電源が汚れているのだろうか。
アルテラからのドット出力は取り除き、さっきまで使っていたHC221の基板をつないだ。そのときに、
HC221の電源をデジタル部からとったが、こうしたらモヤモヤが出た。汚れた5V電源からの信号を
流し込んでいたわけだ。
アナログ部とデジタル部の間の信号は4つで、HSYNC、VSYNC、DOT、BACKである。前の2つは
アナログ部からデジタル部へ、あとの2つは、デジタル部からアナログ部へ向かう。さっきのHC221の
実験から、ここにはフィルタを入れるべきかもしれない。
●4月28日
休みだったので、午前中はクルマを洗ってワックスをかけ、掃除機をかけた。ドアミラーを
下から見たら、ダイハツのマークがあるのを発見。そういえば、オプティの部品を流用している
のだった。
昼食後、コーラを飲み(カフェイン中毒なのです)、トラ技の映像関連記事をコピーした分厚い
ファイルを寝そべって読んでいたら、いつの間にか寝てしまい、気が付いたら午後5時。時間を
損した。
何も収穫がなかったわけではなく、LM1881に関する情報を見つけた。ややノイズに対しての
分離度が低いとか、計4点ほど、参考になった。
いよいよアルテラに論理を実装して、動かそうという段階だが、もっとも基本的かつ重要な、
水平同期に対するクロックの同期の取り方を検討した。
3つの方式を、コスト・手間が軽い順番にひとつずつ試してみる事にした。
(1)高いクロックで、非同期カウンタのクリアをHSYNCでたたく。
(2)HSYNCでLC発振回路を制御
(3)74HC4046によるPLL方式
今日は、はんだごてを使わなかった。
●4月29日
どうも気がゆるんでいる。イカンな。
ただ、おおまかな方針は固まりつつあるし、検討中に生じた疑問もひとつずつ解決している。
システムを大きく2つのブロックに分ける。コマンドなどを処理する制御部、表示を行う表示部、
これらはお互いに非同期に動作する(ここが旧バージョンと異なる)。
間にはデュアルポートRAMというか、アービタを設けてお互いのアクセスが干渉しないように
する。
EPF10K10にROMデータ2キロバイトが入るかどうか、ふと気になった。実際に試したら
エラーが出て、EPF10K40を使えなどと出た。それもそのはず。RAMビット数は6,144しかな
い。2キロバイトといったら16384ビットで、それはキャラクタのフォントを8×8にした場合の話で
実際の表示は5×7だが、データを5ビットにしても10240バイトでまったく足りない。使っていない
キャラクタコードの分を差し引くような問題ではない。他にもRAM領域を必要としているのだから。
なおROMといっても、実際にはRAMにデータが置かれて、ただ読み出し専用なだけである。
EABつまりエンベデッド・アレイ・ブロックは2,048ビットのRAMで、これがEPF10K10には
3つあるから2048×3=6144ということになる。
どうしても今回はEPF10K10を使いたいから、ROMは外付けしようと思う。ただ、ROMの容量が
余って余ってどうしようもないから、複数のキャラクターセットを入れたりとか、文字のふちどりの処理
関係などのデータも入れてはどうかと考えている。
ところで、EABでROMを確保するから容量が足りないのであって、ロジックとしてROMを確保した
らどうだろう。いや、やっぱり全然足りないだろうな(笑)。
●5月29日
サーバー容量を使い果たしてしまったため、このページの更新そのものは、しばらくお休みします。
プロジェクトは、進めていきます。
(完成まで、続く・・・)