このブログを検索

ラベル 秋月電子 の投稿を表示しています。 すべての投稿を表示
ラベル 秋月電子 の投稿を表示しています。 すべての投稿を表示

2019/12/22

秋月電子 I2C接続キャラクタLCDモジュール 16x2行 白色バックライト付 ACM1602N1-FLW-FBW

参考
http://skomo.o.oo7.jp/f47/hp47_54.htm

ピンヘッダをはんだ付け

各ピンの機能

1(VSS)Ground
2(VDD)3.3V
3(Vo)LCD contrast adjust
4(SCL)SERIAL CLOCK INPUT
5(SDA)SERIAL DATA INPUT
6(BL+)Power supply for BL+
7(BL-)Power supply for BL-

arduino unoとの接続(ブレッドボード)

1 - Ground
2 - 3.3V
3 - 半固定抵抗の真ん中
4 - A4
5 - A5
6 - 3.3V
7 - Ground

半固定抵抗の両端をGround, 3.3Vへ

スケッチ

上記リンクのものをそのまま使って表示できた。
以下に転載

#include <Wire.h>
const char table[]={"From fairest creatures we desire "};

void setup() 
{
  Wire.begin();       // I2C初期化
  LCD_begin();

  byte i;
  writeCmd(0x80);//ディスプレイON、CURSOR-OFF、blinking-OFF
  delay(5);
  for(i=0;i<16;i++)
  {
    writeData(table[i]);
    delay();
  }
  writeCmd(0xC0);//2行目の先頭に移動
  delay(5);
  for(i=16;i<32;i++)
  {
    writeData(table[i]);
    delay(5);
  }
}

void loop() {}

void LCD_begin(void)
{
  // LCD初期化
  delay(15);
  writeCmd(0x01);//クリア ディスプレイ
  delay(5);
  writeCmd(0x38);//8ビットモード、2ライン、5x8ドット
  delay(5);
  writeCmd(0x0f);//ディスプレイON、CURSOR-ON、blinking-ON
  delay(5);
  writeCmd(0x06);//CURSOR移動、スクロールOFF
  delay(5);
}

void writeCmd(uint8_t cmd) 
{
  uint8_t rs_flg;
  Wire.beginTransmission(0x50);
  rs_flg = 0x00;
  Wire.write(rs_flg);
  Wire.write(cmd);
  Wire.endTransmission();
}

void writeData(uint8_t dat) 
{
  Wire.beginTransmission(0x50);
  Wire.write(0x80);
  Wire.write(dat);
  Wire.endTransmission();
}




2019/11/09

Raspberry Pi zeroでLCDディスプレイに文字を表示する

秋葉原に行って、秋月電子でRaspberry pi用のキャラクタLCDキットを買ってきた。

800何十円だった。

I2C液晶は AQM0802Aというもので8文字 x 2列表示できる。

それをラズパイに接続させるための変換基盤(PCA9515)と、ピンヘッダにさすためのソケットがついていて、液晶とソケットをはんだ付けする。

私ははんだ付けはあまりしないのでヘタクソで不安だったので、
WEBで調べたが簡単なので説明すらされていなかった。

案の定、液晶を基盤に接続するときに隣合ったピンがくっついてしまった。

くっついたところは半田をあたためながら楊枝でなんとか切り離した。


piはzeroを使った。

まず、raspi-configで

5 Interfacing Options
P5 I2C を選んでenableにする。

i2cdetectというコマンドで認識しているか確認するのだが
インストールされていなかったので

sudo apt-get install i2c-tools


はんだ付けしたソケットをpiのGPIOに挿す。

GPIOの1,3,5,7,9,11 を使う。

SDカードがある側を上にして、左の列の上から6本だ。

ちなみに基盤の各ピンに対応する箇所には以下のように書かれている

1: 3V3
3: SDA
5: SCL
7: LED
9: GND
11: RST

sudo i2cdetect -y 1

以下のような内容であれば正常だそうだ。

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- 3e -- 
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- -- 


これで使用できる状態なので早速なにか表示したいが、
WEBを探すとスクリプトが紹介されていたので、
IPアドレスとか任意の文字列を表示させてみた。

スクリプトではコマンド実行結果を加工したり任意の文字列をコマンドにわたせる型に変換したりしているのだが、
コマンドそのものの使い方を調べてみた。

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


まず初期化する。
以下2行がお決まりの初期化コマンドのようだ。

sudo i2cset -y 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i
sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i

0x3e というのが書き込み対象(I2CBUS)、i2cdetectで表示されていた値だ。

 i は「block data」、連続してデータを書き込む指定である。

文字コードは下記に記載がある。
http://akizukidenshi.com/download/ds/xiamen/AQM0802.pdf


#全部消して1行目の最初にカーソル移動
sudo i2cset -y 1 0x3e 0 0x38 0x0d 0x01 i

#指定したデータを連続して表示
 sudo i2cset -y 1 0x3e 0x40 [data1] [data2] [data3]  i

#改行してカーソルを先頭に移動
sudo i2cset -y 1 0x3e 0x00 0xc0 i

8文字入力したらコマンドで改行しないと折り返さない。

#「Hello」と表示
sudo i2cset -y 1 0x3e 0x40 0x48 0x65 0x6c 0x6c 0x6f  i

#「トウキョウ」と表示
sudo i2cset -y 1 0x3e 0x40 0xc4 0xb3 0xb7 0xae 0xb3  i