히타치 HD44780 LCD 컨트롤러

40266 LCD 모듈 후면의 HD44780 LCD 컨트롤러 및 HD44100 드라이버 **히타치 HD44780 LCD 컨트롤러**(Hitachi HD44780 LCD controller)는 히타치 제작소에서 1980년대에 개발한 영숫자 도트 매트릭스 액정 디스플레이(LCD) 컨트롤러이다. 이 컨트롤러의 문자 세트에는 ASCII 문자, 일본어 가나 문자 및 두 줄의 40자 기호가 포함된다. 확장 드라이버를 사용하면 최대 80자를 표시할 수 있다.Ref=Sanchez 수많은 타사 디스플레이가 16핀 인터페이스 및 명령어 세트와 호환되어 인기 있고 저렴한 LCD 드라이버로 사용된다.access-date = January 2, 2023
# 아키텍처
HD44780U 기반 LCD 모듈의 블록 다이어그램 히타치 HD44780 LCD 컨트롤러는 흑백 텍스트 디스플레이로 제한되며, 주로 복사기, 팩스, 레이저 프린터, 산업용 테스트 장비 및 라우터, 오브젝트 스토리지 디바이스와 같은 네트워킹 장비에 사용된다. 호환되는 LCD 화면은 여러 표준 구성으로 제조된다. 일반적인 크기는 8문자 1줄(8×1)이며, 16×2, 20×2, 20×4 형식이 있다. 더 큰 맞춤형 크기는 32, 40, 80문자와 1, 2, 4 또는 8줄로 제작된다. 가장 일반적으로 제조되는 대형 구성은 40×4 문자인데, 이는 단일 HD44780 칩이 최대 80자까지만 처리할 수 있으므로 확장 칩이 있는 두 개의 개별적으로 주소 지정 가능한 HD44780 컨트롤러가 필요하다. 문자 LCD에는 백라이트가 있을 수 있으며, 이는 발광 다이오드, 형광등, 또는 전기발광 방식일 수 있다. LED 백라이트의 정격 작동 전압은 최대 밝기에서 5V이며, 더 낮은 전압에서는 LED 색상과 같은 세부 사항에 따라 밝기가 조절된다. 비-LED 백라이트는 종종 더 높은 전압을 필요로 한다.
## 인터페이스
HD44780 기반 LCD 디스플레이를 활용하는 드래곤12-P 프리스케일 68HC12/9S12 마이크로컨트롤러 프로젝트 개발 보드 문자 LCD는 일반적으로 0.1인치(2.54mm) 간격의 핀 헤더 또는 에지 커넥터를 사용하는 16핀 인터페이스를 사용한다. 백라이트가 없는 디스플레이는 백라이트 전원 공급용 핀 두 개를 제외하고 14핀만 가질 수 있다. 이 인터페이스는 인텔 8051 XRAM 인터페이스에 쉽게 연결되도록 설계되었으며, 두 개의 주소 핀만 사용하여 간단한 MOVX 명령으로 LCD에 텍스트를 표시할 수 있어 장치에 텍스트 디스플레이를 추가하는 비용 효율적인 옵션을 제공했다. 주요 핀아웃은 다음과 같다(예외 존재): {| class="wikitable" ! 핀 번호 !! 이름 !! 방향 || 설명 |- | align="right" | 1 || Vss || 전원 || 전원 공급 접지 |- | align="right" | 2 || Vcc || 전원 || 전원 공급 (+3.3 또는 +5 V, 모듈에 따라 다름) |- | align="right" | 3 || Vee || 입력 || 대비 조정 (아날로그 입력) |- | align="right" | 4 || RS || 입력 || 레지스터 선택 (0 = 명령, 1 = 데이터) |- | align="right" | 5 || R/W || 입력 || 읽기/쓰기 (0 = 디스플레이 모듈에 쓰기, 1 = 디스플레이 모듈에서 읽기) |- | align="right" | 6 || E || 입력 || 클록 활성화 (하강 에지 트리거) |- | align="right" | 7 || DB0 || I/O || 데이터 비트 0 (4비트 작동 시 사용 안 함) |- | align="right" | 8 || DB1 || I/O || 데이터 비트 1 (4비트 작동 시 사용 안 함) |- | align="right" | 9 || DB2 || I/O || 데이터 비트 2 (4비트 작동 시 사용 안 함) |- | align="right" | 10 || DB3 || I/O || 데이터 비트 3 (4비트 작동 시 사용 안 함) |- | align="right" | 11 || DB4 || I/O || 데이터 비트 4 |- | align="right" | 12 || DB5 || I/O || 데이터 비트 5 |- | align="right" | 13 || DB6 || I/O || 데이터 비트 6 |- | align="right" | 14 || DB7 || I/O || 데이터 비트 7 |- | align="right" | 15 || LED+ || 전원 || 백라이트 애노드 (+) (해당하는 경우) |- | align="right" | 16 || LED− || 전원 || 백라이트 캐소드 (−) (해당하는 경우) |} 참고: * Vee (또는 V0): 이는 일반적으로 전위차계에 연결되는 아날로그 입력이다. 사용자는 다른 모든 조정과 독립적으로 이 전압을 제어할 수 있어야 하는데, 이는 온도 및 경우에 따라 해발 고도에 따라 달라지는 디스플레이의 가시성을 최적화하기 위함이다. 잘못 조정하면 디스플레이가 오작동하는 것처럼 보일 수 있다. * R/W: 대부분의 응용 프로그램에서 HD44780에서 읽는 것은 필요하지 않다. 이 경우 이 핀을 영구적으로 접지에 연결할 수 있으며, 이를 제어하기 위해 프로세서 핀을 할당할 필요가 없다.
### 모드 선택
20×4 문자 디스플레이 8비트 모드에서는 모든 전송이 인에이블 핀(E)의 한 사이클에서 데이터 버스의 모든 8비트와 RS 및 R/W 핀이 안정된 상태에서 발생한다. 4비트 모드에서는 데이터가 상위 데이터 핀(D7-D4)을 통해 4비트 "니블" 쌍으로 전송되며, 두 개의 인에이블 펄스와 RS 및 R/W 핀이 안정된 상태를 유지한다. 가장 중요한 네 비트(7-4)를 먼저 쓰고, 그 다음 가장 중요도가 낮은 네 비트(3-0)를 써야 한다. 상위/하위 시퀀스가 매번 완료되어야 하며, 그렇지 않으면 컨트롤러가 추가 명령을 제대로 수신하지 못한다. 4비트 또는 8비트 모드를 선택하려면 명령을 신중하게 선택해야 한다. 두 가지 주요 고려 사항이 있다. 첫째, D3–D0이 연결되지 않은 경우 내부 풀업 MOSFET이 있기 때문에 이 라인들은 HD44780에 항상 하이(이진수 1111)로 나타난다.access-date=2023-01-05 둘째, LCD는 초기적으로 다음 세 가지 상태 중 하나일 수 있다: * 상태 1: 8비트 모드 * 상태 2: 4비트 모드, 첫 번째 4비트 세트 대기 중 * 상태 3: 4비트 모드, 두 번째 4비트 세트 대기 중 예를 들어, HD44780이 4비트 모드일 때 첫 4비트만 전송한 후 이전 제어가 중단된 경우 상태 3이 발생할 수 있다. 다음 알고리즘은 LCD가 원하는 모드에 있는지 확인한다: 동일한 명령이 세 번 전송된다. 기능 설정 명령으로, 8비트 인터페이스 D7–D4 = 이진수 0011이고, 하위 4비트는 "don't care"이며, 단일 인에이블 펄스를 사용한다. 컨트롤러가 4비트 모드인 경우 하위 4비트는 무시되므로 인터페이스가 알려진 크기 구성에 있을 때까지 전송될 수 없다. 상태 1 (8비트 구성)에서 시작: * 기능 설정 명령을 보낸다. 명령이 실행되어 8비트 모드가 설정된다. * 기능 설정 명령을 보낸다. 명령이 실행되어 8비트 모드가 설정된다. * 기능 설정 명령을 보낸다. 명령이 실행되어 8비트 모드가 설정된다. 상태 2 (4비트 구성, 첫 번째 4비트 전송 대기 중)에서 시작: * 기능 설정 명령을 보낸다. 첫 4비트가 수신된다. * 기능 설정 명령을 보낸다. 마지막 4비트가 수신되고 명령이 수락되며 8비트 모드가 설정된다. * 기능 설정 명령을 보낸다. 명령이 실행되어 8비트 모드가 설정된다. 상태 3 (4비트 구성, 마지막 4비트 전송 대기 중)에서 시작: * 기능 설정 명령을 보낸다. 마지막 4비트가 수신되고 알 수 없는 명령이 실행된다. * 기능 설정 명령을 보낸다. 8비트 모드에서는 명령이 실행되거나, 그렇지 않으면 첫 4비트가 수신된다. * 기능 설정 명령을 보낸다. 8비트 명령이 실행되거나 이전 명령의 마지막 4비트가 수신되고 8비트 모드가 설정된다. 세 가지 시작 경우 모두에서 버스 인터페이스는 이제 8비트 모드, 1줄, 5×8 문자로 되어 있다. 다른 8비트 모드 구성이 필요한 경우, 전체 매개변수를 설정하기 위해 8비트 버스 기능 설정 명령을 보내야 한다. 4비트 모드가 필요한 경우, 단일 인에이블 펄스로 D7–D4에 이진수 0010을 보내야 한다. 이제 컨트롤러는 4비트 모드가 되며, 전체 4비트 버스 기능 설정 명령 시퀀스(명령 비트 7–4 및 3–0을 다음 사이클에 두 번 인에이블)를 통해 기능 설정 레지스터 구성이 완료된다.
# 명령어 세트
HD44780 명령어 세트는 다음과 같다:Ref=Huang {| class="wikitable" |+ **HD44780U 기반 명령어 세트** |- ! rowspan="2" | 명령어 ! colspan="10" | 코드 ! rowspan="2" | 설명 ! rowspan="2" | 실행 시간 (최대)
(fcp = 270 kHz일 때) |- ! | RS ! | R/W ! | B7 ! | B6 ! | B5 ! | B4 ! | B3 ! | B2 ! | B1 ! | B0 |- | 디스플레이 지우기 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 1 || 디스플레이를 지우고 커서를 홈 위치(주소 0)로 되돌린다. |align="center"| 1.52 ms |- || 커서 홈 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 1 |align="center" | * || 커서를 홈 위치로 되돌린다. 또한 이동 중인 디스플레이를 원래 위치로 되돌린다. DDRAM 내용은 변경되지 않는다. |align="center"| 1.52 ms |- || 엔트리 모드 설정 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 1 |align="center" | I/D |align="center" | S || 커서 이동 방향(I/D)을 설정하고, 디스플레이 이동(S) 여부를 지정한다. 이 작업은 데이터 읽기/쓰기 중에 수행된다. |align="center"| 37 μs |- || 디스플레이 켜기/끄기 제어 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 1 |align="center" | D |align="center" | C |align="center" | B || 모든 디스플레이 켜기/끄기(D), 커서 켜기/끄기(C), 커서 위치 문자 깜박임(B)을 설정한다. |align="center"| 37 μs |- || 커서/디스플레이 이동 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 1 |align="center" | S/C |align="center" | R/L |align="center" | * |align="center" | * || 커서 이동 또는 디스플레이 이동(S/C), 이동 방향(R/L)을 설정한다. DDRAM 내용은 변경되지 않는다. |align="center"| 37 μs |- || 기능 설정 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 1 |align="center" | DL |align="center" | N |align="center" | F |align="center" | * |align="center" | * || 인터페이스 데이터 길이(DL), 디스플레이 줄 수(N), 문자 폰트(F)를 설정한다. |align="center"| 37 μs |- || CGRAM 주소 설정 |align="center" | 0 |align="center" | 0 |align="center" | 0 |align="center" | 1 |align="center" | CGRAM 주소 || CGRAM 주소를 설정한다. 이 설정 후 CGRAM 데이터가 전송 및 수신된다. |align="center"| 37 μs |- || DDRAM 주소 설정 |align="center" | 0 |align="center" | 0 |align="center" | 1 |align="center" | DDRAM 주소 || DDRAM 주소를 설정한다. 이 설정 후 DDRAM 데이터가 전송 및 수신된다. |align="center"| 37 μs |- || Busy flag 및 주소 카운터 읽기 |align="center" | 0 |align="center" | 1 |align="center" | BF |align="center" | CGRAM/DDRAM 주소 || 내부 작업이 수행 중임을 나타내는 Busy flag(BF)를 읽고, CGRAM 또는 DDRAM 주소 카운터 내용(이전 명령어에 따라 다름)을 읽는다. |align="center"| 0 μs |- || CGRAM 또는 DDRAM에 쓰기 |align="center" | 1 |align="center" | 0 |align="center" | 쓰기 데이터 || CGRAM 또는 DDRAM에 데이터를 쓴다. |align="center"| 37 μs |- || CG/DDRAM에서 읽기 |align="center" | 1 |align="center" | 1 |align="center" | 읽기 데이터 || CGRAM 또는 DDRAM에서 데이터를 읽는다. |align="center"| 37 μs |- |colspan="13" | **명령어 비트 이름 —**
**I/D** – 0 = 커서 위치 감소, 1 = 커서 위치 증가; **S** – 0 = 디스플레이 이동 없음, 1 = 디스플레이 이동; **D** – 0 = 디스플레이 꺼짐, 1 = 디스플레이 켜짐; **C** – 0 = 커서 꺼짐, 1 = 커서 켜짐; **B** – 0 = 커서 깜박임 꺼짐, 1 = 커서 깜박임 켜짐; **S/C** – 0 = 커서 이동, 1 = 디스플레이 이동; **R/L** – 0 = 왼쪽 이동, 1 = 오른쪽 이동; **DL** – 0 = 4비트 인터페이스, 1 = 8비트 인터페이스; **N** – 0 = 1/8 또는 1/11 듀티 (1줄), 1 = 1/16 듀티 (2줄); **F** – 0 = 5×8 도트, 1 = 5×10 도트; **BF** – 0 = 명령어 수락 가능, 1 = 내부 작업 진행 중. |} DDRAM은 디스플레이 데이터 RAM이고 CGRAM은 문자 생성기 RAM이다.access-date=2021-12-23 DDRAM은 80바이트(행당 40바이트)이며 두 행 사이에 간격이 있다. 첫 번째 행은 십진수 0~39 또는 십육진수 0~27의 주소를 가진다. 두 번째 행은 십진수 64~103 또는 십육진수 40~67의 주소를 가진다. CGRAM은 문자 생성기에서 최대 8개의 문자를 인코딩하는 데 사용되는 읽기/쓰기 메모리이다. 주소 0부터 3F 헥스까지의 64개 필드로 구성된다. 각 필드는 각 문자의 픽셀 행에 매핑되는 5비트이다. CGRAM의 각 8개 필드는 각 문자에 사용된다. 문자 코드의 하위 3비트(0–7 및 8–15)는 CGRAM 메모리에서 8개 필드 그룹을 선택한다. DDRAM으로 읽기/쓰기는 버스 전송 중에 RS 입력을 높게 설정하여 수행된다. 또한 DDRAM은 액세스를 위해 DDRAM을 선택하고 DDRAM 액세스의 시작 주소를 설정하는 Set DDRAM address 명령을 사용하여 선택되어야 한다. 마찬가지로 CGRAM으로 읽기/쓰기는 버스 전송 중에 RS 입력을 높게 설정하여 수행된다. CGRAM 또한 액세스를 위해 CGRAM을 선택하고 CGRAM 액세스의 시작 주소를 설정하는 Set CGRAM address 명령을 사용하여 선택되어야 한다. 이 표에 나열된 실행 시간은 270kHz의 발진기 주파수를 기준으로 한다. 데이터 시트에 따르면 VCC=5V에서 91kΩ의 저항을 사용하면 발진기가 190kHz에서 350kHz 사이로 변동할 수 있으며, 이로 인해 37μs 대신 52.6μs 및 28.6μs의 대기 시간이 발생할 수 있다. 권장되는 91kΩ 저항이 있는 디스플레이를 3.3볼트 전원으로 구동하면 발진기가 훨씬 느리게 작동한다. Busy 비트를 사용하지 않고 외부 회로에서 명령의 타이밍을 제어하는 경우 이를 고려해야 한다.
# 글꼴
8×2 문자 HD44780 디스플레이의 앰버 백라이트 오리지널 HD44780 문자 생성기 ROM은 5×8 도트 매트릭스에 208자, 5×10 도트 매트릭스에 32자를 포함한다. 더 높은 해상도를 가진 최신 호환 칩은 더 많은 픽셀을 가진 디스플레이에 맞춰 출시되었다. 두 가지 버전의 ROM이 개발되었다: * HD44780UA00: 표준(일본어) 버전으로, 가타카나 문자와 일부 그리스 문자 및 수학 기호를 포함한다. * HD44780UA02: 유럽 버전으로, 그리스어, 키릴 문자 및 서유럽 문자(특수 발음 구별 기호 포함)의 완전한 세트를 포함한다. 일본어 버전의 7비트 ASCII 하위 집합은 비표준이다: 일반적으로 역슬래시 문자가 있는 자리에 엔 기호를, 물결표와 삭제 문자 대신 왼쪽 및 오른쪽 화살표 기호를 제공한다. 제한된 수의 사용자 지정 문자를 특수 명령을 사용하여 비트맵 형태로 장치에 프로그래밍할 수 있다. 이 문자들은 휘발성 메모리에 저장되기 때문에 장치를 켤 때마다 장치에 다시 기록해야 한다.
# 추가 자료
참고 자료 시작 * ref=Huang * ref=Sanchez 참고 자료 끝 WikiVault 번역 검토 필요 위키데이터 속성 추적 분류:액정 디스플레이