개발자/Arduino

SSD 1306 OLED 디스플레이 원리

지구빵집 2020. 12. 3. 10:12
반응형

 

 

SSD 1306 OLED 디스플레이 원리 

 

SSD1306 OLED 디스플레이 소개

 

  • OLED는 전류에 반응하여 빛을 방출하는 유기 발광 다이오드입니다. OLED 디스플레이는 백라이트없이 작동하므로 딥 블랙 레벨을 표시 할 수 있습니다. 액정 디스플레이보다 크기가 작고 무게가 가볍습니다.
  • 128x64 OLED 디스플레이는 단순한 도트 매트릭스 그래픽 디스플레이입니다. 128 개의 열과 64 개의 행이있어 총 128x64 = 8192 픽셀을 표시합니다. 이 픽셀의 LED를 켜고 끄면 모든 모양의 그래픽 이미지를 표시 할 수 있습니다.

 

128x64 OLED 디스플레이 SSD1306

 

SSD1306 드라이버 IC로 구동되는 OLED 디스플레이. SSD1306은 OLED 도트 매트릭스 그래픽 디스플레이 시스템 용 컨트롤러가있는 CMOS OLED 드라이버입니다. SSD1306 드라이버를 사용하기 때문에 필요한 외부 구성 요소의 수와 전력 소비가 감소했습니다.

 

  • OLED 디스플레이는 텍스트, 이미지 및 다양한 패턴을 표시하는 데 사용됩니다. 또한 휴대폰 서브 디스플레이, MP3 플레이어, 계산기 등에 적합합니다.
  • OLED 디스플레이에는 밝기 제어를위한 256 단계가 있습니다.
  • OLED 디스플레이는 128x32, 128x64와 같은 다양한 해상도로도 제공됩니다. 위 이미지의 OLED 디스플레이의 해상도는 128x64 픽셀입니다.

 

OLED에 사용 가능한 인터페이스

OLED 디스플레이 모듈은 아래에 주어진 세 가지 인터페이스를 사용하여 마이크로 컨트롤러와 인터페이스 할 수 있습니다.

 

6800/8000 시리즈 호환 병렬 인터페이스

이 인터페이스에서 8 비트 데이터 송수신은 병렬 라인 즉, D0-D7을 통해 수행 될 수 있습니다.

 

I2C 인터페이스

이 인터페이스에서 데이터 송수신은 SDA 라인을 통해 직렬로 수행 할 수 있습니다.

 

직렬 주변기기 인터페이스

이 인터페이스에서 데이터 송수신은 SDI 및 SDO 라인을 통해 직렬로 수행 될 수 있습니다.

 

참고 : 여기에 설명 된 모듈에는 I2C 인터페이스 핀이 있으므로 아래의 모든 논의에서는 I2C를 인터페이스 표준으로 고려하고 있습니다.

 

다양한 해상도, 통신 프로토콜 (위의 OLED 용 사용 가능한 인터페이스 섹션 에서 논의 됨 ) 및 픽셀 색상 (예 : 파란색, 노란색, 흰색)을 갖는 다양한 유형의 OLED 모듈이 시장에 나와 있습니다 . 일부 모듈은 다중 색상도 지원합니다.

 

OLED 디스플레이 핀 (I2C 인터페이스)

 

OLED 디스플레이 핀

 

SDA (Serial Data) :

 

SDA는 마스터와 슬레이브간에 데이터를 전송하는 데 사용됩니다. 데이터 및 승인은 SDA를 통해 전송됩니다.

 

SCL (Serial Clock) :

 

시계 신호입니다. 이 핀은 클럭을 슬레이브 SCL로 전송합니다. 시계 틱 이벤트시 데이터가 다른 장치로 전송됩니다. 마스터 장치 만이 SCL 라인을 제어합니다.

 

VCC : 이것은 전원 공급 장치 핀입니다. + 3.3V 전원이 필요합니다. 3.3V 이상의 공급은 디스플레이를 손상시킬 수 있습니다.

 

GND : 이것은 접지 핀입니다. 이 핀에 공급 접지를 연결합니다.

 

OLED 디스플레이의 I2C 주소

 

