AVR ATtiny2313 ビデオ出力テスト
2008年10月 マイコン1個だけでビデオ出力ができるという。面白そうだ。 コンポジットビデオの信号規格、動作原理を調べてATtiny2313でテスト。 おお、映った。こりゃもう「マイ・ゲーム機」作りたくなるよな。 ※画像拡大はここをクリック。 |
とりあえず映してみるまで
ATtiny2313を使ってテレビに映像を出す。他にICは使わない。 カラー映像は信号処理的に難しいので、まずモノクロで映すことから始める。 コンポジットビデオの信号処理では0.1us単位(uはマイクロの代わり)のタイミング制御が必要となる。マイコンを1MHzで動作させると1クロックは1us。ということは最低でも10MHzで動かさないとシビアなタイミング制御に追いつけないということ。一応、テレビは若干の誤差を許してくれるので、ATtiny2313を「内部発振器の8MHz、分周なし」で動かして実験することにした。1クロックは0.125us。 結果はご覧の通り、何とか映った。 斜線の縞々は撮影したカメラの影響なので、実際のテレビ画面には映っていない。 この映像がどんな様子かというと、画面全体が水平1ライン毎に絶えずギザギザ左右に震えている。画面の両端が上から下までギザギザであることを見てもらえば分かると思う。 水平同期周波数15.734kHz、1ラインの周期は63.56us。マイコンの0.125us単位でこの時間はほぼ計測できる。が、困るのは内蔵発振器が「かなり大雑把な8MHz」の不安定動作であること。それで1ライン毎にバラバラな周期になっているのかもしれない(?)。これは外付けのクリスタルで動作させれば解決するはず。 コンポジットビデオの映像をマイコンでテレビに映すには、3つの電圧 ・同期信号を示す0V ・黒レベル0.286V(これ以上でこの付近の値。0.35Vでの回路を紹介したサイトもある) ・白レベル1.0V(これ以下でこの付近の値。0.8Vくらいまでなら白色と言えそう) が必要である。黒レベルと白レベルの間の電圧は灰色ということ。 これをATtiny2313のピンを2つ使って作り出している。ピンが2つで出力がH/Lなら組み合わせで電圧は4段階作れる。ということで自動的に灰色が1色作れた。写真では、背景が白、文字が灰色、文字の周りが黒である。文字は「AVR」なんだけど読めるかな? 1ラインの周期が63.56us。8MHz動作のマイコンでは割り算など重い処理を実行するとあっという間に無くなる時間だった。実際、3文字出すのでギリギリだった。もっとも、初めてのテスト出力なので、全然効率のよい処理の記述はしてなかったのだけども。 ともかく、この実験で重要なことが分かった。 ・文字にしろ画像(ドットパターンの絵)にしろ、多くを出力しようと思ったら、 処理速度を追求してプログラムを組まなければならない。 ・描画のテクニックとしてフレームバッファを持てば効率はよくなるはずだが、 ATtiny2313にはメモリが128byteしかないので(PCでいうメインメモリ)、難しい。 マイコンの動作周波数を上げれば処理速度は稼げる。ATtiny2313の仕様では20MHzまで。これはこれで頑張るとして、描画処理をどうしたもんか。この辺を考えるのがまた面白そうだ。 2008/10/27 追記: 「ギザギザ左右に震えている」の理由はどうもこれのようです。 AVR内蔵オシレータのジッタ(サイト:ELM) |
コンポジットビデオ信号(NTSCビデオ信号)について参考にしたサイト。 ・なひたふ電子 電子回路の豆知識 第6章 画像信号の豆知識 ・ELM RS-170A NTSCビデオ信号タイミング規格の概要 |