SSブログ

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シリーズ)、内部に電圧や温度を計測する要素が無い。非常に残念です。


nice!(0)  コメント(2)  トラックバック(0) 

nice! 0

コメント 2

k_t

最近、パスワードって言うときにパスワールドって言いそうになりますよ。
by k_t (2007-12-20 17:09) 

hamayan

↑ふふふ、密かにimprinting中です。
by hamayan (2007-12-20 17:27) 

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

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