I2C에서 인터페이스 장치는 슬레이브 주소로 인식됩니다. OLED 디스플레이에는 아래 이미지와 같이 슬레이브 주소 형식이 있습니다.

 

OLED 디스플레이 용 주소 등록

 

 SA0 (Slave Address) 비트 :

 

이 비트는 선택할 수있는 두 개의 슬레이브 주소 옵션을 제공합니다.

 

R / W (읽기 / 쓰기) 비트 :

 

이 비트는 I2C 쓰기 또는 I2C 읽기 작업과 같은 작동 모드를 결정하는 데 사용됩니다. 읽기 작업의 경우 1이고 쓰기 작업의 경우 0입니다.

 

이제 SA0 비트가 0 이면 마이크로 컨트롤러는 아래 I2C 주소를 사용하여 OLED 디스플레이로 읽기 / 쓰기 작업을 수행 할 수 있습니다.

 

I2C 쓰기 주소는 0x78입니다.

I2C 읽기 주소는 0x79입니다.

 

디스플레이 구조

 

OLED 디스플레이는 SSD1306의 GDDRAM과 매핑됩니다.

 

SSD1306의 GDDRAM 페이지 구조

 

GDDRAM (Graphics Display Data RAM)은 비트 맵 정적 RAM입니다. 표시 할 비트 패턴을 보유합니다.

 

OLED RAM 구조 OLED 디스플레이의 Pixelwise 구조

 

  • GDDRAM의 크기는 128 x 64 비트이며 PAGE0에서 PAGE7까지 8 페이지로 나뉘며, 위 그림과 같이 단색 128x64 도트 매트릭스 디스플레이에 사용됩니다.
  • 데이터 바이트 (D0-D7)가 GDDRAM에 기록되면 현재 열의 동일한 페이지의 모든 행 데이터 픽셀이 채워집니다. 데이터 비트 D0은 맨 위 행에 기록되고 데이터 비트 D7은 그림과 같이 맨 아래 행에 기록됩니다.

 

OLED의 행 및 열 매핑

 

  • 디스플레이에는 총 8 페이지, 64 행 및 128 열이 있습니다.
  • 위 그림과 같이 각 페이지에는 8 행과 128 열이 있습니다.
  • 디스플레이에는 세그먼트라고하는 총 128 개의 열이 있습니다.
  • 첫 번째 위치에 데이터를 표시하려면 페이지 주소를 0으로, 열 주소를 0으로 설정합니다. 페이지와 열의 끝 주소도 선택해야합니다.
  • 페이지의 최대 끝 주소는 07H이고 최대 열 주소는 7F H입니다.

 

SSD1306 용 명령

 

참고 : 여기에 제공된 명령 및 초기화 순서는 일반화되었으며 우리에게 효과적이었습니다.

 

디스플레이 클록 분할 비율 / 오실레이터 주파수 설정 (0xD5 h) :

 

  • 비트 3 ~ 0 : 디스플레이 클록 분할 비율 (D) CLK에서 DCLK (디스플레이 클록)를 생성하도록 분할 비율을 설정합니다. 분할 비율은 1 ~ 16이며 재설정 값은 1입니다.
  • 비트 7 ~ 4 : 오실레이터 주파수를 설정합니다. 4 비트 값은 16 개의 다른 주파수 설정을 생성합니다. 기본 설정은 1000b입니다.

 

멀티 플렉스 비율 설정 (0xA8 h) :

  • 이 명령은 기본 63 멀티 플렉스 모드를 16에서 63까지의 멀티 플렉스 비율로 전환합니다.

 

디스플레이 시작 라인 설정 (0x40 H ~ 0x7F H) :

  • 이 명령은 디스플레이 시작 라인 레지스터를 설정하여 0에서 63 사이의 값을 선택하여 디스플레이 RAM의 시작 주소를 결정합니다. 프로그램에서이 값을 0으로 설정하고 RAM 행 0을 COM 0에 매핑합니다.

 

메모리 주소 지정 모드 설정 (0x20 H) :

 

