目次

デバッグLCD接続

 ファームウエア開発のとき、MCRマシンがセンサー値で
 どういう判断をしているのかを、LCDに表示した方が
 テスト、デバッグに有利と考え、IICバスのLCDを入手。



 IICバスインタフェースというので、接続を4ピンに
 とする変換基板も同時入手して対応します。



 動作確認のために、ATmega328に実装したAmForthを利用。



 ATmega328のポートDの2^7、2^6の2ビットを次のように割当。

 2^7 PD7 SDA
 2^6 PD6 SCK

 ポートDの上位2ビットを出力として使うので、DDRに対して
 出力設定をパラメータ指定。

DDRD c@ $C0 OR DDRD c!

 8ビットのデータ転送が主体なので、データシートで
 必要なワードをどう定義するのかを調べます。



 SとPのコンディションがあるので、これらをワードで
 定義してしまいます。

: INIT.START
  PORTD c@ $C0 or  PORTD c! \ SDA = 1 , SCK = 1
  PORTD c@ $80 xor PORTD c! \ SDA = 0 , SCK = 1
  PORTD c@ $40 xor PORTD c! \ SDA = 0 , SCK = 0
;

: EXIT.PERFORM
  PORTD c@ $80 xor PORTD c! \ SDA = 0
  PORTD c@ $40 or  PORTD c! \ SCK = 1
  PORTD c@ $80 or  PORTD c! \ SDA = 1 , SCK = 1
;

 つぎは8ビットを転送して、LCDからACKを取得する
 ワードを定義します。

: SND.IIC
  PORTD c@ $C0 XOR PORTD c! \ clear 2^7 , 2^6
  8 0 do i
    lshift dup
    $80 and
    0 <> if PORTD c@ $80 or PORTD c! then
    PORTD c@ $40 OR PORTD c!
    PORTD c@ $40 XOR PORTD c!
    PORTD c@ $80 XOR PORTD c!
  loop
  \ get ACK
  $80 DDRD c@ XOR DDRD c!
  PIND c@ $80 AND
  $80 DDRD c@ OR DDRD c!
;

 8ビット転送までワードを定義したなら
 処理を考えていきます。

 IICバスアドレス、コントロールバイト、パラメータの
 ワンセットで送信する仕様を採用していきます。

 この仕様なら、IICバスアドレスは$3E固定で
 2バイトをワードSND.IICに、2回にわけての
 与え方で処理できます。

 コーリングシーケンスは、次のようにすれば充分。

$30 $41 SND.IICX

 コントロールバイト、パラメータの順で与えられる
 ので、ワードswapを使って、入れ替えてからワード
 SND.IICを使うだけで済みます。

 ワードSND.IICXの定義は、以下。

: SND.IIX
  INIT.START
  $3E SND.IIC
  SWAP SND.IIC SND.IIC
  EXIT.PERFORM
;

 複数バイトを送信するときには、コントロールバイトの
 MSBを1にするか0にするかを判断して処理しないと駄目
 ですが、1パラメータを送信するので、その判定を回避
 できます。

 初期化が必要なので、そのシーケンスを確認。



 ms単位の時間待ちは、ワードMSを利用すればよいので
 シーケンスを実現するワードを定義。

: INIT.LCD
  50 MS
  $38 $39 SND.IICX
  $14 $73 SND.IICX
  $56 $6C SND.IICX
  200 MS
  $38 $01 SND.IICX
  $0C $0C SND.IICX
;

(under construction)

目次

inserted by FC2 system