HOME

AVGAの実験(マリオデモ)

回路1  回路2   2008.12.2

ご注意:SYNCはC13に直接つなぐような回路になっていますが、Simさんから2V入力というアドバイスをもらって調べたところ、IR3Y29AのSYNC SEPという端子は2V入力で過電圧防止のダイオードは入っていますが5Vは厳しいということがわかりました。C13に繋ぐ場合は抵抗分圧でHIレベルを2Vに抑えてください。SYNC INに入っていると勘違いしていました。すみません。

マリオデモ版ファーム Video関連Ver0.21

デモなし版ファーム Video関連Ver0.21

 

senshuさんから紹介してもらったAVGAですが、ATmega168と抵抗数本で簡単にRGBモニタへ画像を表示できるライブラリ・ファームウエアということで、今回早速試してみました。使用した5.6インチTFT液晶モニタは特売で買ったリサイクル品で、アナログRGB(NTSC)入力ができます。接続によってコンポジットVideo(NTSC)もできる便利な液晶です。

AVGAでの注意事項

今回の実験ではアナログRGB(NTSC)ですが、今回のような液晶モニタでないと映すことができない信号です。なにが問題かという水平周波数がNTSCの15.734KHzでは通常のPCのモニタ等では低すぎて入力できないのです。調べたらマルチスキャンモニタでも30KHz以上でした。

では、AVGAの紹介はやはり本家が一番くわしいので、ごらんください。


●本家AVGAサイト(AVRによるアナログRGB出力の映像表示プロジェクト)
http://avga.prometheus4.com/index.php

●Makeでの紹介ページ
http://jp.makezine.com/blog/2008/12/avga_avr_video_games_mari.html

 

今回の液晶で表示するにあたって、変更した点や、気づいたこと書きました

PALとNTSCの違い(テレビ規格)

 

 ライン数

 有効走査線の最大数

 表示方式

 垂直同期周波数

水平同期周波数

 カラーサブキャリア周波数

 PAL

 625本

576本

 インターレス4:3

 25Hz

 15.625KHz

 ≒4.43MHz

=4433619Hz±?

 NTSC

 525本

485本

 インターレス4:3

 29.97Hz

 15.734KHz

 ≒3.58MHz

=3579545Hz±10Hz

 TVでは1画面を2回にわけて書いています。1画面分を1フレームと呼び、1フレーム(525本)を奇数ライン(262.5本)、偶数ライン(262.5本)というように分けていて奇数フィールド、偶数フィールドと呼んでいます。たぶんちょっとラインをずらして書いて垂直解像度を高密度にするという意味だと思います。

 AVGAの仕様

 

解像度 水平x垂直

1フレームライン数

PAL

192x144ドット

288本

NTSC

160x120ドット

240本

 

基本のメインはこれだけ (ただしデモなし版です) 

int main( void )

{

  //map memory areas for video driver

  driver_mmap(screen, pgmmap, rammap);

  //initialization for PAL signal

  video_init(NTSC);

  //start engine

  enable();

 

  //wait a second for TV to get in sync.

  wait_seconds(1);

 

  //print a string

  driver_print_C(6, 8, "Hello, world!");

 

  //halt so we can see it :)

  while (1);

}

 

 シンプルイズBESTです。こういうmainは好きです。

 

 現在のバージョンではvideo_init(NTSC)でPAL/NTSCの選択初期化はしているのですが、全ソースにNTSCを伝えているわけでないので後術のVIDEO_YPOSのようなPAL用にしか使えないdefine定義が残っていたりします。

 

20MHz水晶への変更について

AVGAのデフォルト水晶は19.6608MHzですが20MHzに変更して大丈夫です。これによりドットクロックがほんの少し20/19.6608だけ速くなるので水平方向の幅が2%ほど小さくなりますが問題ないです。

NTSCのサポートはVer0.20以上

上記本家AVGAサイトからダウンロードしたマリオデモ版(Video関連Ver0.19)ですが、video_init(PAL)だとうまく波形がでてますが、video_init(NTSC)へ変更すると垂直同期タイミングのフィールド幅がNTSCの16msecとPALの20msecが混在しているような感じでした。ドキュメントをみるとVideo関連はVer0.20からNTSCがサポートされているようで、このままでは使用できません。

 