SSD1306에는 세 가지 주소 지정 모드가 있습니다.

 

  1. 페이지 주소 지정 모드
  2. 수평 주소 지정 모드
  3. 수직 주소 지정 모드

 

1. 페이지 주소 지정 모드 :

 

  • 페이지 주소 지정 모드에서 디스플레이 RAM을 읽고 쓴 후 열 주소 포인터가 자동으로 1 씩 증가합니다.
  • 열 주소 포인터가 열 끝 주소에 도달하면 열 주소 포인터는 열 시작 주소로 재설정되지만 페이지 주소 포인터는 다음 페이지를 가리 키지 않습니다.
  • 따라서 다음 페이지 RAM 콘텐츠에 액세스하려면 새 페이지 및 열 주소를 설정해야합니다.
  • 페이지 주소 지정 모드에 대해 하위 2 비트를 '1'과 '0'으로 설정해야합니다 .

 

페이지 주소 지정 모드의 주소 포인터 이동

 

페이지 주소 지정 모드에서 시작 RAM 액세스 포인터 위치를 정의하려면 다음 단계가 필요합니다.

 

  • B0h ~ B7h 명령으로 대상 표시 위치의 페이지 시작 주소를 설정합니다.
  • 00h ~ 0Fh 명령으로 포인터의 하위 시작 열 주소를 설정합니다.
  • 10h ~ 1Fh 명령으로 포인터의 상위 시작 열 주소를 설정합니다.

 

예를 들어 페이지 주소가 B2h로 설정되어 있고 하단 열 주소가 03h이고 상단 열 주소가 10h이면 시작 열이 PAGE2의 SEG3임을 의미합니다. RAM 액세스 포인터는 그림과 같이 위치합니다. 입력 데이터 바이트는 열 3의 RAM 위치에 기록됩니다.

 

페이지 주소 지정 모드에서 GDDRAM 액세스 포인터 설정의 예

 

2. 수평 주소 지정 모드 :

 

  • 수평 주소 지정 모드에서 디스플레이 RAM을 읽고 쓴 후 열 주소 포인터가 자동으로 1 씩 증가합니다.
  • 열 주소 포인터가 열 끝 주소에 도달하면 열 주소 포인터가 열 시작 주소로 재설정되고 페이지 주소 포인터가 1 씩 증가합니다.
  • 열 및 페이지 주소 포인터가 모두 끝 주소에 도달하면 포인터가 열 시작 주소와 페이지 시작 주소로 재설정됩니다.
  • 수평 주소 지정 모드의 경우 마지막 두 자리를 '0'과 '0'으로 설정해야 합니다 .

 

수평 주소 지정 수평 주소 지정 모드의 주소 포인터 이동

 

수직 주소 지정 모드 :

 

  • 수직 주소 지정 모드에서 디스플레이 RAM을 읽고 쓴 후 페이지 주소 포인터가 자동으로 1 씩 증가합니다.
  • 페이지 주소 포인터가 페이지 끝 주소에 도달하면 페이지 주소 포인터가 페이지 시작 주소로 재설정되고 열 주소 포인터가 1 씩 증가합니다. 열 및 페이지 주소 포인터가 모두 끝 주소에 도달하면 포인터가 열 시작 주소와 페이지 시작 주소로 재설정됩니다. 수직 주소 지정 모드에서는 마지막 두 자리를 '0'과 '1'로 설정해야 합니다 .

 

수직 주소 지정 모드의 주소 포인터 이동

 

일반 디스플레이 데이터 RAM 읽기 또는 쓰기 및 수평 / 수직 주소 지정 모드에서 RAM 액세스 포인터 위치를 정의하려면 다음 단계가 필요합니다.

  • 21h 명령으로 대상 표시 위치의 열 시작 및 끝 주소를 설정합니다.
  • 22h 명령으로 대상 표시 위치의 페이지 시작 및 끝 주소를 설정합니다.

 

열 주소 설정 (0x21 H) :

 

  • 이것은 트리플 바이트 명령입니다. 첫 번째 바이트는 열 주소 (0x21 H) 설정 명령을 지정합니다.
  • 두 번째 바이트는 열 시작 주소를 지정하고 세 번째 바이트는 열 끝 주소를 지정합니다.
  • 이 명령은 또한 열 주소 포인터를 열 시작 주소로 설정합니다.

 

