Look before I blog
Print This Post
아두이노는 대략 16개의 포트가 있습니다. 충분한가요? 하지만, CLCD를 연결 하려니 11개의 포트가 필요하네요?
D0~D7(data 8bit), RS(cmd or char), RW(read or write), E(for timing)
거기다, 백라이트를 위해 1개를 더 쓰면 포트가 네개 남습니다.
이제 슬슬 똥줄이 탑니다.
전자시계(+3) 라도 만들라 치면 거의 모든 포트를 다 사용하네요. GG -_-;
이 정도의 전자시계를 대륙에서는 -물 건너 오는 비용과 예쁜 케이스까지 포함하고 - 몇 천원 정도에 만들고 있습니다!
똑같은 그지같은 상황에 직면 하셨던 선지자 님들 덕에 CLCD에는 4bit모드라는게 있습니다;
한 바이트를 두번에 나눠 전달하여 출력핀을 절약하는 방법이죠.
D4~D7(data 4bit), RS(cmd or char), E(for timing)
이제 6선 만으로 CLCD에 문자를 뿌릴 수 있습니다. 충분한가요?
나는 아직도 목 마르다. - 히딩크
이 포스트에서는 3선만으로 CLCD를 제어하는 방법을 소개합니다.
아두이노 사이트에서 74HC595칩을 사용한 ShiftOut 예제에 힌트를 얻어, 이 칩을 사용해 CLCD를 제어해 보았습니다.
네. 돈 발랐습니다. 히딩크 감독님을 모실 만큼 처 바른건 아니고… 74HC595 칩은 몇 백원 정도에 살 수 있는 대중적인 칩 입니다.

왼쪽의 Data, Clk, Latch 세 선만으로 CLCD제어에 필요한 오른쪽 6개의 신호를 시리얼로 받아 표시 해 줍니다.
저항 하나 필요 없는 그야말로 간단한 구성!!
타이밍 문제와 제가 산 CLCD의 데이타 시트에 4bit 초기화 과정에 없어서 삽질을 좀 했지만… 다 해결하고 라이브러리로 정리했습니다.
다은은 연결 예제:
아두이노 예제:
#include <clcd595.h>;//create a CLC595 object to control an lcd<br /> CLCD595 lcd = CLCD595(12, 11, 10); //specify data/clk/latch pins<br /><br />char string1[] = "CLCD withnonly 3 wires!";<br />void setup(void){<br /> lcd.init(); //initialize the LCD<br /> digitalWrite(13,HIGH); //turn on an LED for debugging<br />}<br /><br />void loop(void){<br /> lcd.clear(); //clear the display<br /> delay(1000); //delay 1000 ms to view change<br /><br /> lcd.putStr(string1); //send the string to the LCD<br /> delay(1000); //delay 1000 ms to view change<br />} //repeat forever</clcd595.h>같은 일을 하는 I2C 칩을 사용하면 두 선 만으로 제어할 수도 있겠습니다. 단, 칩 가격인 5배 정도 이고(흠.), smd(으악!) 를 땜 할 자신이 있다면...
익명
November 11th, 2008 at 9:21 am
오 이런게 있었군요.
AT91SAM7S로 TFT-LCD구동하는데 핀을 거의 다 써서 좀 곤란했는데 이걸로 한번 해봐야 겠습니다.
풀양 입을 열다 - 1/? | Suapapa's Blog
March 30th, 2009 at 3:58 pm
[...] 풀양, 가운데(동그라미) 습도 센서, 오른쪽 아두이노와 3선제어 LCD 이런 종류의 습도 센서는 구글에서 “soil moisture sensor” 로 [...]
이지찬
May 28th, 2009 at 3:10 pm
CLCD595.h 파일좀 제 메일로 보내주시면 않될까요??
제가 초딩이지만 AVR에 관심이 많습니다.
CLCD도 제어 해봤구요…. 그런데 선이 너무 많아 줄일려고요…
jic5750@naver.com
부탁드립니다.
suapapa
May 29th, 2009 at 9:15 am
이지찬 님/ CLCD595.h는 위 본문중에 링크로 남겨져 있습니다. 잘 찾아 보세요. (svn)
메일로 보내드리면 안되요. 왜 안되는지 아래 링크를 잘 읽어 보시길…
http://wiki.kldp.org/wiki.php/DocbookSgml/Ask-TRANS#ASK-PRIVATE-EMAIL
부탁드립니다.
pashiran
July 1st, 2009 at 10:20 pm
따라하려고 보니………
제 LCD의 데이타쉬트에도 4bit 초기화 과정이 없네요 하하하;
제가 쓰는 LCD는 http://www.comdes.nl/PDF/Yes/YMS162-01.pdf 요놈인데요. 혹시 4bit 초기화 과정에 대해 조언 좀 얻을 수 있을까요?
pashiran
July 1st, 2009 at 10:39 pm
질문부터 올리고 검색해보니… 4bit 제어가
헤더파일쪽에서 초기화 과정을 시키는 것 같은데..
이쪽은 잘 모르겠네요.
clcd595.h 내용을 전혀 이해할수가 없으니 -_-a 긁적긁적…
그냥 이대로 적용시켜도 가능할 것 같기도 하고…
일단 계속 공부해 봐야겠습니다.
suapapa
July 3rd, 2009 at 11:43 am
pashiran 님/
CLCD595.cpp 파일의 아래 -클래스 초기화- 함수:
void CLCD595::init(void)
에서 4bit CLCD 초기화가 이루어집니다. 어디서 찾아서 코드를 작성했는지는 적어두질 않아서 모르겠네요. 제 경우에는 이 초기화가 없는 경우 글자들이 깨져서 나오는 현상이 있었어요.
_putNibble() 함수가 595에 맞게 작성되어 있으니까 이부분만 수정하시면 4bit 595를 사용하지 않으시는 환경에도 맞게 동작할 것 같네요.
pashiran
July 3rd, 2009 at 4:30 pm
답변 감사드립니다.
595를 사용하지 않는 환경에 맞게 튜닝하는것 까지는 기대도 안하고요/
그냥 595에서만 제대로 돌아가면 대만족입니다. ^^;
주말동안 한번 열심히 작업해 봐야겠네요.
suapapa
July 3rd, 2009 at 5:06 pm
pashiran 님/ clcd595 코드를 정리하였습니다. 잘 동작하면 좋겠네요.
pashiran
July 5th, 2009 at 1:21 pm
일부러 코드까지 정리해주셨는데… 안되는군요 ㅡㅜ
suapapa
July 7th, 2009 at 12:34 am
pashiran 님/ ㅋ~ 내 손 안에서 잘 동작하게 만드는게 3정도라면 남의 손에서도 잘 동작하게 하는건 9~10 정도의 난이도 인 것 같아요.
블로그에 게시하신 글도 읽어 보았는데, arduino IDE 버젼 확인(0016) 말고는 특별히 잘못된 부분을 찾지 못하겠네요. -o-;