I2C動作のLCDプログラム

2014/03/09

今回はPICマイコンに搭載されているI2Cバスを使用してI2C動作するLCDを動作させます。
使用するLCDモジュールはストロベリーリナックスで販売しているSB1602Bで、配線は回路図のとおりになります。
I2Cというのは便利なものでデータ線を2本使うだけでマイコンがマスターになった場合、デバイス(スレーブ)をアドレス数と信号の品質が許される限りつなげて制御することができます。

早速プログラムを作るためにSB1602Bのサンプルソースを移植して動かしてみますがなぜか動きません。背景のコントラストが変わっているように見えるため、イニシャルはうまくいってそうなのですが何も表示されません。値が間違ってるのかたしかめるために、ためしにfor文で数字を増やしてあげてみると表示がでました!
ASCIIコード順に表示されるのでcharで変換がうまくできていないみたいです。そこでpicKit3のデバックで値を見てみるとぜんぜん違う値がでていることが判明。
なぜ違う値がでるのかさっぱりわからず他人のホームページをあさっていると「C18ではchar型を返すプログラムは、必ず呼び出し元にその関数の定義を書いておく必要がある」らしくためしてみるとすんなりいけました…
こんなコンパイラ仕様のために半月ぐらい悩んでいたのがばからしいがデータシート読んでないので今後はデータシートをきちんと読むことにしようと思う…
<プログラム>
I2C_LCD.c

参考
■PIC:PIC24FでI2C/LCDを動かす I2C液晶(SB1602B) マイコン風雲録
■C18コンパイラのありえない話(変数の受け渡しについて) じとめすきーの覚え書き
■MCC18 ライブラリ <i2c.h> はじめてのPIC

次へ