Lynx-EyEDの電音鍵盤 新館

広帯域制御屋の駄文とか

秋月I2C液晶をeXodusinoで使う

Cortex-M0 Arduino互換環境 eXodusinoではArduino I2C(Wireクラス)をソフトウェアでエミュレートしています。*1
が、、時々ACKを取りこぼしたりする現象が確認できたので、Wireクラスのデバッグもかねて動作させてみました。

秋月I2C液晶はこれを使ってます↓
http://akizukidenshi.com/catalog/g/gP-05693/
I2C接続キャラクタLCDモジュール[16x2行]白色バックライト付
[ACM1602NI-FLW-FBW-M01]

液晶制御用のソースコード1から書くのがスーパーめんどくさかったので、実績のあるコードを拝借することに。

参考ブログ:
ThinkAboutPCB::ワンチップArduinoで秋月I2C LCDを使う (orion_cosmo さん)
構想100年::秋月のI2C接続キャラクタLCDモジュールACM1602NIをArduinoで使う (まりす さん)
ありがとうございます。
どちらでもArduino向け秋月I2C液晶クラスが手に入ります。

まりすさんはArduino 1.0以降とArduino-0023以前のどちらのクラスにも対応されている上、ご自身のLiquidCrystalクラスを継承されている模様で、使っているインターフェースに関わらずキャラクタ液晶をポータブルに取り扱うことができます。

さて、今回はorion_cosmoさんのAkiI2CLcdクラスを使わせていただきました。
オリジナルとの変更点としては、

  • インクルードファイルをarduino.h から libmary.hに変更した
  • byte型変数をuint8_t型に直した
  • eXodusinoはArduino-0023ベースなのでWire.writeをWire.sendに変更した

これだけで、特に大きな変更は加えませんでした。なお、ライセンスが不明なのでこの変更を加えたAkiI2CLcdクラスを公表することは致しません。orion_cosmo氏のページから頂いてきて各自変更ができると思います。


akiI2Clcd.cpp/.hの各ファイルをeXodusinoプロジェクトに追加し、実機動作させてみます。
なお、eXodusinoでは任意のIOピンをI2Cに利用することができます。ただし、諸事情により1chのみです。(ぉぃ
user_application.cppを以下のように変更します。

#include "libmary.h"
#include <Wire.h>
#include <akiI2Clcd.h>

akiI2Clcd AKI=akiI2Clcd(0x50); //スレーブアドレス指定

void setup()
{
	Wire.begin(2,4); 	// SDA=2番ピン,scl=4番ピンを指定する
	Serial.begin(9600);
	Serial.println("Start!");
	AKI.I2CLCD_init();
	AKI.I2CLCD_clear();
}

void loop()
{
	char a[] = "Hello World!";
	char b[] = "ACM1602NI";
	AKI.I2CLCD_setCursor(0,0);
	AKI.I2CLCD_print(a);
	AKI.I2CLCD_setCursor(0,1);
	AKI.I2CLCD_print(b);
	Serial.println("end");
	for(;;);
}

これを、TeraTermやCuteComをつかってeXodusino本体に書き込むと、、

f:id:Lynx-EyED:20120607210550j:image
はい、ドーーーーーーーーーーーーーン。

おしまい。*2

*1:現状ではI2Cマスタのみ

*2:eXodusinoプロジェクトはこちらからダウンロードできます。 http://github.com/lynxeyed-atsu/eXodusino/