So-net無料ブログ作成
検索選択

50cmと離れていないのに [MSP430]

ez430rf2500.png
温度差あり過ぎじゃないの?。

PW160128LCD設定編 [MSP430]

例のパラレル/シリアルインタフェースを持つ、16階調グレースケール 160×128ピクセルLCDの設定を幾つかいじってみました。

まずこれは、昨日作成したBMP変換ツールで出力したデータをそのまま転送した物。 この状態を正常としますね。
初期化コマンドの一部を変更するだけで、画面を上下反対にできます。
これまた初期化コマンドの一部を変更するだけで、ネガにもできます。


よくできておりますね。

※コントラストについて。
コントラストは電源電圧に大きく依存します。初期化コマンドの一部にboostが有るのですが、これでLCDコントラスト電圧をどれ位発生するのかを決める事ができます。
勿論発生電圧が高い方がコントラストが大きくなるのですが、このLCDを3V程度で動作させる時は×4で動かしています。

さて、SPYBIWIREで動かすと、電源電圧が3.6Vとなってしまい(既に定格オーバーと言う話も)、SPYBIWIREで動かした設定を電池駆動に適用するとコントラストが小さく、よく見えません。
boostをいじると極端にコントラストが変ってしまうので、biasをいじる方が良さそうです。

以下に初期化コードを書いてみます。

  //ソフトウエアリセット
  SPI_Write( CMD_MODE, 0xf0 );  //bank0
  SPI_Write( CMD_MODE, 0x81 );  //software reset
  ms_wait( 50 );  //50ms待ちに入る

  //EM65101のEEPROMからの読み出し
  SPI_Write( CMD_MODE, 0xf2 );  //bank2
  SPI_Write( CMD_MODE, 0x53 );  //read extension command
  SPI_Write( CMD_MODE, 0x00 );  //read data from EEPROM
  us10_wait();  //10μsのソフトウエアwait
  us10_wait();  //10μsのソフトウエアwait
  SPI_Write( CMD_MODE, 0x06 );  //finish reading data from EEPROM
  SPI_Write( CMD_MODE, 0x52 );  //read extension command
  SPI_Write( CMD_MODE, 0x00 );  //read data from EEPROM
  us10_wait();  //10μsのソフトウエアwait
  us10_wait();  //10μsのソフトウエアwait
  SPI_Write( CMD_MODE, 0x06 );  //finish reading data from EEPROM
  SPI_Write( CMD_MODE, 0x51 );  //read EEPROM CV5~CV4
  SPI_Write( CMD_MODE, 0x00 );  //read data from EEPROM
  us10_wait();  //10μsのソフトウエアwait
  us10_wait();  //10μsのソフトウエアwait
  SPI_Write( CMD_MODE, 0x06 );  //finish reading data from EEPROM
  SPI_Write( CMD_MODE, 0x50 );  //read EEPROM CV3~CV0
  SPI_Write( CMD_MODE, 0x00 );  //read data from EEPROM
  us10_wait();  //10μsのソフトウエアwait
  us10_wait();  //10μsのソフトウエアwait
  SPI_Write( CMD_MODE, 0x06 );  //finish reading data from EEPROM

  //EM65101のパラメータ設定
  SPI_Write( CMD_MODE, 0xf0 );  //bank0
//  SPI_Write( CMD_MODE, 0xb5 );  //booster=6x
  SPI_Write( CMD_MODE, 0xb3 );  //booster=4x
  SPI_Write( CMD_MODE, 0x8a );  //power circuit ON
  SPI_Write( CMD_MODE, 0xc8 );  //1/12 bias(電源電圧が3.6Vの時のバイアス)
//  SPI_Write( CMD_MODE, 0xc6 );  //1/12 bias(電源電圧が3Vの時のバイアス)
  SPI_Write( CMD_MODE, 0xa8 );  //128duty
  SPI_Write( CMD_MODE, 0x90 );  //128duty
  SPI_Write( CMD_MODE, 0x73 );  //X,Y address auto increment
  SPI_Write( CMD_MODE, 0x00 );  //Start X address = 00
  SPI_Write( CMD_MODE, 0x10 );  //Start X address = 00
  SPI_Write( CMD_MODE, 0x20 );  //Start Y address = 00
