2008년 11월 10일 월요일

CLCD 3/3 - CLCD with 74HC595

아두이노는 대략 16개의 포트가 있습니다. 충분한가요? 하지만,
[CLCD를 연결](/wordpress/?p=96) 하려니 11개의 포트가 필요하네요?

- D0~D7(data 8bit)
- RS(cmd or char)
- RW(read or write)
- E(for timing)

거기다, [백라이트](/wordpress/?p=97)를 위해 1개를 더 쓰면 포트가 네개 남습니다.

이제 슬슬 똥줄이 탑니다.

[전자시계](/wordpress/?p=310) (+3) 라도 만들라 치면 거의 모든 포트를 다 사용하네요. GG :$

이 정도의 전자시계를 대륙에서는 -물 건너 오는 비용과 예쁜 케이스까지 포함하고-
몇 천원 정도에 만들고 있습니다!

똑같은 -그지같은- 상황에 직면 하셨던 선지자 님들 덕에 CLCD에는 4bit모드라는게 있습니다.
한 바이트를 두번에 나눠 전달하여 출력핀을 절약하는 방법이죠.

- D4~D7(data 4bit)
- RS(cmd or char)
- E(for timing)

이제 6선 만으로 CLCD에 문자를 뿌릴 수 있습니다. 충분한가요?

> 나는 아직도 목 마르다. - 히딩크

이 포스트에서는 **3선만으로 CLCD를 제어**하는 방법을 소개합니다.



