Character LCD System

상태 등의 정보를 문자로 표시하기 위하여 흔히 character type LCD가 사용된다. QB-AM162-TK에는 16문자 2열의 문자 표시형(Character Type) LCD module이 기본 장착되어 있다. 각 문자는 5x8개의 dot로 구성되어 있으며 내장된 LCD controller와 Character ROM에 의하여 간단한 문자를 표시할 수 있다. 그림 4.14는 Character LCD의 모형도를 보여주고 있다.

img46.gif

그림 4.15는 MCU의 address bus 및 data bus와 LCD의 E, RS, R/W 및 Data(DB7 ~ DB0) 단을 연동하는 블록도를 보여주고 있다.

img48.gif

장착된 LCD module은 삼성반도체의 S6A0069 LCD driver chip을 내장한 module type이다. 실제 LCD 표시 장치는 그 크기와 type에 따라 다양한 제어신호 및 driving voltage 제어를 요구한다. 그러나 이러한 번거로움을 제거하기 위하여 module 내부에 LCD controller와 driver chip을 내장하고 실제 사용자에게는 단순한 MCU 주변장치로 동작할 수 있도록 구성되어 있다. 본 절에서는 장착된 LCD를 구동하기 위한 정보만을 선택적으로 수록하도록 하고, 이외의 자세한 사항은 driver/controller의 data sheet를 참고하기 바란다.

Timing : 일반적으로 LCD는 다른 주변회로에 비하여 초기화 시간이나 동작에 많은 시간을 소요하게 되므로 아래의 표 4.3과 그림 4.16 및 4.17의 동작 timing을 참고하여 사용하여야 한다.

img49.gif

img50.gif

LCD Module의 Register 및 Memory :
LCD module에는 동작을 제어하기 위하여 아래와 같은 register와 flag 그리고 RAM 또는 ROM등을 가지고 있다.

  • Busy Flag (BF) : BF=’high’인 경우 LCD module이 내부 동작을 수행중임을 나타낸다. 따라서, 어떤 동작을 수행하기 이전에 BF가 ‘high’이면 대기하였다가 ‘low’로 천이한 이후에 다음 명령을 주어야 정상적으로 동작한다.
  • Address Counter (AC) : DDRAM 또는 CGROM/RAM의 address를 가지고 있다.
  • Display Data RAM (DDRAM) : 본 보드에 사용된 LCD module은 총 80개의 8bit DDRAM address를 가지고 있다. 즉 module에 내장된 LCD controller는 80 문자를 표현할 수 있도록 설계되어 있다.
    그러나, 본 보드의 LCD 모듈은 16문자 2라인의 문자만을 표시할 수 있도록 설계되어 있고, 그 이외의 문자는 실제 LCD 화면에 나타나지 않는다. 사용자는 이러한 DDRAM 영역에 CGROM(실제 문자의 폰트정보를 가지고 있는 ROM)의 address를 적어주면 해당되는 LCD의 위치에 문자를 표시하게 되어 있다.
    본 보드에 사용된 LCD의 DDRAM과 실제 LCD 문자 위치를 아래 그림 4.18에 나타내었다. 따라서, LCD의 좌측 상단 위치에 대문자 `A`를 표시하고자 하면 DDRAM의 0x00(16진수)번지에 CGROM의 `A` 위치 값인 0x41(표 4.4 참고, 16진수)을 써넣으면 된다
  • Character Generator ROM (CGROM) : 표시할 문자의 Font를 저장하고 있는 메모리이다. 본 모듈에 내장된 CGROM의 character set은 아래 표 4.4와 같다.
  • Character Generator RAM (CGRAM) : CGROM과 동일하게 사용되지만 CGROM에 없는 사용자 정의 문자를 사용하고자 할 때 사용한다. 자세한 사항은 S6A0069 data sheet를 참고하기 바란다.

img51.gif

img52.gif

Module의 제어 :

장착된 LCD 모듈의 제어 명령은 다음의 표 4.5에 정리되어 있다. 사용자는 이것들을 사용하여 LCD 모듈을 제어하며 명령은 instruction address(0x1000, 16진수)로 DB7 ~ DB0를 통하여 전송된다. 또한, 데이터는 data address(0x1002, 16진수)로 DB7 ~ DB0를 통하여 전송된다. 앞서 말한 바와 같이 하나의 제어명령이 수행되고 그 다음 명령을 수행하기 이전에 Busy Flag를 확인한 후 BF가 ‘low’가 되면 명령을 실행하거나 일정한 시간지연을 준 후에 명령을 실행한다.

img54.gif

  • Clear Display : 전체화면을 지우고 DDRAM 어드레스를 0으로 clear한 후 커서를 home 위치로 옮긴다.
  • Return Home : 커서를 home 위치로 옮긴다.
  • Entry Mode Set : 데이터를 read/write시 커서의 위치를 오른쪽으로 증가시킬 것인지(I/D=1), 왼쪽으로 감소 시킬 것인지(I/D=0)를 결정하며, 또 이때 화면을 shift할 것인지(S=1)를 setting 한다.
  • Display On/Off Control : 화면(D), 커서(C), 커서를 깜빡이는 기능(B)을 제어한다. 각 해당 bit가 `1`이면 on 또는 enable 된다.
  • Cursor or Display Shift : 화면(S/C=1) 또는 커서(S/C=0)를 오른쪽(R/L=1) 또는 왼쪽(R/L=0)으로 shift 하도록 한다.
  • Function Set : 인터페이스를 8bit으로 할 것인지(DL=1) 4bit으로 할 것인지(DL=0), 화면 표시행수를 2행(N=1) 또는 1행(N=0)으로 할 것인지, 그리고 문자의 폰트를 5x11(F=1) 또는 5x8(F=0)로 할 것인지를 setting한다. 본 모듈을 사용하기 위해서는 DL=1, N=1, F=0로 setting하는 것이 바람직하다.
  • Set CGRAM address : CGRAM의 address를 지정한다. 이후에 송신되는 데이터는 CGRAM에 저장된다.
  • Set DDRAM address : DDRAM의 address를 지정한다. 이후에 송신되는 데이터는 DDRAM에 저장된다.
  • Read BF & address : Busy Flag(BF)와 address counter를 읽어드린다. 앞서 말한 바와 같이 다른 명령을 수행하기 전에 BF를 검사하여 ‘low’인 경우에만 다음 명령을 수행한다.

LCD Module 초기화 및 문자 Display Sequence

  • 전원스위치를 켠다.(또는 Reset)
  • LCD Module이 초기화 될 때까지 대기한다.( > 30msec)
  • Function set 명령을 수행한다.
  • Display On/Off Control 명령을 수행한다.
  • Entry mode set 명령을 수행한다.
  • DDRAM address를 setting한다.(1st line)
  • 표시할 문자데이터를 연속으로 보낸다.(1st Line)
  • DDRAM address를 setting한다. (2nd Line)
  • 표시할 문자데이터를 연속으로 보낸다. (2nd Line)
  • 상기 DDRAM address setting과 데이터 전송의 과정을 반복하거나(필요한 경우) 다른 명령을 수행한다.

+ Recent posts