티스토리 뷰

Arduino

[Arduino] Getting started with TFT LCD & Arduino

생각많은 소심남 2012. 10. 1. 00:59

저번에 중국에서 구입한 TFT LCD에 대해서 언급을 잠깐 했습니다. 그냥 집에만 묵혀둘 수 없어서 이번기회에 TFT LCD를 써보기로 했습니다.

참고로 TFT LCD란 Thin Film Transistor LCD의 약자로써 말 그대로 초박막형 LCD라고 받아들이시면 됩니다. 즉 LCD라는 거 자체가 매우 얇다는 의미겠지요.



여기서 맨 위에층에 깔린 검정색 부분이 바로 TFT가 적용되는 부분이고 밑에 투명한 부분이 컬러필터가 달린 부분이지요. 그래서 전기적인 신호에 따라서 우리가 볼수 있는 빛의 형태가 달라집니다. 뭐 이와 동작방식이 다른 개념이 OLED인데 너무 깊게 들어가니까 설명을 생략하도록 하겠습니다.  

그래서 그냥 간단하게 말하자면 요새나오는 LCD의 형태가 매우 작게 나오는것이 제가 들고 있는 1.8인치형 TFT LCD 인것이지요.



우선 밑에 입력소자가 나와 있는데 백라이트 부분을 조절하는 BKL 포트가 있고 Command와 Data를 구별할 수 있는 RS 포트가 있습니다. 그리고 이런 데이터를 아두이노와 LCD끼리 주고받기 위해서는 SPI라는 통신 규격을 사용합니다. 일종의 serial Interface와 비슷한 구조인데, 거기에 clk 라는 요소가 삽입된게 SPI(Serial Peripheral Interface) 구조입니다. 그래서 당연히 clk를 받기위한 SCLK가 있습니다. 그리고 어느것이 마스터가 되고 슬래이브가 될건지를 결정해주는 포트가 MOSI 와 MISO 로 나뉘어져 있습니다. 그리고 마지막으로 내장되어 있는 요소를 사용하기 위한 chip Selection 포트가 따로 있습니다. 이 기기를 뒤집어보면



이렇게 되어 있는데 옆에 달려있는 것이 바로 Micro SD 카드 쉴드입니다. 그래서 거기에 데이터를 저장할 수도 있고 불러올 수도 있는 거지요. 그래서 이 기능을 사용하기 위한 방안으로 앞에서 언급한 Chip selection 포트가 있는겁니다. 물론 두개 다 쓸거면 두 포트 둘다 아두이노와 연결시켜야 겠지요. 

우선 이번 기회에는 예제를 돌리기 위한 테스트로 LCD-CS에만 결선을 했습니다.


자 그럼 일단 관건이 결선을 어떻게 하느냐 인데 그에 대한 힌트는 예제에 있습니다. 우선 해당 라이브러리 파일을 다운받고 arduino가 설치되어 있는 폴더의 libraries에 넣어줍니다. 그러면 저와 같이 될겁니다.


1.8SPI.zip




위의 ST7735R이라는게 TFTLCD를 제어하는 컨트롤러입니다. 그에 대한 정의를 라이브러리화 시켜서 제조사에서 제공했습니다. 이 폴더안에 example과 몇몇 c코드들이 있습니다. 하나예시를 열어보면 맨처음에 다음과 같이 정의가 되어 있습니다.



눈치가 빠르신 분이라면 벌써 아시겠지요. 이게 바로 핀번호입니다. 아마 아두이노 맨처음 이야기를 다뤘을 때 이야기 했었지만 포통 핀이 바뀔 염려때문에 이렇게 사전에 핀번호를 정의하는 방식을 많이 채택합니다. 그래서 위와 같이 sclk가 4로 되어 있으면 sclk란을 4번 핀과 연결시켜주면 됩니다. 그렇게 연결해줘서 저는 다음과 같이 결선이 되었습니다. 참고로 앞에서 언급한 것처럼 sd카드는 안쓰고 lcd부분만 쓸것이기 때문에 cs 포트를 lcd로 연결했습니다.



자 그럼 결선도 끝났으니까 예제파일을 열고 실행을 시켜봅니다. 보통 되시는 분도 있고 안되시는 분도 있습니다. 그 안되는 이유때문에 저도 좀 찾고 해결책을 구했습니다. 


바로 버전 차이였습니다. 아마 아두이노 스케치를 구버전으로 사용하시는 분이 이 예제를 돌리실 때는 잘 되실 겁니다. 그런데 1.0.1 버전 이후부터는 이 예제가 참조하는 라이브러리의 이름이 바뀌었습니다. 아마 대다수분들이 겪는 오류가 바로 



위와 같이 st7735.h에서 WProgram.h 라는 헤더 파일이 없다고 뜨는 겁니다. 이 헤더 파일은 각 핀에 대한 주소값을 사전에 설정해놓은 헤더파일인데 당연히 이에 기반이 되는 헤더파일이 없으니 안될 수 밖에요. 그런데 1.0.1 버전이후부터는 이 헤더파일이 Arduino.h로 바뀌었습니다. 그래서 이를 해결하기 위해서는 그냥 이름만 싹 바꿔주면 되는 것이지요.



이렇게 바꿔주고 저장만 해주면 됩니다. 한번 실행시켜봅시다.



짠 이렇게 됩니다. 당연히 글자 출력도 되고 이미지 출력도 되는 면에서 기존의 캐릭터형 clcd에 비해서 장점이 많지요. 

지금까지가 간단한 예제였고 아마 다음 포스트에서는 sd카드를 통해서 이미지를 직접 띄워보는 걸 해보고자 합니다.


여담: 지금 처럼 문자가 뜰때 lorem ipsum blah blah라고 뜨는 거 있잖습니까? 어디서 많이 본 문구 아닙니까? 보통 lcd에서 글자 출력할 때 저 문구가 많이 삽입되어 있는 걸 확인할 수 있는데 일종의 더미(가짜)문자입니다. 그런데 실제의 뜻은 로마의 정치가 키케로가 쓴 "de Finibus Bonorum et Malorum" (The Extremes of Good and Evil: 최고의 선과 악에 관하여) 의 일부분이라고 합니다. 그냥 궁금하신 분들을 위해서 첨언을 답니다 :)

댓글