//  SPI_Write( CMD_MODE, 0x51 );  //Display ON(倒置)
  SPI_Write( CMD_MODE, 0x59 );  //Display ON(通常)
  SPI_Write( CMD_MODE, 0x69 );  //REV=1,REF=1(ネガ)
//  SPI_Write( CMD_MODE, 0x60 );  //REV=0,REF=0(ポジ)
  SPI_Write( CMD_MODE, 0xf1 );  //bank1
  SPI_Write( CMD_MODE, 0x23 );  //Contrast value=0x3a
  SPI_Write( CMD_MODE, 0x1a );  //Contrast value=0x3a
  SPI_Write( CMD_MODE, 0x40 );  //OSC = 1x
  SPI_Write( CMD_MODE, 0x58 );  //Booster frequency = 6KHz
  SPI_Write( CMD_MODE, 0x64 );  //RM=8x
  SPI_Write( CMD_MODE, 0xf2 );  //bank2
  SPI_Write( CMD_MODE, 0xe3 );  //whole picture setting
  SPI_Write( CMD_MODE, 0xf0 );  //bank0

結局のところコントラストは電源電圧に依存してしまうので、もっとも良いのは電源電圧をモニタして、その電圧によって初期化パラメータを変えるのが良いでしょう。
電池駆動システムを考える時、割と電源電圧とか、ボード上の温度とかの情報が欲しくなります。

この点、MSP430にしろ、HCS08にしろ、内部のA/Dコンバータの一部の入力にこれらの入力があり、とても重宝します。
逆にR8Cなんかも電池駆動ソリューションを目指してはいるのでしょうけれど(例えば秋月で売り出したR8C/29シリーズ)、内部に電圧や温度を計測する要素が無い。非常に残念です。


試しにコマンドラインツールを作ってみた [MSP430]

Windows ビットマップファイルをPW160128LCDに最適化したデータに変換するプログラム。MSP430のアセンブラのテーブルを生成する。

一応2色(白黒)、16色(グレースケール)に対応している、、、筈だ。
しかしサイズが8で割り切れない時の対処を行っていないので、更なる煮詰めが必要。

/* ------------------------------------------------------------------------ */
/*  Windows ビットマップファイルをMSP430のASMソースに変換する。             */
/*                                                                          */
/*  変換出来るフォーマットはWindows BMP、2色と16階調グレースケールです。    */
/*  上記のフォーマットは、大概のペイントツールで可能でしょう。              */
/*                                        Copyright (C) 2007 - by hamayan   */
/* ------------------------------------------------------------------------ */
#include <stdio.h>
#include <stdlib.h>

typedef	struct	/*ビットマップファイルヘッダー*/
{
  char  bfType[2];  /*認識文字*/
  char  bfSize[4];  /*ファイルサイズ*/
  char  bfReserved1[2];  /*予約1*/
  char  bfReserved2[2];  /*予約2*/
  char  bfOffBits[4];  /*ピクセルデータまでのバイト数*/
} BITMAPFILEHEADER;

typedef  struct  /*ビットマップ情報ヘッダー*/
{
  char  biSize[4];  /*BITMAPFILEHEADERのサイズ*/
  char  biWidth[4];  /*ピクセルデータの幅*/
  char  biHeight[4];  /*ピクセルデータの高さ*/
  char  Planes[2];  /*カラープレーン数*/
  char  biBitCount[2];  /*色数*/
  char  biCompression[4];  /*圧縮形式*/
  char  biSizeImage[4];  /*ピクセルデータのサイズ*/
  char  biXPelsPerMeter[4];  /*水平解像度*/
  char  biYPelsPerMeter[4];  /*垂直解像度*/
  char  biClrUsed[4];  /*使用カラー数*/
  char  biClrImportant[4];  /*重要なカラー数*/
} BITMAPINFOHEADER;

typedef  struct  /*カラーパレット*/
{
  unsigned char  rgbBlue;  /*青の輝度*/
  unsigned char  rgbGreen;  /*緑の輝度*/
  unsigned char  rgbRed;    /*赤の輝度*/
  unsigned char  rgbReserved;  /*予約*/
} RGBQUAD;

typedef  struct  /*ファイル全体のフォーマット*/
{
  BITMAPFILEHEADER  bf;
  BITMAPINFOHEADER  bi;
  RGBQUAD        rgb[1];
} BITMAPFILEFORMAT;

