更新

ワンチップマイコンで作るビデオ信号ジェネレータ[リーフレット(pdf)][懇話会資料(pdf)]

小山智史(弘前大学)

 2011年に予定されているアナログビデオ放送の停波に伴い、アナログテレビの大量廃棄が社会問題となることが予想されます。国内のアナログテレビの台数は1億台以上と推計されていますから、想像を絶する大量のゴミが生まれることになります。まだ使えるモノを捨てるというのは甚だもったいないことです。人であれモノであれ、この世に生まれ出た限り、その役割を全うしたいものです。ここでは、ワンチップマイコン(ATMEL社のAVRマイコン)を使い、アナログテレビの再利用の可能性をさまざま試してみました。(2007年7月)

 [1]の記事を見た時には、ワンチップマイコンでビデオ信号を直接作ることができることに驚きました。また、[2]~[4]では、マイコンの内蔵メモリをVRAMとして使い、基本的な関数群を用意することにより、ビデオ装置のプログラム開発が容易になることを知りました。以下の装置はこれらを参考に製作したものです。

 なお、表示内容をプログラムできる小型ビデオ表示装置の初期のアイディアは2004年度の情報技術演習(院)の中で高橋学氏より出されたものです。また、表示内容を変えられるわけではありませんが、「ビデオバルブ」という小型のビデオ装置も商品化されているようです[5]。

製作例

TV電光掲示板画面写真 字幕オーバレイ
TV電光掲示板・字幕オーバレイ
TV時計画面 TV時計オーバレイ画面
TVクロック・オーバレイ
発表会用タイマー画面写真
発表会用タイマー
多目的タイマー画面写真
多目的タイマー
タイムエイド画面写真
タイムエイド
PONGゲーム画面写真
PONGゲーム
(技術情報)

 マイコンはATMEL社のAVRマイコンATtiny45を使いました。ビデオ信号の発生方法については、主にBruce Land氏の資料[2][3]を参考にしました。プログラムはWinAVRのgcc-avrでコンパイルします。

 タイマーや電光掲示板のカラー表示は、サブキャリア(SC)の4倍の周波数(14.32MHz)のクロックでマイコンを動作させ、サブキャリアバーストに対して位相を90°ずつ変えることにより、4色を表現しています。ただし、タイミングもレベルも規格外のため、テレビによってはうまく表示できないことがあるかもしれません。以下のプログラムで、1ドットにつきSC2周期分の波形を作っています。予め、r16にVRAMの1バイト分、r17には0x00、r18には0x02を入れておき、以下のプログラムを8回繰り返すと8ドット分の信号となります。次の1バイト分は予め別のレジスタに入れておき、同様のプログラム(r16の箇所が変わる)とします。このように6バイト分続ければ水平48ドット分のカラー信号となります。レジスタ数が多いAVRならではです。


ATtiny2313による単純なビデオ表示

2017.1.18 アセンブラでビデオ信号

 アセンブラで単純なビデオ信号を作ってみました。1MHzの内蔵クロックを利用しています。内蔵クロックにはジッタがあることが知られており、結果、表示されるビデオ画像はゆらゆらと揺らぎます。また、規格外のビデオ信号なのでテレビによってはうまく表示できないかもしれません。でも、とにもかくにもテレビに画像が表示されるので、初めてビデオ信号を作って表示させた時は感激します。

 以下は、所定のパターンで1ライン表示させた例(写真左)と、「イ」の文字を表示させた例(写真右)です。後者では、プログラム冒頭に以下のように8×8ビットのデータを置いています。

(写真)

(回路図と製作例)

回路図製作例

