일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- petalinux
- xilinx
- #Atmega128
- #문자열
- #textLCD
- git
- zynq
- 인터럽트
- avr
- sqlite
- github
- #시리얼통신
- #PuTTY
- #ComportMaster
- #MCU
- #UART
- Database
- ATMEGA128
- ubutu
- Linux
- Interrupt
- Embedded linux
- SQLite Studio
- #채터링
- #CLCD
- ubuntu
- Today
- Total
재잼재잼의 티스토리
7. CLCD 사용하기 본문
이번에는 MCU에서 데이터를 출력하기 위한 LCD에 대해서 알아보자.
16 * 2 CLCD를 사용한다.
1602 LCD 되겠다. 어디서든 쉽게 볼 수 있는 LCD고, 총 16개의 핀이 있다.
VSS, VDD, V0, RS, RW, E, D0~D7, A, K
각각의 핀은 위와 같은 역할을 수행한다.
LCD에 전원 공급을 위해서 1, 2, 3번 핀은 꼭 연결해 줘야하며, MCU에서 제어하기위해서는 4, 5, 6번 핀과, 7~14번 핀(8bit모드) 또는 11~14번 핀(4bit 모드)을 연결해 주어야한다.
15번, 16번은 꼭 LCD백라이트 핀으로 연결하지 않아도 동작에는 지장이 없지만 사람이 보는데 지장이 생긴다.
위 사진 처럼 잘 보기 힘들다. 그러니까 꼭 연결해주도록 하자...
----------------------------------------
이제 핀을 연결해야 하는데 어떻게 연결해야하나
데이터시트에 따르면 위와 같이 연결하면 되는데,,
VDD -> +5 V
V0 -> 가변저항
VSS -> GND
LED+ -> +5V
LED- -> GND
을 제외한 나머지 핀은 MCU의 출력핀에 꽂아주면 된다. D0~14핀의 경우에는 사용하는 데이터 비트 모드에 따라 결정한다.
나는 4bit 모드를 사용하기 때문에 PD4~PD7까지 데이터 핀으로 사용하고, PB5~PB7까지는 RS, RW, E핀으로 사용하였다.
----------------------------------------------
사용을 위한 핀 설명
RS |
레지스터를 선택하기 위한 신호를 출력함. HIGH(1) : 데이터 레지스터 ( Data Register ) LOW(0) : 명령 레지스터( Instruction Register ) |
RW |
읽기/쓰기 모드를 선택하기 위한 신호를 출력함 . HIGH(1) : 읽기 모드 LOW(0) : 쓰기 모드 |
E |
읽기/쓰기 동작을 수행하기 위한 Enable신호를 출력함. DDRAM에 수행할 명령어나 데이터를 저장하고 Enable신호가 LOW가 되는순간(하강엣지) 에서 DDRAM에 저장된 명령어/데이터를 처리한다. |
즉, RS핀을 HIGH로, RW핀을 LOW로 두고, 데이터핀에 출력할 데이터를 입력한 다음, Enable의 하강엣지를 발생시키면 LCD에서 DDRAM에 저장된 데이터를 처리하여 화면에 표시하는 과정으로 동작한다.
-----------------------------------------
데이터의 경우 그냥 출력할 8bit의 데이터를 입력해주면 되지만, 명령 레지스터에 입력할때는 명령코드에 맞춰 입력해줘야한다.
LCD에서 처리할 수 있는 명령코드는 무엇인지 알아보자.
데이터시트를 토대로 정리한 표다.
위의 명령코드를 사용하여 LCD초기화를 진행하고, 데이터를 입력하는등의 작업을 수행한다.
--------------------------------
LCD를 사용하기 위해서는 LCD초기화를 진행해야한다. 초기화 작업을 진행하지 않거나, 정상적으로 완료되지 않았을 경우에는 LCD의 1행이 'ㅁ'로 채워진 화면을 출력한다.
초기화 순서는 다음과 같다(AVR Atmega128 마스터, 윤덕용, Ohm사 의 책을 참고함.)
1. 전원을 투입
2. 초기화 수행 이전에 30ms이상 대기
3. Function Set 명령(0011****)을 보내고 4.1ms이상 대기, Function Set 명령(0011****)을 보내고, 100us이상 대기, Function Set 명령(0011****)을 보낸다.
4. Function Set 명령 (0011**00)을 보낸다.
5. Display On/Off 명령 (00001***)을 보낸다.
6. Entry mode Set 명령(000001**)을 보낸다.
7. DDRAM의 어드레스를 보낸다.
--> 3번 과정은 LCD에서 사용하는 드라이버의 종류에 따라 다르다. 나는 이전에 3번 과정을 작성하지 않아서 동작하지 않았던 적이 있어서 적어두었다.
--> Function Set 명령이 0011****인데, 이는 8bit모드를 사용할 경우고, 4bit모드를 사용하려면 4번 비트를 0으로 바꿔주면 된다.
--> 7번 과정은 LCD에서 출력할 수 있는 각 공간(?)마다 주소값이 정해져 있는데, DDRAM에 주소를 보내면 출력 위치를 결정하는 "커서"를 이동시킬 수 있다. (명령어의 set DDRAM addr 부분). LCD clear명령을 사용하면, DDRAM의 모든 내용을 지우고 커서를 0x00위치로 이동시키기 때문에 초기화 과정에서 사용한다.
위의 초기화 과정을 코드로 작성하면,
로 작성할 수 있다.
'MCU' 카테고리의 다른 글
9. ADC 및 Cds 사용하기 (1) | 2019.01.28 |
---|---|
8. CLCD 사용하기(2) (0) | 2019.01.23 |
6. UART 문자열 송/수신 (0) | 2019.01.16 |
5.UART 문자 송/수신 (0) | 2019.01.15 |
4. UART사용 - 초기화 (0) | 2019.01.14 |