LCD搭載Arduino互換機作成2012/12/11 21:54

小型LCD搭載のArduino互換機を、ユニバーサル基盤で作った。
LCDは、8×2行キャラクタ表示液晶モジュール ACM0802C-NLW-BBH。
HD44780コンパチブルタイプなので、LiquidCrystalライブラリ使って簡単に表示できる。
ピン配置は下記のようになっている。

 1ピン - GND
 2ピン - VCC
 3ピン - V0
 4ピン - RS
 5ピン - R/W
 6ピン - E
 7ピン - DB0
 8ピン - DB1
 9ピン - DB2
10ピン - DB3
11ピン - DB4
12ピン - DB5
13ピン - DB6
14ピン - DB7

今持ってる他のLCDと、1ピン、2ピンが逆なので注意が必要だ。

Arduinoとの接続は、4ピンモードで行う。

(自作機)   (LCD)
  GND -   1ピン(GND)
  VCC -   2ピン(VCC)
  D5   -   4ピン(RS)
  D6   -   6ピン(E)
  D9   -  11ピン(DB4)
  D10 -  12ピン(DB5)
  D11 -  13ピン(DB6)
  D12 -  14ピン(DB7)

LCDの3ピン(V0)には、可変抵抗を接続してコントラストの調整を行えるようにする。

そして互換機の制作。
マイコンはATmega328Pを使い、16MHzのクリスタルで駆動させる。
ブートローダはOptibootにしたので、Uno互換機になった。

LCD付Arduino互換機_1

下記のようなスケッチをコンパイルして書込み。

#include <Arduino.h>
#include <LiquidCrystal.h>

// instanciate the library and pass pins for (RS, Enable, D4, D5, D6, D7)

LiquidCrystal    lcd(5,6,9,10,11,12);

void setup(){
  lcd.begin(8,2);
   lcd.clear();
}

void loop(){
  int i,t;
  for(i=16;i>0;i--){
    lcd.setCursor(0,0);
    for(t=0;t<i;t++) lcd.print(" ");
    lcd.print("Arduino");
    delay(200);
  }

  for(i=5;i>0;i--){
    lcd.setCursor(0,1);
    lcd.print(" by T
.S");
    delay(1000);
    lcd.setCursor(0,1);
    lcd.print("        ");
    delay(300);

  }
}

LCDを接続して電源を入れたが・・・■■■■■■■■って表示されるだけ。
配線ミスを疑ってテスター当ててみたけど正常。
実は当初外付けクリスタル付けてなかったから、それを疑ってクリスタル点けたけど変化なし・・・

途方にくれながらネットで情報探してみたら、このLCDはR/W端子に信号を入れてやらないと駄目と書いてある。
そこでR/W端子をGNDに繋いでやったら、あっさり表示してくれた。

LCD付Arduino互換機_2

最終的なLCDとの接続はこんな感じ。

(自作機)   (LCD)
  GND -   1ピン(GND)
  VCC -   2ピン(VCC)
  D5   -   4ピン(RS)
  GND -   5ピン(R/W)
  D6   -   6ピン(E)
  D9   -  11ピン(DB4)
  D10 -  12ピン(DB5)
  D11 -  13ピン(DB6)
  D12 -  14ピン(DB7)
 (LCDの3ピン(V0)に、可変抵抗を接続)

これを作った後で知ったけど、ストロベリーリナックスでもっと小さいLCDが買えるようだ。
I2C液晶だし、端子ピッチが狭いから苦労しそうだけど、これも試してみたいな。