int main( int argc, char *argv[] )
{
  char  *FileBuffer;
  unsigned char *bmp,data,bit_chk;
  int    i,j,k,width,line,shift;
  long  FileSz,curpos;
  BITMAPFILEFORMAT  *head;
  RGBQUAD        *rgb;
  FILE  *in,*out;

  if( argc != 2 && argc != 3 )
  {
    printf( "Parameter Error\n" );
    return EOF;
  }

  if( argc == 2 ) out = stdout;
  else
  {
    out = fopen( argv[2], "w+t" );
  }

  /*引数のファイルをOPENする。*/
  if( (in = fopen( argv[ 1 ], "rb" )) == NULL ) return EOF;

  /*ファイルのサイズを取得する。*/
  curpos = ftell( in );
  fseek( in, 0, SEEK_END );
  FileSz = ftell( in );
  fseek( in, curpos, SEEK_SET );
  FileBuffer = malloc( FileSz + 1 );

  /*ファイルの内容を取込み*/
  fread( FileBuffer, 1, FileSz, in );

  /*ファイルの内容を取り込んだので、CLOSEする。*/
  fclose( in );

  /*ファイルの情報を表示する。*/
  head = (BITMAPFILEFORMAT *)FileBuffer;

  /*意匠表示と擬似命令*/
  fprintf( out,
    ";* ------------------------------------------------------------------------ *\n"
    ";* 画像データテーブル                                                     *\n"
    ";*                                          designed by hamayan             *\n"
    ";*                                          Copyright (C) 2007 - by hamayan *\n"
    ";* ------------------------------------------------------------------------ *\n\n"
    "\tNAME bmp_data_table\n"
    "\tRSEG DATA16_C\n"
    "\tEXPORT  PixWidth\n"
    "\tEXPORT  PixHeight\n"
    "\tEXPORT  PixColor\n"
    "\tEXPORT  Graphic\n\n"
  );

  fprintf( out,  ";\tGraphic Info\n" );
  fprintf( out,
    ";\tType:%c%c*\n"
    ";\tFile size=%ld*\n"
    ";\tOffset=%ld*\n\n",
    head->bf.bfType[0],head->bf.bfType[1],
    *((long *)head->bf.bfSize),
    *((long *)head->bf.bfOffBits)
  );

  fprintf( out,
    ";\tHeader size=%ld\n"
    ";\tWidth=%ld\n"
    ";\tHeight=%ld\n"
    ";\tPlanes=%d\n"
    ";\tCount=%d\n"
    ";\tImg size=%d\n"
    ";\tX pics=%ld\n"
    ";\tY pics=%ld\n"
    ";\tColor Used=%d\n\n",
    *((long *)head->bi.biSize),
    *((long *)head->bi.biWidth),
    *((long *)head->bi.biHeight),
    *((short *)head->bi.Planes),
    *((short *)head->bi.biBitCount),
    *((long *)head->bi.biSizeImage),
    *((long *)head->bi.biXPelsPerMeter),
    *((long *)head->bi.biYPelsPerMeter),
    *((long *)head->bi.biClrUsed)
  );

  fprintf( out, 
    "PixWidth:\tDW\t%ld\n"
    "PixHeight:\tDW\t%ld\n"
    "PixColor:\tDW\t%ld\n",
    *((long *)head->bi.biWidth),
    *((long *)head->bi.biHeight),
    *((long *)head->bi.biClrUsed)
  );

#define    BITCOUNT  (*((short *)head->bi.biBitCount))
#define    OFFBITS    (*((long *)head->bf.bfOffBits))
#define    HEIGHT    (*((long *)head->bi.biHeight) - 1)

  /*縦横サイズの調整*/
  width = *((long *)head->bi.biWidth);    /*横方向のbyte数を計算*/
  width = ((width - 1) * BITCOUNT / 8) + 1;
  line = (((width - 1) / sizeof(long)) + 1) * sizeof(long);

  /*左下を原点にしている為に、上下方向のみ入れ替えが必要となる。*/

  /*画像データをASMソースファイルに変換する。*/
  fprintf( out, "\n;\tparameter width = %d height = %d line = %d\n", width, HEIGHT + 1, line );
  fprintf( out, "Graphic:\n" );
  for( i = HEIGHT; i >= 0; i -= 8 )  /*逆順に廻して行く*/
  {
    bmp = (unsigned char *)head + (i * line) + OFFBITS;  /*パレット番号が登録されたテーブルから読み出し*/
    for( j = 0; j < width; j++ )
    {
      fprintf( out, "\tDB\t" );
      for( k = 0,bit_chk = 0x80; k < 8; k++ )
      {
        data =  ( *(bmp - (line * 0)) & bit_chk) ? 0x01 : 0x00;
        data |= ( *(bmp - (line * 1)) & bit_chk) ? 0x02 : 0x00;
        data |= ( *(bmp - (line * 2)) & bit_chk) ? 0x04 : 0x00;
        data |= ( *(bmp - (line * 3)) & bit_chk) ? 0x08 : 0x00;
        data |= ( *(bmp - (line * 4)) & bit_chk) ? 0x10 : 0x00;
        data |= ( *(bmp - (line * 5)) & bit_chk) ? 0x20 : 0x00;
        data |= ( *(bmp - (line * 6)) & bit_chk) ? 0x40 : 0x00;
        data |= ( *(bmp - (line * 7)) & bit_chk) ? 0x80 : 0x00;
        bit_chk >>= 1;

        if( k != 7 )
          fprintf( out, "0x%02X,", ~data & 0x00ff );
        else
          fprintf( out, "0x%02X\n", ~data & 0x00ff );
      }
      bmp++;
    }
    putc( '\n', out );
  }

  for( i = HEIGHT; i >= 0; i-- )  /*逆順に廻して行く*/
  {
    fprintf( out,  ";\t" );
    bmp = (unsigned char *)head + (i * line) + OFFBITS;  /*パレット番号が登録されたテーブルから読み出し*/
    for( j = 0; j < width; j++ )
    {
      for( k = 0; k < 8; k++ )
      {
        fprintf( out, "%c", (*bmp & (0x80 >> k)) ? ' ' : '*' );
      }
      bmp++;
    }
    fprintf( out,  "\n" );
  }

  fprintf( out, "\n\tEND\n\n" );

  /*意匠表示*/
  fprintf( out,
    "\n"
    ";* ------------------------------------------------------------------------ *\n"
    ";* end of file                                                              *\n"
    ";*                                          designed by hamayan             *\n"
    ";*                                          Copyright (C) 2007 - by hamayan *\n"
    ";* ------------------------------------------------------------------------ *\n\n"
  );

  if( argc == 3 ) fclose( out );
  free( FileBuffer );
  return 0;
}

