본문 바로가기
Arduino/AVR/2. Arduino프로젝트

arduino에서 LCD 구동하기 (미해결)

by pepsiman 2009. 4. 20.


먼저 내가 구입한 LCD는 플러그 하우스에서 구입한 16 x 1 의 charactor LCD이다. 모노에 백라이트는 없다.
모델명은 NEL16120 이라고 적혀있다.

내가 구입한 C-LCD는 14핀을 가지고 있는데 이런 LCD를 머라고 부르는지는 아직 모르겠다.
14 ~ 16 핀을 가지고 있는 LCD는 그 핀의 용도가 정해져 있는듯 하다.

C-LCD 핀의 내용

1 - Vss, GND - 전원 - 단자
2 - Vdd, 5v 전원 + 단자
3 - Vee, LCD 밝기 가변 저항 연결
4 - RS, Register Select
5 - R/W, Read/Write
6- E, Enable
7- D0, Data bit 0
8- D1, Data bit 1
9- D2, Data bit 2
10- D3, Data bit 3
11- D4, Data bit 4
12- D5, Data bit 5
13- D6, Data bit 6
14- D7, Data bit 7
15- back light -
16- back light +

핀 구성은 위와 같다. 백라이트를 사용하지 않는다면 15, 16 핀은 필요없다.
7 ~ 14핀의 data bit도 다 연결하지 않아도 된다. 대부분 11 ~ 14핀의 4bit로 구동된다. 4bit구동시 8bit를 둘로 나누어 두번에 걸쳐 보낸다.

H/W 회로연결
본인은 회로도와 연결 사진 찾느라 무지 고생했지만 사실 알고나니 연결은 무지 쉬웠다.
lcd의 1,2번은 각각 GND와 5v에 연결하고 3번은 저항에 연결해서 GND에 연결
4 ~14번 까지 다 연결해도 되고 4, 5, 6, 7, 8, 9, 10 만 연결해도 된다.
간단하게 후자로 하겠다.
LCD의 4, 5, 6, 7, 8, 9, 10핀과 arduino의 2 ~ 8핀을 순서대로 연결한다.


sketch는 LCD4Bit lib과 LiquidCrystal lib이 있는데, LCD4Bit는 기능(함수)이 좀 많은 편이고,
LiquidCrystal는 핀배열이 편하고 프로그램도 심플하다.

아래는 LiquidCrystal 예제이다.
예제 #include <LiquidCrystal.h> // rs, rw, enable, d0, d1, d2, d3 LiquidCrystal lcd(2, 3, 4, 5, 6, 7, 8); void setup() { lcd.print("hello, world!"); } void loop() {}

하지만 문제가 있었다. LCD 16문자중 왼쪽 8문자만 출력되는것이었다. 이 문제를 수정하기 위해선 LCD 초기화시 2줄 LCD로 초기화를 해줘야 하는것 같다. 시간이 없어 문자 출력되는것만 확인하고, 아직 위의 문제는 해결하지 못한 상태이다. LCD4Bit에서는 배선이 다르다. Contr핀은 가변저항, GND와 Vcc에 RS 핀은 12에, R/W 핀은 GND에, E는 2, D0 ~ D3은 arduino의 7 ~ 10 번에 연결해야 한다. 원래는 이게 정석인듯한데, LiquidCrystal lib은 핀 배열을 내가 정의 할수 있어서 연결하기 쉽게 바꾼것이다.


아래는 LCD4Bit의 예제이다.
#include <LCD4Bit.h> //create object to control an LCD. //number of lines in display=2 LCD4Bit lcd = LCD4Bit(2); void setup() { pinMode(13, OUTPUT); //we'll use the debug LED to output a heartbeat lcd.init(); } void loop() { lcd.clear(); // Clear display lcd.printIn("4 bit LCD demo"); // Dislay text on first line lcd.cursorTo(2,0); // Move cursor to second line, position 0 lcd.printIn("www.skpang.co.uk"); // Display text on second line while(1) // Endless loop flashing the LED { digitalWrite(13, HIGH); delay(1000); digitalWrite(13, LOW); delay(1000); } }
내 arduino에서는 LCD4Bit 예제에서 글자가 출력되지 않았다. 현재 원인 파악 중이다.