아두이노 사이트에서 74HC595칩을 사용한
[ShiftOut 예제](http://www.arduino.cc/en/Tutorial/ShiftOut)에 힌트를 얻어,
이 칩을 사용해 CLCD를 제어해 보았습니다.

네. 돈 발랐습니다. -히딩크 감독님을 모실 만큼 처 바른건 아니고...-
74HC595 칩은 사실 몇 백원 정도에 살 수 있는 대중적인 칩 입니다.

![](http://commondatastorage.googleapis.com/suapapablog%2Fuploads%2F2008%2F11%2Fclcd_3wire_sch.png)

왼쪽의 Data, Clk, Latch 세 선만으로 CLCD제어에 필요한
오른쪽 6개의 신호를 시리얼로 받아 표시 해 줍니다.

저항 하나 필요 없는 그야말로 간단한 구성!!

타이밍 문제와 제가 산 CLCD의 데이타 시트에 4bit 초기화 과정에 없어서 삽질을 좀 했지만...
다 해결하고 라이브러리로 정리했습니다.

- [Arduino library, CLCD595](https://github.com/suapapa/arduino_library_clcd595)

다은은 연결 예제:

![](http://commondatastorage.googleapis.com/suapapablog%2Fuploads%2F2008%2F11%2Fclcd_3wires.png)

아두이노 예제:

#include

//create a CLC595 object to control an lcd
CLCD595 lcd = CLCD595(12, 11, 10); //data, clk, latch

char string1[] = "CLCD with\nonly 3 wires!";

void setup(void)
{
lcd.init(); //initialize the LCD
digitalWrite(13, HIGH); //turn on an LED for debugging
}
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

같은 일을 하는 I2C 칩을 사용하면 두 선 만으로 제어할 수도 있겠습니다.
단, 칩 가격인 5배 정도 이고(흠.), smd(으악!) 를 땜 할 자신이 있다면...

댓글 13개:

  1. 오 이런게 있었군요.
    AT91SAM7S로 TFT-LCD구동하는데 핀을 거의 다 써서 좀 곤란했는데 이걸로 한번 해봐야 겠습니다.

    답글삭제
  2. [...] 풀양, 가운데(동그라미) 습도 센서, 오른쪽 아두이노와 3선제어 LCD 이런 종류의 습도 센서는 구글에서 “soil moisture sensor” 로 [...]

    답글삭제
  3. CLCD595.h 파일좀 제 메일로 보내주시면 않될까요??
    제가 초딩이지만 AVR에 관심이 많습니다.
    CLCD도 제어 해봤구요.... 그런데 선이 너무 많아 줄일려고요...
    jic5750@naver.com
    부탁드립니다.

    답글삭제
  4. 이지찬 님/ CLCD595.h는 위 본문중에 링크로 남겨져 있습니다. 잘 찾아 보세요. (svn)
    메일로 보내드리면 안되요. 왜 안되는지 아래 링크를 잘 읽어 보시길...
    http://wiki.kldp.org/wiki.php/DocbookSgml/Ask-TRANS#ASK-PRIVATE-EMAIL
    부탁드립니다.

    답글삭제
  5. 따라하려고 보니.........
    제 LCD의 데이타쉬트에도 4bit 초기화 과정이 없네요 하하하;
    제가 쓰는 LCD는 http://www.comdes.nl/PDF/Yes/YMS162-01.pdf 요놈인데요. 혹시 4bit 초기화 과정에 대해 조언 좀 얻을 수 있을까요?

    답글삭제
  6. 질문부터 올리고 검색해보니... 4bit 제어가
    헤더파일쪽에서 초기화 과정을 시키는 것 같은데..
    이쪽은 잘 모르겠네요.
    clcd595.h 내용을 전혀 이해할수가 없으니 -_-a 긁적긁적...
    그냥 이대로 적용시켜도 가능할 것 같기도 하고...
    일단 계속 공부해 봐야겠습니다.

    답글삭제
  7. pashiran 님/
    CLCD595.cpp 파일의 아래 -클래스 초기화- 함수:
    void CLCD595::init(void)
    에서 4bit CLCD 초기화가 이루어집니다. 어디서 찾아서 코드를 작성했는지는 적어두질 않아서 모르겠네요. 제 경우에는 이 초기화가 없는 경우 글자들이 깨져서 나오는 현상이 있었어요.

    _putNibble() 함수가 595에 맞게 작성되어 있으니까 이부분만 수정하시면 4bit 595를 사용하지 않으시는 환경에도 맞게 동작할 것 같네요.

    답글삭제
  8. 답변 감사드립니다.
    595를 사용하지 않는 환경에 맞게 튜닝하는것 까지는 기대도 안하고요/
    그냥 595에서만 제대로 돌아가면 대만족입니다. ^^;
    주말동안 한번 열심히 작업해 봐야겠네요.

    답글삭제
  9. pashiran 님/ clcd595 코드를 정리하였습니다. 잘 동작하면 좋겠네요. :)

    답글삭제
  10. 일부러 코드까지 정리해주셨는데... 안되는군요 ㅡㅜ

    답글삭제
  11. pashiran 님/ ㅋ~ 내 손 안에서 잘 동작하게 만드는게 3정도라면 남의 손에서도 잘 동작하게 하는건 9~10 정도의 난이도 인 것 같아요.
    블로그에 게시하신 글도 읽어 보았는데, arduino IDE 버젼 확인(0016) 말고는 특별히 잘못된 부분을 찾지 못하겠네요. -o-;

    답글삭제
  12. 오늘도 수아파파님 블로그가 검색에 나오는 군요

    또 많이 배워 갑니다.역시 수아파파님은 대단하십니다!(__)

    아시겠지만..한가지 추가하자면 3x8디코더등을 이용하여 제한적이지만

    포트 확장처럼도 이용이 가능합니다.

    제품류로 따지면 대충 74LS138 이런 거죠.

    cmos냐 TTL이냐 속도에 따라 제품명은 좀다를수 있겠으나

    74LS138이 초기 공부하시기엔 좋을듯 합니다.

    수아파파님이 아닌 다른 글을 읽으시는 분들은 참고해주세요^^

    답글삭제
  13. 좋은 정보 감사드립니다.
    혹시 0023버전에서는 라이브러리가 동작하지 않나요?
    no matching function for call to 'CLCD595::CLCD595(int,int,int)'
    라고 에러가 뜨고, 컴플라잉이 안되네요.

    답글삭제