(プログラム)...video1line.asm,video8x8.asm

 このプログラムで作られるビデオ信号は以下のようなものです。ビデオのラインは0~255の256本で、0~2を垂直同期信号(VSYNC)にしています。video1line.asmでは、第64ラインだけに所定のドットパターン(プログラム中のdot patternの箇所)を表示させています。video8x8.asmでは、同じ表示を16ライン繰り返すことで、8ライン分を128ライン(第64~191ライン)に表示させています。

 はじめに書いたようにここで作ったビデオ信号は規格外のものでテレビがうまく表示してくれる保証はありません。しかし、かつて広く利用されたVHSなどのビデオデッキは、テープの劣化やテープ走行の揺らぎのため、かなりヨレヨレのビデオ信号になっていますが、それでもテレビは可能な限り表示してくれるように「寛容に」できています。プログラム中のコメント欄には参考までクロック数を記載してあります。水平1ラインを63クロック(63μs)、1画面を63μs×256=16msにしています。


ATmega88でモノクロの文字と画像表示

 ここでは1024バイトのSRAMの内の960バイトを横96×縦80ドットのモノクロビデオRAMとして用いました。同じラインを2本ずつ繰り返すことで縦160ラインの表示にしています。

○ 16×16ドット文字を6文字×5行表示

 文字表示には16×16ドットのbdfフォントを用いました。日本語フォントをすべてメモリ上に持つことはできません。

○ 96×80ドットモノクロBMPファイルの表示

 ペイントで描いた96×80ドットモノクロBMP画像ファイルを表示できるようにしてみました。BMPファイルをdumpで出力し、awkプログラム(96x80.awk)でCのソースファイル(96x80.h)に変換しています。

(写真)

画面写真 画面写真

(回路図)

回路図

(文字表示プログラム)...16x16.c, 16x16lib.c, bdf8.awk, bdf16a.awk, bdf16b.awk, bdf16c.awk, 16x16.bat

(BMP画像表示プログラム)...96x80.c, 96x80.awk, 96x80.bat


ATtiny45によるカラーバービデオ信号

 以前、アセンブラで書いたカラーバー信号のプログラムをCで書いてみました。また、チップはATtiny45を使い3ビットDACにしました。VRAMのビットマップ画像に自由に色をつけられるということではありませんので念のため。

(写真)

画面写真基板写真

(回路図)

回路図

(プログラム)...color45.c(WinAVR-20060421のgccで-Osのオプションをつけてコンパイル)


AT90S2313によるカラーバービデオ

2004.6.24 アセンブラで書いた初期のバージョン

 AVRマイコンを使ったビデオ信号ジェネレータです。テレビのAV端子に接続すると、

9→8→...→2→1→カラーバー
のように、表示が変化します。また、「3→2→1」の表示の時にはブザー音が鳴ります(音はおまけです)。

 AVRマイコン(AT90S2313-10)はクロックの上限を超えて使用しているので、再現性があるかどうかはわかりません。ビデオ信号は簡単な4ビットDAC回路で作っています。また、AVRをカラーサブキャリア(SC)の4倍のクロックで動作させ、プログラムで90°ずつ位相を変えて4色のカラーを表示しています。少し工夫すれば色数は増やせるかもしれません。

(写真)

数字表示カラーバー表示
写真

(回路図)

回路図

(プログラム)...col2313.asm, video.inc

(参考資料)
[1] 瀬戸口豊: ワンチップ・ブレークアウト・ゲームの製作, トランジスタ技術, 1997年5月号, pp.353-360.
[2] Bruce Land: AVR Video Generator with an AVR Mega163, Atmel Application Journal, Vol.3, pp.8-10(2004).
[3] Bruce Land: Video Generation with Atmel AVR microcontrollers(Cornell Univ. EE476), http://instruct1.cit.cornell.edu/courses/ee476/video/
[4] Bruce Land: Designing with Microcontrollers(Cornell Univ. ECE476), http://instruct1.cit.cornell.edu/courses/ee476/
[5] クワクボリョウタ: ビデオバルブ, http://www.vector-scan.com/, 2000.
[6] ChaN: NTSCビデオ信号タイミング規格(RS-170A)概要, http://elm-chan.org/docs/rs170a/spec_j.html


[ライタ][天文教材][ビデオ][発表会用タイマー][多目的タイマー][タイムエイドforTV][TV時計][テロッパー][PONG][写真立て][オルゴール][ピアノ][時計][貯金箱][ノック][リモコン][チャイム][マウス][テキスト]
koyama@hirosaki-u.ac.jp