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 |
- CLEAR DISPLAY
모든 디스플레이 상태를 소거하고 커서를 Home 위치로 돌려놓는다.
- Return Home
DD RAM의 내용은 변경하지 않고 커서만을 Home으로 위치시킨다.
- Entry Mode SET
데이터를 Read 하거나 Write 할 경우에 커서의 위치를 증가시킬 것인가 (I/D=1) 감소시킬 것인가 (I/D=0)를 결정하며, 또 이때 화면을 이동 할 것인지 (S=1) 아닌지 (S=0)를 결정한다.
- Display ON/OFF Control
화면 표시를 ON/OFF 하거나(D) 커서를 ON/OFF 하거나(C) 커서를 깜박이게 할 것인지(B)의 여부를 지정한다.
- Cursor or Display Shift
화면(S/C=1) 또는 커서(S/C=0)를 오른쪽(R/L=1) 또는 왼쪽(R/L=0)으로 이동한다.
- Function SET
인터페이스에서 데이터의 길이를 8비트(DL=1) 또는 4비트(DL=0)로 지정하고, 화면 표시 행수를 2행(N=1) 또는 1행(N=0)으로 지정하며, 문자의 폰트를 5x10 도트(F=1) 또는 5x7 도트(F=0)로 지정한다.
전원 투입 후 최초에는 주로 이 명령을 보내게 되는데, LCD 모듈이 리셋 되려면 약 50ms 가 소요되므로 충분히 기다린 후에 이 코드를 보내야 한다. 또한, 4비트로 인터페이스 할 경우에는 상위 4 비트를 먼저 전송하고 다음에 하위 4 비트를 전송해야 한다.
- Set CG RAM Address
Character Generator RAM의 어드레스를 지정한다. 이후에 송수신 하는 데이터는 CG RAM의 데이터이다.
- Set DD RAM Address
Display Data RAM의 어드레스를 지정한다. 이후에 송수신하는 데이터는 DD RAM의 데이터이다.
- Read Busy Flag & Address
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 구동회로
'Project > USB Tester' 카테고리의 다른 글
[USB Tester] 6. PADS Layout 설계 (0) | 2018.01.06 |
---|---|
[USB Tester] 5. PADS Logic 설계 (0) | 2018.01.06 |
[USB Tester] 3. 레귤레이터(Buck Converter) (0) | 2017.12.12 |
[USB Tester] 2. ATmega328과 전류 센서 ACS712 (0) | 2017.12.12 |
[USB Tester] 1. 개요 (0) | 2017.12.06 |