2008년 8월 25일 월요일

CLCD 1/3 - Hello LCD

아두이노에 -폭탄 간지- 캐릭터LCD(이하 CLCD)를 붙여 보았습니다.

0. CLCD 구입
크기(행/열) , 백라이트 유무/색, 핀헤더의 모양에 따라 여러 종류가 있습니다. 용도에 따라, 제? 경우, 백라이트가 있는 모델 중...

가장 저렴한 녀석으로 구입했습니다. -,.-;

1. 연결 준비
CLCD가 8 혹은 4비트 데이타 버스를 가진다고는 알고 있었는데, 전원/제어 선까지 합치니 14pin이네요.

HY-1602H-205의 경우 핀헤더가 2열이라 2x7 소켓과 남는 IDE케이블을 재료로 선을 준비했습니다. (핀 헤더가 1열로 된 녀석이 작업하기 좀 더 편할 것 같습니다.)
hy1602_pin.jpg
핀헤더가 바싹 붙어 있어 검은 표시한 1번 선의 위치가 반대가 되었습니다. -,.-;

아두이노쪽 핀은 혼돈을 덜기 위해 기능에 따라 분리했습니다. 왼쪽 부터:

5V/GND, 컨트라스트,? RS/RW/EN, 데이타 8bit

2. 전원/백라이트 연결
hy1602_pwron.jpg

전원/콘트라스트/백라이트를 5V/GND에 연결해 보았습니다. 몇 가지 문제가 있네요!!

  • 컨트라스트를 GND에 직결하니 위 사진과 같이 항상 검은색으로 가려져 보이는 문제가 있어 가변저항을 달아 주었습니다. 적당한 저항값은 그때 그때 달라요.

  • 사진 처럼 백라이트에 5V를 바로 넣어면 레귤레이터(7805)가 급격히 뜨거워 집니다. 이 이유와 해결 방법은 따로 포스팅 하겠습니다. 일단 사진찍고 빼 두었습니다. 주간에는 백라이트 없이도 글자가 보입니다.


3. 아두이노에 연결!
hy1602_helloworld.jpg

다행히 CLCD용 아두이노 라이브러는 이미 있었습니다. Arduino - LCDLibrary
오~ 라이브러리~

그런데, 한 줄 밖에 표시 안되는 문제와 작명 센스가 맘에 안들고, 지저분 한 데다가, 불필요한 것들을 이것 저것 인클루드 해서 덩치를 키워 뒀길래, 입맛에 맞게 리팩토링 했습니다. -,.-;;

이것 저것 명령어들이 많지만 싹 지우고 다시 써도 눈에 띌 만큼 느리지 않기 때문에, 라이브러리에서 clear, putStr 함수만 사용하면 CLCD를 다룰 수 있었습니다.

아래는 이 라이브러리를 사용한 예제 입니다. 1초 단위로 "Hello!\nWorld!!"를 깜박입니다.

#include
CLCD lcd = CLCD();
char string1[] = "Hello!\nWorld!!";

void setup(void){
lcd.init(); //initialize the LCD
}
void loop(void){
lcd.clear(); //clear the display
delay(1000); //delay 1000 ms to view change
lcd.putStr(string1); //send the string to the LCD
delay(1000); //delay 1000 ms to view change
} //repeat forever

참 쉽죠? =33

댓글 5개:

  1. [...] CLCD를 연결 하려니 11개의 포트가 필요하네요? D0~D7(data 8bit), RS(cmd or char), RW(read or write), [...]

    답글삭제
  2. 좋은 정보 감사합니다.

    저는 아두이노 0017부터 시작했는데, CLCD에서 꽉 막혔습니다.
    두에밀라노브 보드에, 16핀 CLCD 2*16을 사용하고 있습니다.
    그런데, 아무리해도 초기 윗열만 표시되고, 보고싶은 Hello를 보지 못하고 있습니다. 아다프르츠에서 관련 포스팅을 찾아서 해 보아도, 영...
    그래서 수아파파님의 라이브러리를 써 보려하니, 컴파일시 에러가 나오네요.

    c:/arduino-0017/hardware/tools/avr/lib/gcc/../../avr/include/stdlib.h:111: error: expected `)' before 'int'

    c:/arduino-0017/hardware/tools/avr/lib/gcc/../../avr/include/stdlib.h:111: error: expected `)' before 'int'

    그리고, 혹시 4비트만 가지고 전송하는 것은 라이브러리로 안 만드셨는지요?

    답글삭제
  3. 아두이노 SW가 버젼 업 하면서 문제가 생겼나 보네요. 3선 CLCD를 구현한 후 이전 라이브러리들을 돌보지 않아서. 슬슬 고쳐 두겠습니다. ;)
    3선 CLCD (댓글중 가장 위의 트랙백)가 4bit를 기반으로 만들어 졌습니다. 코드를 보시고 원하시는 대로 수정해 보세요. (이건 0017버젼에서 잘 컴파일 됩니다)

    답글삭제
  4. 좋은 정보 감사합니다. 덕분에 저도 쉽게 성공할 수 있었습니다.
    http://tinysun.net/25

    답글삭제