i2csetコマンドでAQM0802AキャラクタLCDを使うスクリプト

 2016-02-24
小さくてちょっとしたテストやお遊びに丁度良いAQM0802AキャラクタLCDをとりあず簡易に動かしてみたいときのスクリプト。
 
秋月さん家でわずか300円ちょっとで売っているAQM0802A-RN-GBWをトリアエズ使えるかどうか動作確認するための簡易スクリプトです。今後、chipやRaspberryPi等で使い回ししそうなので、備忘録として書いておきます。

lcd_print.sh


  • 使い方
  • 引数に16文字以内の文字列を付けて実行するだけ ASCII文字。
     $ ./lcd_print.sh hogefugapiyo

  • 設定・変数
    • LCD_ADDR 使用するLCDのI2Cバスアドレス 普通は0x3eのハズ
    • DATA_STR データを送信する際のコントロールバイト
    • CTRL_STR コマンドを送信する際のコントロールバイト
    • MES       LCDに表示する文字列を引数から取得する
    AQM0802Aは8桁x2行の16文字を表示しますが、それよりも引数の文字列が少なかったときのために、MES変数には引数で与えられる文字列の後ろに16文字のスペースを付けています。これで、最低16文字は確保されているので後の処理でエラー対応が簡単になります。

  • ASCIIコードへの変換
    • DATA=` echo -n "${MES}" | od -A n -t x1 -w16 | head -1 | sed -e 's/ / 0x/g' -e 's/^ //g'`
      1. echo -n "${MES}" 改行コードなしで変数MESを出力
      2. od -A n -t x1 -w16 受け取った文字列を16進数で表示 -A n でアドレス表示なし、-t x1 で1バイトずつスペース区切り表示、 -w16 で16文字ずつ改行
      3. head -1 先頭行のみ取得する、これで最大16文字が保証されます
      4. sed -e 's/ / 0x/g' -e 's/^ //g' i2csetコマンドに渡すために16進数の書式を整える
    • LINE1=`echo -n "${DATA}" | cut -d " " -f 1-8`
    • LINE2=`echo -n "${DATA}" | cut -d " " -f 9-16`
      cutコマンドで前半8文字と後半8文字を取得する

  • i2csetコマンドでいろいろする
    • 初期化 秋月同梱文書の「初期設定例」を忠実に再現
    • 表示文字列の送信 適宜カーソルの移動を行いながら文字列のデータを流し込む

aqm0802a_01.jpg aqm0802a_02.jpg
たぶん無事に表示されます(投げやり)
C.H.I.P.でしか動作確認してませんが、たぶん他のどれかでも動くと思う。(個人の感想です


その他: i2csetコマンドのお尻の i は、書き込み動作のモード設定で、I2C block dataを指定している。詳しくはi2csetコマンドの出力に載っている
% i2cset
Usage: i2cset [-f] [-y] [-m MASK] [-r] I2CBUS CHIP-ADDRESS DATA-ADDRESS [VALUE] ... [MODE]
I2CBUS is an integer or an I2C bus name
ADDRESS is an integer (0x03 - 0x77)
MODE is one of:
c (byte, no value)
b (byte data, default)
w (word data)
i (I2C block data)
s (SMBus block data)
Append p for SMBus PEC


 
コメント












管理者にだけ表示を許可する
トラックバック
トラックバックURL:
http://wbbwbb.blog83.fc2.com/tb.php/221-759a54fd
≪ トップページへこのページの先頭へ  ≫