티스토리 뷰

Arduino

[Arduino] LCD Control

생각많은 소심남 2012. 9. 2. 20:53

피지컬 컴퓨팅의 장점은 다양한 주변기기와 연결해서 사용할 수 있다는건데요. 그중에서도 사용자가 준 입력을 보기 위해서는 시각적으로 피드백을 주는게 좋겠지요. 가장 좋은 장치가 바로 LCD 입니다. 

다들 아시다시피 LCD는 Liquid Crystal Display의 약자로 속에 액정이 차있어서 거기서 빛을 투과했을 때의 결과물을 보여주는 방식입니다. 여기에 따른 전력 소비가 타 기기에 비해서 적은 편이라 휴대용으로 많이 쓰이는 특징을 가지고 있습니다.

그래서 이번 포스트에서는 그 LCD를 활용해서 Hello World를 찍어보는 작업을 해보고자 합니다.


우선 아두이노에 LCD를 연결하기 전에는 LCD의 특성을 분석해야 되는데 분석하기 위해서는 같이 제공되는 데이터시트를 읽어보아야 합니다. 시중에 나와있는 LCD는 매우 다양하지만 제가 사용하는 LCD는 흑백 캐릭터 LCD로써 내부 드라이버로는 히타치사의 HD44780를 사용합니다. 그런데 거의 대부분의 lcd들이 이 드라이버를 채용하기 때문에 거의 범용적으로 쓰입니다. 우선은 핀 결선도 어떻게 되어 있는지 확인해봅시다.



보면 1번과 2번핀은 아두이노의 5V와 GND에 연결해야 될거 같고, lcd가 동작하는 전압은 제어해야 될거 같은데 뒤에 나오는 RS니 R/W니 E핀같은건 뭔지 잘 모를수도 있습니다. 

 RS핀은 Register Selector의 준말인데 lcd 컨트롤러에 보면 적은 용량의 메모리가 들어있습니다. 만약 lcd에 어떤 데이터를 쓰기 위해 전달하면 이 데이터들이 그 메모리속에 잠깐 저장됩니다. 하지만 단순히 그 정보만 가지고는 LCD의 어느 픽셀에 뿌려줘야지에 대한 정의가 안되지만 그 처리를 바로 이 RS 핀에서 해줍니다. 그래서 단순히 LCD에 데이터만 주겠다 하면 high값을 주면 되고 무언가 reset같은 lcd의 기능을 사용하고 싶으면 low 값을 줘서 instruction 모드로 들어가게 합니다.

R/W야 당연히 Read / Write로  LCD의 데이터 처리를 관장하는 핀입니다. 특히 Write를 할때는 enable 핀에서 high를 줘야 적용이 됩니다. 

나머지는 하면서 알아보겠습니다. 우선 아두이노와의 핀 결선은 다음과 같이 이뤄집니다.



아.. 조금 복잡한가요? 복잡하신분은 해당 사이트를 참고하시기 바랍니다.

http://www.arduino.cc/en/Tutorial/LiquidCrystal

아두이노로 lcd를 컨트롤하기 위해서는 단순히 함수만으로 컨트롤할 수 있는게 아니라 외부 헤더파일을 첨가시켜야 합니다. 그런데 여기서 조금 설명드릴게 있습니다. 저는 Visual Studio에서 프로그래밍할 수 있는 Arduino for visual studio에서 작업을 하는데 보통 분들은 Arduino Sketch에서 작업하실겁니다. 저는 여기서 visual studio에서 작업하는 걸 보여드릴거고 sketch에서 헤더파일을 추가하기 위해서는 다음 작업을 해주시면 됩니다.



이렇게 하면 헤더파일이 추가됩니다. 

Visual Studio에서는 반드시 다음 작업을 해줘야 합니다. Project 메뉴에 보면 library 추가 란이 있습니다. 여기서 LiquidCrystal을 선택하면 됩니다.

 


유의해야 될 것은 반드시 저장을 해줘야 한다는 겁니다. 그래야 정상적인 헤더파일로 인식합니다. 꼭 '저장' 해주시기 바랍니다.

우선은 lcd의 입력으로 들어갈 핀에 대한 선언이 처음에 이뤄져야 합니다. 



애초에 이 핀배열에 맞는 헤더파일을 구성했기 때문에 위와 같이 lcd에 사용되는 핀을 지정해줍니다. 아까 결선도에 따르면 12번은 RS핀, 11번은 Enable핀에 결선했고, 5,4,3,2 핀은 순수한 데이터값이 들어가게 됩니다. 이제 다음으로는 이 프로젝트의 환경설정이 이뤄지는 setup 창인데 처음에는 사용하는 lcd의 크기를 지정해주게 됩니다. 저는 16x2 캐릭터 lcd를 사용하기 때문에 그 크기를 지정해줍니다. 그 다음에 lcd를 통해서 전달할 문구를 쓰면 됩니다. 앞에서 언급한대로 hello world를 적어주면 되겠지요.



자 다음은 줄 넘기기입니다. 좀 전에도 이야기 했지만 해당 lcd는 16x2 lcd이기 때문에 첫째 줄이 차면 두번째 줄로 넘어가야 되겠지요. 그건 setCursor라는 메서드를 사용하면 됩니다. 유의할 것은 앞에 나오는 숫자가 column 뒤에 나오는게 line이라는 겁니다. 즉



와 같이 해주면 커서는 두번째줄 첫번째 칸에서부터 시작하게 된다는 겁니다. 거기서부터 초마다 출력하게 해주는게 바로 이 loop에서 이뤄지는 동작입니다. 동작은 다음과 같이 이뤄집니다.



시간이 지나면서 출력되는게 갱신되는 것을 볼 수 있습니다. 영상 중간중간에도 나오지만 backlight켰을때와 안켰을 때의 차이 그리고 contrast 변경했을 때 글자색이 어떻게 되는지도 볼 수 있었습니다. 



저도 집에 굴러다니던 lcd를 이렇게 배우는데 활용할 수 있어서 좋네요. 고장난 줄 알았는데 이렇게 간단하게 테스트를 해볼 수 있어서 다행입니다.

댓글