페이지 주소 설정 (0x22 H) :

 

  • 이것은 트리플 바이트 명령입니다. 첫 번째 바이트는 페이지 주소 (0x22 H) 설정 명령을 지정합니다.
  • 두 번째 바이트는 페이지 시작 주소를 지정하고 세 번째 바이트는 페이지 끝 주소입니다.
  • 이 명령은 또한 페이지 시작 주소에 대한 페이지 주소 포인터를 설정합니다.

 

열 및 행 주소 포인터 이동의 예 :

 

다음 예에서는 수평 주소 지정 모드가 사용됩니다. 열 시작 주소는 2로 설정되고 열 끝 주소는 125로 설정됩니다.

 

  • 페이지 시작 주소는 1로 설정되고 끝 주소는 6으로 설정됩니다.이 경우 그래픽 표시 데이터 RAM 열 액세스 가능 범위는 열 2에서 열 125까지, 페이지 1에서 페이지 6까지입니다.
  • 또한 열 주소 포인터는 2로 설정되고 페이지 주소 포인터는 1로 설정됩니다. 데이터의 한 픽셀 읽기 / 쓰기가 끝나면 열 주소가 자동으로 1 씩 증가하여 다음 읽기 / 쓰기 작업을 위해 다음 RAM 위치에 액세스합니다. .
  • 열 주소 포인터가 끝 열 125에 대한 액세스를 완료 할 때마다 열 2로 다시 재설정되고 페이지 주소가 자동으로 1 씩 증가합니다.
  • 끝 페이지 6 및 끝 열 125 RAM 위치에 액세스하는 동안 페이지 주소는 다시 1로 재설정되고 열 주소는 다시 2로 재설정됩니다.

 

선택적 주소 지정 열 및 행 주소 포인터 이동의 예

 

대비 제어 설정 (0x81 H) :

  • 이 명령은 디스플레이의 대비 설정을 설정합니다. 이 칩에는 00h에서 FF H까지 256 개의 콘트라스트 스텝이 있습니다. 콘트라스트 스텝 값이 증가하면 세그먼트 출력 전류가 증가합니다.

 

사전 충전 기간 설정 (0xD9 H) :

  • 이 명령은 사전 충전 기간을 설정하는 데 사용됩니다. 간격은 DCLK 수로 계산되며 여기서 RESET은 2 DCLK와 같습니다.

 

VCOMH 선택 해제 수준 설정 (0xDB H) :

  • 이 명령은 VCOMH 레귤레이터 출력을 조정합니다.

 

전체 디스플레이 (0xA4 H / 0xA5 H) :

  • A4 h 명령은 전체 디스플레이 "ON"단계에서 디스플레이를 다시 시작합니다.
  • A5 h 명령은 디스플레이 데이터 RAM의 내용에 관계없이 전체 디스플레이를 "ON"으로 만듭니다.

 

일반 / 반전 디스플레이 설정 (0xA6h / 0xA7h) :

  • A6 h 명령은 일반 표시 용입니다.
  • A7 h 명령은 반전 표시 용입니다.

 

디스플레이 설정 / 해제 (0xAE H / 0xAF H) :

  • AE h : 디스플레이를 OFF로 설정합니다.
  • AF h : 디스플레이 켜기

 

참고 : 선택 취소하지 않으면 가비지 값을 인쇄 할 수 있으므로 OLED 디스플레이를 지 웁니다.

 

경고:

  1. 각 SCL 펄스 동안 전송되는 데이터 비트는 클럭 펄스의 "HIGH"기간 내에서 안정적인 상태를 유지해야합니다.
  2. 시작 또는 중지 조건을 제외하고 데이터 라인은 SCL이 LOW 일 때만 전환 될 수 있습니다.
  3. 데이터 라인 (SDA)과 클록 라인 (SCL)은 모두 외부 저항에 의해 풀업되어야합니다. 

 

 

참고

1. 번역하기 전 원문자료 

 

 

 

 

 

 

 

반응형