フォト
2025年4月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30      
無料ブログはココログ

« Aliexpressで購入した商品が不良品のため「紛争」を起こすことに.. | トップページ | 甘えん坊のルミちゃん »

2015年2月22日 (日)

arduinoで安価にテレビに映像を出力するその2

ビデオ出力ネタです。

以前arduinoで、arduino-tvoutという映像出力を試してみたのですが、
今回はNigel Battenさんがホームページ「Batsocks」にて公開している、
TellyMateを試してみました。

(注意: TellyMakeの商標は作成者Nigel Battenさんにあります。回路図やソースは
  公開されており、自由に利用できますが、TellyMakeを名乗るのは控えましょう)

01
(紹介ページ: http://www.batsocks.co.uk/products/Other/TellyMate.htm )

TellyMateを簡単に説明すると、Atmega8/88/168/328p を使った
ビデオ出力モジュール(ターミナル出力モジュール)です。
arduinoとシリアル通信でデータをやり取りして、キャラクタ表示をテレビに出力
できます。

02
   TellyMate TTL Kit購入ページ   http://www.batsocks.co.uk/products/Other/TellyMate%20TTL%20Kit.htm

Atmega8/88/168/328p系列のAVRマイコンに少々の部品で作成できます。
回路図およびソース、サンプルプログラムが公開されています。
更にキットの販売も行っています(上記の写真のリンクで購入できます)。



んで、早速ブレッドボード上に作成してみました。
水晶発振子、三端子レギュレータ等、部品揃えるのよりは
arduino pro mini(中華製) 1個使った方が速そうなので、arduinoのブートローダ部は
潰してUSBbaspでプログラムを書込みました。

追加パーツは、
  秋月電子RCAジャックDIP化キット 100円
  ダイオード 1N4148  2個 4円
で合計300円くらいで実装出来ます(ブレッドボード、ワイヤー類は除く)。 

書込みのためのバッチファイル、イメージファイルが用意されていて
回路ができれば、コマンドを一回実行すれば焼き上がります。

実際に組みあがった雰囲気はこんな感じです。
ビデオコンポーネント出力を小型液晶モニタに接続して映しています。

arduinoとモジュールをシリアル接続して、arduinoから制御して画面を表示します。
ダム端末ってやつですよね、これって。

Dscn3629

フォントが自由に定義出来るっぽいので、試しに美咲フォントを流用して
半角カタカタを流し込んでみました。ちゃんと表示できましたね。
(フォントデータの書込みはarduino側からできます)。
表示には倍角表示機能があり、大きく表示することもできます。

Dscn3630

シリアル接続なので、arduinoではなく、パソコンに繋げてTera Termで通信すれば
打った文字がそのまま表示するこもできます。
通常のコンソール画面的な制御(制御文字、エスケープ文字)で文字の表示制御
ができます。

表示はNTSCとPALに対応しています。接続してるモニタはNTSCよりもPALの方が
綺麗に映りました。テレビにつなげるとPALでは映らず、NTSCでのみ映りました。
スケッチはこんな感じです。ただ単に、シリアル接続して出力しているだけです。

/* Example Sketch for a TellyMate Shield */
/* Hello World */
#define CHAR_ESC '\x1B'
#define CHAR_DLE '\x10'
void setup()
{
    Serial.begin( 57600 ) ;
    Serial.write( CHAR_ESC ) ;
    Serial.write( 'E' ) ; // clear screen    
    
    for ( byte row = 0 ; row < 25 ; row++ ){
        tm_cursor_move( row , 0 ) ; // move the cursor the required row (any column would do)
        Serial.write( CHAR_ESC ) ;
        Serial.write( '_' ) ;
        Serial.write( ':') ; // use the specified fontbank
    }
    tm_cursor_move( 0 , 0 );

    Serial.println( "Hello World!" ) ; 
    Serial.println("\n");    
    Serial.write( CHAR_ESC ) ;
    Serial.write( '_' ) ;
    Serial.write( '4') ; // use the specified fontbank
    Serial.println("\xc8\xba\x20\xc6\x20\xba\xa5\xdd\xa5\xca\xde\xa5\xdd\xa5\xdc");   
    Serial.write( CHAR_ESC ) ;
    Serial.write( '_' ) ;
    Serial.write( '5') ; // use the specified fontbank
    Serial.println("\xc8\xba\x20\xc6\x20\xba\xa5\xdd\xa5\xca\xde\xa5\xdd\xa5\xdc");   
    Serial.write( CHAR_ESC ) ;
    Serial.write( '_' ) ;
    Serial.write( '0') ; // use the specified fontbank
    for (uint8_t i=32; i < 255;i++) {
      Serial.write( i ) ; 
    }
    Serial.println("\n");    
    Serial.println( "\xca\xdd\xb6\xb8\xb6\xc0\xb6\xc5") ; 
    Serial.println("\n");    

    //Serial.write( CHAR_ESC ) ;
    //Serial.write( 'Q' ) ;
}


void tm_cursor_move( uint8_t row , uint8_t col )
{ // <ESC>Yrc
  Serial.write( CHAR_ESC ) ;
  Serial.write( 'Y' ) ;
  Serial.write( 32 + row ) ;
  Serial.write( 32 + col ) ;
}
void loop()
{
    // do nothing!
}

意外といい感じに使えます。キャラクタ表示のみですが、
キャラクタを使って擬似的な76x75のグラフィック表示が可能です。

« Aliexpressで購入した商品が不良品のため「紛争」を起こすことに.. | トップページ | 甘えん坊のルミちゃん »

arduino」カテゴリの記事

AVR」カテゴリの記事

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック


この記事へのトラックバック一覧です: arduinoで安価にテレビに映像を出力するその2:

« Aliexpressで購入した商品が不良品のため「紛争」を起こすことに.. | トップページ | 甘えん坊のルミちゃん »