/* ------------------------------------------------------------------------ */
/*                                         Copyright (C) 2007 - by hamayan  */
/* ------------------------------------------------------------------------ */


MSP430F2274 + LCD Gadget その後 [MSP430]

まあ、やりたい事、やらなければならない事の上に、風邪をこじらせて見たりと、なかなか開発が進まないのですが、F2274オルゴール計画の第一歩として16階調グラフィックLCDに写真を表示する所までは来ましたよ。

写真に写っているのはET2007の時のパスカルさん。

元はWindowsのBMP形式、16色グレースケール、圧縮無しで作成したバイナリファイルを、MSP430用のアセンブラのテーブルに変換してプロジェクトに取り込み、プログラムでグラフィック領域のデータを読み込み、このLCDのデータフォーマットに変換して転送と、結構面倒な手続きで表示しています。
実はこの写真、左右、上下方向が逆になっているんです。
まあビットマップデータに関しては、MSP430で変換処理をやらせるより、従来も使った、パソコン上でLCDに最適化したデータに変換しておいてから、MSP430に転送する方式が良いですね。
なんせ、4KbyteしかCソースコードを記述できないので、あらゆる所でケチったコードを書かないと。

パラレルでも、シリアルでもインタフェースできるこのLCD(変換アダプター付き)、是非パスカルさんの所で買ってみてください。
http://passworld.co.jp/index.php?lang=JP&lieu=Accueil
MSP430に限らず、便利に使えますよ。だって秋月のあの諧調無しのLCDが2100え※*?¥@dsk・s;


ATS2007へのお誘い [MSP430]

ATS2007
いやしかし、こちらへの参加はスケジュールの都合で無理、、、っぽい。
じゃあ何を!ですが、パスカルさんが、サードパーティベンダーとして出展、公演を行いますので、是非お会いしてきてください。

で、写真の基板も、「行くなら持って行って!」と渡してしまったので、もしかしたら当日見る事が出来るかもしれません。
まあ、パターン失敗しているので修正が入り、ちょっと恥ずかしいのですが。

