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(으악!) 를 땜 할 자신이 있다면...