LCD 화면을 지우고 싶으면 D7~D0에 00000001 즉 0x01을 command로 보내면 됩니다.
위치 지정 명령은 1xxxxxxx 인데, 첫번째 줄은 0x80~0x8F, 두번째줄은 0xC0~CF 를 command로 보내면 됩니다.



arduino 에서 LCD 구동하기 1에서 해결하지 못한 반쪽만 나오는 버그를 기존 라이브러리로는 도저히 안되서 이것 저것 라이브러리를 봐가며 수정하여 겨우 동작하는 화면을 볼수 있었습니다. 이로써 데이터선 4개로 연결되는 4bit LCD가 완성됐다

그런데 가끔 LCD의 화면이 나오지않거나 문자가 이상하게 찍히는 문제가 있었는데, 원인을 잘 모르겠네요.


16 문자 짜리 LCD인데, 8 x 2 로 2Line LCD로 인식하더군요.
덕분에 스크롤 명령을 실행하면 화면이 둘로 나누어져서 동시에 스크롤 됩니다.

선꽂는게 번거로워 선에 핀해더도 연결하고, 마침 주문한 가변저항도 도착해서 연결하니 깨끗한 LCD 화면을 볼수 있었네요.



선 연결은
LCD 핀 이름 gnd, vcc, vr, rs. rw, e, d4, d5, d6, d7
LCD 핀 번호   1,      2,  3,  4,   5, 6,  11, 12, 13, 14
                                 3 - (가변저항 가운데핀)
아두이노 핀  gnd, vcc,       2,   3, 4,   8,   9, 10, 11

#include <LiquidCrystal_pepsiman.h>
// LiquidCrystal display with:
// rs. rw, e, d4, d5, d6, d7 - LCD pin name
//  4,  5, 6, 11, 12, 13, 14 - LCD pin #
LiquidCrystal lcd(2,3,4,  8,9,10,11); // arduino pin #

void setup()
{
  lcd.clear();
  lcd.print("hello, world!.............");
}

void loop()
{
}

압축 파일을 아두이노 개발툴 설치 폴더의 hardware\libraries\LiquidCrystal_pepsiman 폴더에 풀고 위 소스를 스케치에 실행 하시면 됩니다.

  1. BlogIcon plughouse 2009.06.04 15:54 신고

    팹시맨님 정말 감사합니다 :)

    • BlogIcon pepsiman 2009.06.04 17:07 신고

      네 ^^ 덕분에 아두이노 구입해서 잘 쓰고 있습니다.

    • 나그네.. 2010.08.03 13:14 신고

      글씨 색깔이... 참 보기 힘들군요... 일부러 그렇게 하신건지...

    • BlogIcon pepsiman 2010.08.03 13:18 신고

      일부러 그렇게 한건 아니고요. 원래 스킨에서 수정하지 않았습니다.
      많이 불편하신가요?
      전 아직까지 불편하다는 생각을 못했었는데...함 바꿔봐야겠네요.



먼저 내가 구입한 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 예제에서 글자가 출력되지 않았다. 현재 원인 파악 중이다.

+ Recent posts

티스토리 툴바