上図

PAL版のGREEN信号波形(ピンク)とSYNC波形(オレンジ)

SYNCの20ms毎に濃くなっているのが垂直同期です。

下図

NTSC版のGREEN信号(ピンク)とSYNC波形(オレンジ)

SYNCの垂直同期が16msで周期的にでていないのがわかります。さらにGREEN信号がないFieldが存在します。本来はすべてのFieldに映像信号があります。

 

Video関連Ver0.21への変更方法

プロジェクトファイルのAVGAフォルダにVideo関連ファイルがまとめられています。AVGA_release_021のプロジェクトファイルのAVGAフォルダをマリオのプロジェクトファイルのAVGAフォルダへ丸ごとコピーします。当サイトのマリオデモ版はすでにVideo関連Ver0.21にアップしています。

ソース全体でPALとNTSCの切り替えがない!(Ver0.19およびVer0.21)

ソース全体でPALとNTSCの切り替えがないので、一部PAL用固定になっている定義を発見しました。

config_screen.hとvideo.hのVIDEO_YPOSがPAL用になっています。
NTSC用では240となるはずです。

  //#define VIDEO_YPOS 288
  #define VIDEO_YPOS 240 //すん

 

NTSC版のGREEN信号(ピンク)とSYNC波形(オレンジ)

SYNCの垂直同期が16msで周期的にでているのがわかります。

 

マリオデモをつないでみました

(写真は液晶モニタに接続した状態の波形です)

AVGAのHardwareページに書いてある抵抗値に変更しました。
  Analog PAL TV with SCART connector (75 ohm inputs):
  R1=R2=R3=470R
  R4=R5=R6=680R
  R7=R8=R9=100R

SYNCはTTLレベルなので抵抗なしにしました。

 

NTSC版のGREEN信号(ピンク)とSYNC波形(オレンジ)

GREEN信号の波形のレベルが700mVになっているのがわかります。ピークでも1V以下です。

 

WSN190基板とブレッドボード使用。ブレッドボードはRGBの分圧抵抗とスイッチです。

実際の色合いはこんな感じです。ちょっと黄色すぎるような感じもしますが、どうなのでしょう。

PUSHスイッチでマリオが右、左に走り、ジャンプすることができるマリオデモです。

 

コンパイラについて

WinAVR20060421ば一番ワーニングが少ないので、たぶん本家ではこのバージョンで開発していると思います。最近のWinAVRでは倍近くのワーニングがでます。

 

FLASHROM、RAM使用量

以下はマリオのプロジェクトファイルのROM,RAM使用量です。
AVR Memory Usage
----------------
Device: atmega168
Program: 15432 bytes (94.2% Full)
(.text + .data + .bootloader)
Data: 939 bytes (91.7% Full)
(.data + .bss + .noinit)
背景用だと思いますが、目いっぱいデータが詰め込まれているのがわかります。

ゲームでなければ、もっとROMは空きがあります。
以下はゲームなしプロジェクトファイルのROM,RAM使用量です。
AVR Memory Usage
----------------
Device: atmega168
Program: 6702 bytes (40.9% Full)
(.text + .data + .bootloader)
Data: 935 bytes (91.3% Full)
(.data + .bss + .noinit)

 

PAL版のマリオデモではマリオのX,Y座標が表示されている件

Makeの動画などをみるとPAL画面ではマリオのX,Y座標が表示されています。どうやらNTSCでは座標表示エリアが下に行き過ぎてしまい表示されないみたいです。

私もいろいろ試しましたが、座標表示エリアを無理やり上にもってくると、マリオが下に張り付いて下スクロールがかかりっぱなしになりました。マリオの移動可能範囲を外れるようです。もし正常に座標表示できるようにされた方がいたら、どうやるのか教えてください。

 

次回の予定など

今回はとりあえず動くところまでを実験してみました。まだマリオデモは完全に修正できてません。

今後はマリオデモの解析やAVGAの仕組みや動作を理解したいと思います。

 

以上

 IR3Y29A

 

inserted by FC2 system