USB Tester
4) Text Lcd
Text LCD(Character LCD)는 LCD화면에 정해진 형태의 문자를
정해진
개수만큼
표시할
수
있도록
만들어진 LCD 디스플레이 장치로서, 간단한
문자
표시가
필요한
각종
임베디드
장치들에서
널리
사용되고
있다. TEXT LCD는 실생활에 매우
많이
사용되고
있는
주변장치이다. USB Tester에 사용된 Text LCD 구조는 16문자*2라인의 표시부를 가지며, 표시부 상단에 커넥터가 위치한다. 이 LCD에는 Backlight 기능이 포함되어 있다. 아래의 표는 사용되는 인터페이스
커넥터
핀의
기능을
요약한
것이다.
[표 1]인터페이스 커넥터 핀 기능
핀
|
Signal
Name
|
기 능
|
1
|
VSS
|
전원 GND
|
2
|
VDD
|
전원 +5VDC
|
3
|
VEE
|
Contrast 제어 전압레벨 (VDD-VEE = 13.5 ~ 0V)
|
4
|
RS
|
Register Select ( 0 = instruction, 1 = data )
|
5
|
R/W
|
Read/Write ( 0 = FPGA -> LCD, 1 : FPGA <- LCD )
|
6
|
E
|
Enable Signal for read/write LCD
|
7
|
DB0 (LSB)
|
DATA
|
8
|
DB1
|
9
|
DB2
|
10
|
DB3
|
11
|
DB4
|
12
|
DB5
|
13
|
DB6
|
14
|
DB7 (MSB)
|
15
|
A
|
+LED (backlight LED용 전원 +4.4 ~ 4.7V)
|
16
|
K
|
-LED (backlight LED용 전원 GND) |
TEXT LCD는 보통
LCD 표시부와 LCD 제어부를
하나로
하여 LCD 모듈로 시판된다. LCD 제어기는
다음과
같이
구성된다.
LCD제어기 내부에는 명령(Instruction)과 데이터(Data)를 위한 2개의
레지스터, BF (Busy Flag), AC(Address Counter), 문자발생램(CGRAM), 문자발생롬(CGROM), 데이터표시램(DDRAM)이 있다.
LCD 제어기의 내장 레지스터는
다음과
같다.
명령레지스터(IR): DDRAM과 CGRAM에
대한
어드레스와
클리어, 커서시프트 등 제어명령을 보유
데이터레지스터(DR): DDRAM과 CGRAM에
쓴
데이터나
읽은
데이터를
일시적으로
저장
위의 레지스터들은 RS(4번핀)과 R/W(5번핀)을 사용하여 선택을 할
수
있다. 선택 방법은 다음과 같다.
[표 2] RS, R/W 신호에 따른 TEXT LCD 제어기 레지스터 선택방법
RS
|
R/W
|
레지스터 접근
|
0
|
0
|
IR쓰기(각종 제어 명령 쓰기)
|
0
|
1
|
BF읽기, AC읽기
|
1
|
0
|
DR쓰기
|
1
|
1
|
DR읽기
|
AC : DDRAM과 CGRAM의
주소를
지정할
때
사용하는데 IR에 주소 정보를 쓰면
주소
정보가 AC로 전송되고 DDRAM이나 DDROM에 데이터를 쓰면 AC는 자동으로 +1 혹은 -1이 된다.
DDRAM(Data Display RAM) : 80x8비트 용량으로 80개의 8비트 아스키(ASCII)코드를 저장할 수 있다. 0x00-0F 주소가 LCD 1행의 1-16번째, 0x40-4F 주소가 LCD 2행의 1-16번째
문자로
표시된다.(1행 2행의 번호
불연속임에
주의해야
한다.)
CGRAM(Character Generator RAM) : 사용자가 자유로이
문자를
만들
때
사용하는
램으로 5x7은 8개, 5x10은 4개 만들어
저장
가능하다.
CGROM(Character Generator ROM) : 5x7, 5x10 도트의
문자를
내장하고
있다. 특수기호, 숫자, 영문자의 문자코드는 아스키코드와 일치한다.
LCD 모듈을 제어할 때는
각
제어신호의
동작
타이밍을
고려하여야
하며, 일반 반도체 소자들에 비해
엑세스
타임이
긴
편이므로
유의하여야
한다. 아래의 그림은 LCD 모듈의 Read 및 Write 동작시의
타이밍이다.
[그림 1] TEXT LCD 의 R/W Timing
다음의 표는 LCD 모듈에
문자
등을
표시하기
위한
제어
명령이며, LCD 모듈은 각 명령을 실행하기
위해
일정한
시간을
요구하므로
다음
명령을
보내기
전에
충분히
지연시키거나, BUSY FLAG를 체크하여 앞에서
전송한
명령의
실행완료
상태를
체크하여야
한다.
[표 3] LCD 모듈 표시 제어명령
기능
|
제어신호
|
제 어 명 령
|
RS
|
R/W
|
DB7
|
DB6
|
DB5
|
DB4
|
DB3
|
DB2
|
DB1
|
DB0
|
Clear
Display
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
Return
Home
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
0
|
Entry
Mode Set
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
I/D
|
S
|
Display
ON/OFF Control
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
D
|
C
|
B
|
Cursor
or Display Shift
|
0
|
0
|
0
|
0
|
0
|
1
|
S/C
|
R/L
|
0
|
0
|
Function
Set
|
0
|
0
|
0
|
0
|
1
|
DL
|
N
|
F
|
0
|
0
|
Set
CG RAM address
|
0
|
0
|
0
|
1
|
CG RAM
address
|
Set
DD RAM address
|
0
|
0
|
1
|
DD RAM
address
|
Read
busy flag and address
|
0
|
1
|
BF
|
Address
Counter
|
Data
write to CG RAM or DD RAM
|
1
|
0
|
Write
address
|
Data
read from CG RAM or
DD
RAM
|
1
|
1
|
Read
address
|
모든 디스플레이 상태를 소거하고
커서를 Home 위치로 돌려놓는다.
DD RAM의 내용은
변경하지
않고
커서만을 Home으로 위치시킨다.
데이터를 Read 하거나 Write 할 경우에 커서의 위치를
증가시킬
것인가
(I/D=1) 감소시킬 것인가 (I/D=0)를
결정하며, 또 이때 화면을 이동
할
것인지
(S=1) 아닌지 (S=0)를
결정한다.
화면 표시를 ON/OFF 하거나(D) 커서를 ON/OFF 하거나(C) 커서를 깜박이게 할 것인지(B)의 여부를 지정한다.
화면(S/C=1) 또는
커서(S/C=0)를 오른쪽(R/L=1) 또는
왼쪽(R/L=0)으로 이동한다.
인터페이스에서 데이터의 길이를 8비트(DL=1) 또는 4비트(DL=0)로
지정하고, 화면 표시 행수를 2행(N=1) 또는 1행(N=0)으로 지정하며, 문자의 폰트를 5x10 도트(F=1) 또는 5x7 도트(F=0)로 지정한다.
전원 투입 후 최초에는
주로
이
명령을
보내게
되는데, LCD 모듈이 리셋 되려면 약 50ms 가 소요되므로 충분히 기다린
후에
이
코드를
보내야
한다. 또한, 4비트로 인터페이스 할 경우에는
상위 4 비트를 먼저 전송하고 다음에
하위 4 비트를 전송해야 한다.
Character Generator RAM의
어드레스를
지정한다. 이후에 송수신 하는 데이터는 CG RAM의 데이터이다.
Display Data RAM의
어드레스를
지정한다. 이후에 송수신하는 데이터는 DD RAM의 데이터이다.
LCD 모듈이 내부 동작중임을
나타내는 Busy Flag(BF) 및 어드레스 카운터의
내용을 read 한다. LCD 모듈이
각
제어
코드를
실행하는 데는
일정한
시간이
필요하므로
MCU가 BF를 읽어 1일 경우에는 기다리고 0일 경우 다음 제어
코드를
보내는
방법을
사용하면
보다
효율적인
처리가
가능하다
DD
RAM 어드레스
DD RAM은 표시될
각
문자의 ASCII 코드 데이터가 저장되어 있는
메모리이며
모두 80개의 번지가 있는데, 화면의 각 행과 열의
위치에는
고유한
어드레스
값이
부여된다. 그런데, 각 행과
행
사이의
어드레스가
연속하여
있지
않으므로
주의하여야
한다. 아래 표는 표시 문자의
위치에
대한 DD RAM의 어드레스이다.
[표 4] 표시문자
위치에 대한 DD RAM 어드레스
구분
|
1
|
2
|
3
|
4
|
……
|
13
|
14
|
15
|
16
|
Line1
|
00
|
01
|
02
|
03
|
……
|
0D
|
0E
|
0F
|
10
|
Line2
|
40
|
41
|
42
|
43
|
……
|
4D
|
4E
|
4F
|
50
|
[표 5] ASCII
도형문자 종류 및 코드 값
구분
|
00H
|
10H
|
20H
|
30H
|
40H
|
50H
|
60H
|
70H
|
80H
|
90H
|
0
|
사용자 정의
영역
|
미사용 영역
|
|
0
|
@
|
P
|
`
|
p
|
미사용 영역
|
1
|
!
|
1
|
A
|
Q
|
a
|
q
|
2
|
"
|
2
|
B
|
R
|
b
|
r
|
3
|
#
|
3
|
C
|
S
|
c
|
s
|
4
|
$
|
4
|
D
|
T
|
d
|
t
|
5
|
%
|
5
|
E
|
U
|
e
|
u
|
6
|
&
|
6
|
F
|
V
|
f
|
v
|
7
|
'
|
7
|
G
|
W
|
g
|
w
|
8
|
(
|
8
|
H
|
X
|
h
|
x
|
9
|
)
|
9
|
I
|
Y
|
I
|
y
|
A
|
*
|
:
|
J
|
Z
|
j
|
z
|
B
|
+
|
;
|
K
|
[
|
k
|
{
|
C
|
,
|
<
|
L
|
¥
|
l
|
|
|
D
|
-
|
=
|
M
|
]
|
m
|
}
|
E
|
.
|
>
|
N
|
^
|
n
|
→
|
F
|
/
|
?
|
O
|
_
|
o
|
←
|
다음은 TextLCD 구동회로를
보여주고
있다.
[그림 2] TEXT LCD 구동회로