2011년7월11일_CLCD(Character Liquid Crystal Display) 16216D-4-B102A
지급받은 문자LCD(이하 CLCD)의 사진...
LCD패널에 형광등 불빛이 반사되어 하얀 막대가 보이는 것이 매우 아름답다.
LCD를 뒤집어 보면 숫자가 적혀 있고 각 번호별로 어떻게 연결해야 하는지 아래의 표를 보고 결선하면 되겠다.
1번 VSS - FET의 S(소스)단자에 연결된 전압이라고 하여 VSS라고 한다. GND에 연결.
2번 VDD - LCD에 전원을 공급하는 단자로 +5V를 연결한다. ARM보드에서 나오는 USB전원핀에 물리면 되겠다.
3번 V0 – 콘트라스조종용 단자로 +5V를 연결하면 글자가 보이지 않고 GND에 연결하면 최대 대비가 되나…전력소모가 커진다.
4번 RS – 레지스터선택단자로 High레벨의 신호가 입력되면 데이터레지스터를,
Low레벨의 신호가 입력되면 명령레지스터를 선택되어 데이터버스가 그 레지스터에 연결된다.
5번 R/W – 읽기/쓰기 선택단자로 High레벨의 신호가 입력되면 LCD로 부터 데이터를 읽을 수 있고, (ARM ← LCD)
Low레벨의 신호가 입력되면 LCD로 데이터를 쓸 수 있다. (ARM → LCD)
6번 E - LCD를 활성화하는 단자로 High레벨의 신호가 입력되면 데이터버스의 내용을 받아 들여 LCD의 상태가 변화하고,
Low레벨의 신호가 입력되면 데이터버스의 내용이 변하여도 무시한다.
※ 보통 데이터 버스에는 여러 장치(하드디스크, RAM, Flash, ADC, DAC등등)가 물리게 되는데 디바이스에 이런 활성핀이 있어,
CPU가 여러 장치 중에 하나의 장치만 선택하여 데이터를 전송할 수 있다.
만약, 버스에 물린 여러 장치가 동시에 응답하거나 CPU에서 보낸 데이터를 동시에 받아 들이게 된다면 원치 않는 동작을 한다.
그리고 데이터버스를 여러 장치가 공유하지 않게 설계한다면 배선이 많아 복잡해 제품단가가 상승한다.
7번~14번 DB0 ~ DB7 – 데이터 버스로 8개의 전기선다발이고, 한 번에 1Byte의 데이터를 LCD로 전송하거나 받을 수 있다.
15~16번 LED – 상기의 표는 지급받은 LCD의 극성과 다르다. 반대로 되어 있으니 주의할 것.
(최상단의 데이터시트와 다른 데이터시트를 보고있다. ㅎㅎ)
블록다이어그램의 좌측에 보이는 화살표들이 모두 LCD외부단자로 사진에서 볼 때 황금색 도금된 패드들이다.
외부에 연결된 제어단자와 데이터버스를 통해 ARM MCU가 컨트롤LSI에게 화면에 뿌릴 지령을 내리면 컨트롤LSI는 LCD판떼기에,
글자를 찍어주는 것이다.
아래의 VR 20KΩ은 콘트라스조종용 가변저항으로 화면의 대비를 조정할 수 있다.
먼저 Data Bus에 값을 집어 넣고 RS핀에 제어신호를 줘 레지스터를 선택한다.
R/W핀이 Low이면 데이터버스와 명령레지스터가 연결되어 LCD에 명령을 내릴 수 있고,
High이면 데이터버스와 데이터레지스터가 연결되어 LCD에 데이터를 전송하여 문자를 출력할 수 있다.
8bit 병렬 전송 데이터버스는 한 번에 1Byte씩 데이터를 전송할 수 있는 전기선다발이고,
bit수를 늘려 한 번에 수Bytes이상 많은 양의 데이터를 전송할 수 있게 할 수 있으나, 배선량이 늘어 제품단가가 상승하여 안 좋다.
R/W, RS, DB0~DB7은 모두 ARM에 연결하고,
E단자는 제품특성에 따라 데이터버스에 다른 장치가 없다면 E단자를 VCC에 연결하여 항상 명령을 받을 수 있게 하고,
다른 장치가 많아서 칩셀렉트(Chip Selecte)를 해야한다면 MCU에 연결하자.
15번, 16핀 LED백라이트는 켜고 끄는 제어가 필요하다면 드라이버를 통해 MCU와 연결하고,
항상켜거나 끈다면 전원선에 연결하거나 방치해 두자.
RS핀부터 보면 쏘세지처럼 꼬인 부분 전에는 어떤 값이라도 상관없는 Don’t care이고,
잘 보면 E단자가 비활성상태 Low level이므로 그 동안에 LCD는 입력을 받을 수 없다.
그러나 LCD가 알아 듣는 시간이 필요한데 Setup time이라고 한다. 이 시간동안 다른 제어핀들은 준비가 완료된 상태여야 한다.
(RS핀, R/W핀)
아쉽게도 상기의 타이밍도에선 LCD가 활성상태로 바뀐 후 얼마의 시간이 흘러야 데이터버스의 값이 유효한 값이 되는지 나와있지 않다.
즉, E핀에 High level의 신호가 인가된 후 언제 값을 써야 될지 알 수 없다.
그러니 E핀에 High level의 신호를 인가한 후 바로 데이터를 데이터버스에 넣자. 또는 항상 넣어 놓자.
Figure7. Read Mode Timing Diagram을 보면 시간이 나와있다!
레지스터세팅 |
설명란을 번역해 보니…
Instruction | Description |
Clear Display | Write "20H" to DDRAM and set DDRAM address to "00H" from AC |
Return Home | Set DDRAM address to "00H" from AC and return cursor to its original position if shifted. |
Entry Mode Set | Assign cursor moving direction and enable the shift of entire display |
Display ON/OFF Control | Set display(D), cursor(C), and blinking of cursor(B) on/off control bit. |
Cursor or Display Shift | Set cursor moving and diplay shift control bit. and the direction, without changing of DDRAM data. |
Function Set | Set interface data length (DL: 8bit/4bit) numbers of display line (N: 2line/1line) and, |
Set CGRAM Address | Set CGRAM address in address counter |
Set DDRAM Address | Set DDRAM address in counter |
Read Busy Flag and Address Counter | Whether during internal operation or not can be known by reading BF. |
Write Data to RAM | Write data into internal RAM (DDRAM/CGRAM) |
Read Data from RAM | Read data from internal RAM (DDRAM/CGRAM) |
NOTE: When an MPU program with checking the Busy Flag(DB7) is made,
it must be necessary 1/2Fosc is necessary for executing the next instruction by the falling edge of the
'E' signal after the Busy Flag (DB7) goes to “Low”.
참고 : 비지 플래그 (DB7)을 확인과 MPU 프로그램이 만든 때,
그것은 약속 국기 (DB7)이 "낮음"로 이동 후 'E'신호의 하강 에지에서 다음 명령어를 실행에 필요한 필요한 1/2Fosc해야합니다.
더욱 알 수 없게 되었다. -_ㅠ
'내장형하드웨어 > 일일보고서' 카테고리의 다른 글
2011년7월12일_CLCD납땜 (0) | 2011.07.13 |
---|---|
2011년7월12일_UDP프로토콜 소켓통신시 connect()를 사용해 서버와의 연결을 유지하기, 소켓옵션 (0) | 2011.07.13 |
2011년7월11일_데이터의 경계가 없는 TCP와 데이터의 경계가 있는 UDP프로토콜을 알아보는 실습코드 (0) | 2011.07.11 |
2011년7월11일_연결리스트(Linked list)구조를 만드는 이유와 이중연결리스트(double linked list) (0) | 2011.07.11 |
2011년7월8일_TCP Echo Server(임시제목) (0) | 2011.07.11 |