私の方も、先日パスワールドさんから購入した液晶と、この基板を接続して、何か作ろうかと思っています。
F2274にはOP-AMPが内蔵されているので、OP-AMPで加算回路を構成し、タイマーで3つ位の音を同時に発生させ、合成、それでスピーカーを鳴らす、”絵の出るオルゴール”辺りが最初の目標かな。

そこで、バイナリデータをASMソース化するツールを作らねばならない事に繋がると。


新しいGadgetを入手 [MSP430]

パスワールドさんから写真のGadget(ソロバン開発ボード、グラフィック液晶各種)を入手しました。

もうグラフィック表示し放題です。

下敷きになっているのは、例の日経ソフトウエアです。
ファミレスで音声用レコーダーを挟んだ形でインタビューされたので、どの様な記事になるのか興味津々でしたが、流石に上手くまとめられていますね。

コメントにはFTF Design Challenge Japanに付いての紹介までされていて、これ(FTF2008 Design Challenge Japanに付いて)ってメディアがこの事に付いて紹介したのはWEBも含めて初めてではないのかな?。
優勝賞金が1万ドルなんだからもっとメディアで取り扱っても良いのに、汎用OSプログラミング専門雑誌に抜かれるなんて。

日経ソフトウエア 2008年 01月号 [雑誌]

日経ソフトウエア 2008年 01月号 [雑誌]

  • 作者:
  • 出版社/メーカー: 日経BP出版センター
  • 発売日: 2007/11/24
  • メディア: 雑誌


一つ確認した事 [MSP430]

MSP430用のIARのキックスタート版では、Cソースに由来するコードサイズの上限が4Kbyteなのですが、じゃあコードではないconstデータはカウントされるのか?ですが、カウントされるみたいです。
つまりコードは小さくとも、constデータが大きければ制限が掛かってしまいます。

と言う訳で、配列をアセンブラコードで出力するツールを作った方が良さそう。


そうかPRESI DIPかぁ [MSP430]

そうかぁPRESI DIPってメーカーでハーフピッチのヘッダー、ソケットを製造しているのね。
MSP430のEZ430-F2013の回路図に掲載されている部品名をぐぐっても、ぐぐってもそのメーカーとか売っている所を見つけられず、ほとんど諦めていましたが、、、。やっぱり「三人寄らば文殊の知恵」と言うか、ネット上だとちゃんと知っている人も居る訳で、情報提供してくれる方は本当に有り難い。(と言ってもこっちに情報を貰った訳ではないけれどね。)

物を入手できるかもしれないとなると、明かりが見えてきたと言うか、ちょっとでも動き出す事ができるかも。
http://www.k-tokiwa.co.jp/product.php?series_id=3759&maker_id=84

ただ標準品が25ピンと50ピンで、今回欲しいのは6ピン、これはEZ430-F2013では4ピンしか使っていないが、430RFでは6ピン仕様となっているので、6ピン位まで対応できるかな?と言う思惑からです。
http://www.ti.com/corp/docs/landing/ez430tool/index.htm?DCMP=MSP430ez430RFTools&HQS=Other+OT+eZ430-RF
いずれにしてもF2xxxシリーズは、主力をF22xx、F23xxシリーズにして来るでしょうから。

取り敢えず常盤商工には在庫を聞いてみました。
1000個単位とかだったらどうしよう、、、充分あり得るなぁ。

MSP430 リファレンス・ガイド

MSP430 リファレンス・ガイド

  • 作者: 小倉 康司
  • 出版社/メーカー: 技術評論社
  • 発売日: 2005/11/10
  • メディア: 大型本


それでLEDを光センサーとして使ったら 続き [MSP430]

例のいきなりZIPファイルがダウンロードされてしまうリンク先のプロジェクトですが、ez430-F2013でもそのまま動作したと報告もらいました。

お持ちの方は試してみて!。

※容量性PADもなんか考えてみます。


MSP430入門セミナー関連の話題(ちょっとだけ) [MSP430]

入門セミナーでデモを行っていたプロジェクトが以下のリンクから落とせます。
いきなりzipファイルをダウンロードしちゃいますが(笑)。
http://www.ti.com/lit/zip/slac136

開発ツールの割り引きキャンペーンが行われています。が、購入するには受講者番号が必要です。
https://www.extra-web.net/tij/tool-discount/
※どうですか!。


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。