본문 바로가기

Hardware/MCU

ARM7과 텍스트형 LCD

텍스트형 LCD는 표현할수있는 글자의 수가 몹시 작아서 그리 필요한가 하는 생각도 들때가 있지만, 또 없으면 허전하기도 하고, 바로 어떤 상태를 확인하는데는 간편하기 때문에 지금도 꽤 사용되고 있는듯합니다. 사실 PC에서의 각종 통신을 이용한 모니터링이나 JTAG을 사용하는 경우 컴파일러에서 바로 원하는것들을 볼 수 있기 때문에 그리 LCD의 효용가치가 떨어지기도 하지만, JTAG의 경우 그 가격이 높고 정품컴파일러의 가격도 만만치 않아서, 우리처럼 취미생활처럼 무료 컴파일러인 WinARM을 사용하면서 JTAG은 꿈도 못꾸는 경우는 그냥 LCD가 편해보입니다.^^

이번엔 그래서 텍스트형 LCD를 한번 ARM7과 연결해 보겠습니다.
사실 LCD의 연결은 역시 윤덕용님의 책에 잘 설명되어있습니다.
이번에 얼마 가격차이도 안나고 해서  LCD를 좀 더 넓은걸로 바꿔보죠.


(그림1)
CM2420S1LY-K2라는 모델입니다. 24*2의 크기를 가졌습니다.


(그림2)
외형에 대한 설명입니다.


(그림3)
핀 배치도입니다. 제일 아랫쪽 왼쪽부터 오른쪽으로 가면서 1번부터 시작해야합니다.


(그림4)
핀 역활은 일반적으로 가장 많이 사용하는 16*2짜리 LCD와 동일합니다.


(그림5)
데이터시트에 보면 Vdd에 전원 5V Vss에 GND, Vee는 텍스트의 밝기를 조절하기 위한 가변저항을 연결합니다.
그리고, 백그라운드 전원으로 4.2V를 권장하고 있습니다.
이 부분을 윤덕용님의 책에서는 다이오드(전압강하가 0.7V)를 이용하여 5V에서 간단히 구현하고 있습니다.


(그림6)
데이터시트에 명시된 타이밍도입니다.
RS동작후 Enable이 SET될때까지 최소한 60ns를 필요로 한다고 하네요.
제가 윤덕용님의 책을 보고 따라한 보드는 역시 책처럼 한 싸이클을 1us로 보니까.
충분히 타이밍을 맞추겠습니다.
그러나 ns단위로 움직이는 DSP들의 경우는 타이밍을 위해 별도의 고려가 필요하겠네요.


(그림7)
Instruction코드입니다.
이 부분은 책에도 설명이 되어있지요.


(그림8)
텍스트를 표현할 DDRAM의 주소입니다.


(그림9)
이미 세팅되어있는 ASCII코드표입니다.


(그림10)
윤덕용님의 책에서 텍스트형 LCD의 초기화 과정을 가져왔습니다.
당연히 함수로 구현이 되어야겠지요.


(그림11)
역시 윤덕용님의 책에 있는 LCD부분의 회로도입니다.
R/W를 그냥 GND에 물렸네요.
실제로 그림7을 보면 LCD입장에서 ARM7으로 보낼 데이터라곤 사실 Busy Flag뿐입니다.
그런데 이것도, 역시 그림7에 있지만, 표의 젤 우측에 있는 시간만큼을 기다리면 Busy Flag를 확인하지 않아도 됩니다.
그러니, 그냥 그 시간을 기다리면 되겠죠.
실제로 윤덕용님의 교재에 있는 예제를 보면, 실제 그 시간만큼을 기다리도록 Delay구문을 사용하고 있는것이 보입니다.


(그림12)
이제 교재의 예제를 보죠
LCD관련 함수들을 전부 인클루드시키도록되어있습니다.
LCD_data라는 이 함수는 한 글자를 단지 표현합니다.
LCD_RS를 셋하고, data를 24비트 쉬프트시키는 이유는
PA24핀부터 연결되어있기 때문입니다.
그리고 LCD의 Enable핀을 1us의 delay로 Set 했다가 Clear합니다.


(그림13)
이 함수는 LCD에 일반명령어를 처리합니다.
화면을 청소한다는둥...하는 그림7에 나와있는 내용을 처리하는 것입니다.


(그림14)
그림12에 있는 함수를 이용해서 이번엔 문장을 입력할수있도록 하는 것입니다.
포인트를 이용해서 정말 간결히 잘 구성되어있다는 것을 발견할 수 있습니다.
문장이 시작될 위치(command)를 받고, 표현하고자 하는 문장을 포인트로 받습니다.
그리고, 문장의 시작점을 명령어로 보내고
글자를 옮기면서 한 글자씩 보내게 됩니다.


(그림15)

그림10에서 이야기한 LCD의 초기화부분을 함수로 구현한 것입니다.
그림10의 내용을 따라가고있습니다.


(그림16)
간단히 화면에 뿌리는 메인루틴을 만들어보았습니다.
좋은 교재를 선택한 덕분에
LCD를 편하게 사용할 수 있게 되었습니다.^^


(그림17)
실제로 구동중인 LCD를 찍어봤습니다^^

반응형