em-Pits : 千葉研究所

このblogは農民blogです。
This blog is no mean.

ArduinoでキャラクターLCDに外字登録

2016年05月14日 | 製作記
 Arduino工作の覚書を残していこうと思う。

 今回はキャラクターLCDの外字登録。これには、LCDコントローラーのCGRAM(キャラクタージェネレーターRAM)という領域にデータを書き込んでやる必要がある。このアドレス指定が少し独特で、6bitで指定する。データ8bitの残り2bitはCGRAMのアドレスであることを示す固定コードになる。使えるのは8文字。

参考:このへん
http://baticadila.dip.jp/arduino_005.html
http://jsdiy.web.fc2.com/lcdclock/


 ArduinoのLiquidCrystalライブラリでは、createCharメソッドを使うことになる。ターゲットのキャラクターナンバー(つまり書き込める8つのうち1つ)と、書き込みたいビットマップデータを水平8bit(有効なのは下位5bit=5ドット分だけ)ずつ8ラインに分割した配列を渡す。


 void LiquidCrystal::createChar(uint8_t location, uint8_t charmap[]) {
location &= 0x7; // we only have 8 locations 0-7
command(LCD_SETCGRAMADDR | (location << 3));
for (int i=0; i<8; i++) {
write(charmap[i]);
}
</font>

 表示時には0x00~0x0Fまでの文字コードを指定してやればいいのだが、printを使うとASCIIコードが渡ってしまう(んだよね?)。ので、writeメソッドを使用して直接コードを渡す。
 このとき
>lcd.write(0)でerror: call of overloaded 'write(int)' is ambiguousと言われる
>http://blog.livedoor.jp/hardyboy/archives/6187464.html
問題があるので、「0」の記述に注意する。あとでよむ。