2 분 소요

6. 1.5 inch OLED

image
제품 정보: https://www.waveshare.com/1.5inch-oled-module.htm
판매 링크: https://www.eleparts.co.kr/goods/view?no=5980657

  • 이번 포스트에서는 Waveshare 사에서 판매하는 1.5 inch OLED 디스플레이 모듈을 사용해 보려 한다.
    image
  • 이 OLED 모듈은 SSD1327 칩셋이 들어가 있으며, 128 x 128 Pixel의 4 Bits(16) Gray Scale을 표시할 수 있다.
  • 통신 방식은 SPI와 I2C 두 가지 방식을 지원하며, 0 Ω 저항을 이용하여 선택할 수 있다.
    우리는 SPI 통신을 이용할 것이다. (SPI가 훨씬 빠름)
  • pinmap은 위 사진과 같이 전원(VCC, GND)을 제외하고 5개의 신호선이 사용된다.
  • 제품에 포함된 커넥터 케이블의 반대편은 아두이노에서 많이 사용하는 점퍼 와이어 Female 타입으로 되어 있어서 우리가 사용하는 개발보드에 바로 연결이 용이하도록 되어있다.👍😁
    image

(1) 통신 Protocol

image

  • Pinmap에서 예상할 수 있듯이 통신은 Data를 보내기만 하는 단방향 통신이다. 즉, OLED 모듈 내부의 Register를 읽어볼 수는 없다.
  • 통신 패킷은 MOSI 신호를 DIN 핀에 연결하여 별도의 프로토콜이 없는 순수한 데이터를 그대로 보내면 된다.
    보내는 데이터는 두 가지 종류가 있는데, ① OLED 모듈의 기능을 설정하기 위한 Command Data와 ② 화면에 표시하기 위한 Pixel Data이다.
    데이터의 종류는 DC 핀을 이용하여 선택할 수 있다. (DC Pin Low: Command, DC Pin High: Pixel Data)

(2) Pixel Data 구조

  • Pixel Data를 저장하는 RAM을 GDDRAM(Graphic Display Data)라고 하는데, DC 핀을 High로 하여 데이터를 쓸 수 있다.
  • GDDRAM의 구조는 다음과 같다.
    image
  • 한 Pixel당 4 bit 밝기 데이터를 갖기 때문에 한 Byte로 두 Pixel 데이터를 담을 수 있다.
  • 위 그림은 가장 기본 셋팅에서의 GDDRAM 구조이며, “Set Re-map” Command를 이용하여 다른 구조를 선택할 수 있다.
    image
  • 여기에서, 각 Bit의 기능은 다음과 같다.
  • A[0] = Column Address Re-map
     GDDRAM Address의 증가 방향이 LCD Pixel 기준으로
     [왼쪽 -> 오른쪽] 이면 ‘0’
     [왼쪽 <- 오른쪽] 이면 ‘1’
  • A[1] = Nibble Re-map
     Pixel data 1 Byte 값에서,
     하위 4 bits(3 ~ 0)가 왼쪽, 상위 4 bits(7 ~ 4)가 오른쪽 Pixel 이면 ‘0’
     상위 4 bits(7 ~ 4)가 왼쪽, 하위 4 bits(3 ~ 0)가 오른쪽 Pixel 이면 ‘1’
  • A[2] = Horizontal/Vertical Address Increment
     Pixel을 가로 방향으로 채우면 ‘0’
     Pixel을 세로 방향으로 채우면 ‘1’
  • A[4] = COM Re-map
     GDDRAM 구조 그림에서, data의 line(가로 줄)을 COM 이라고 부르는데,
      data line을 COM119부터 채우도록 하는 기능이다.
     (이 기능을 왜 사용하는 지는 이해하지 못함)
     COM0 부터 시작하면 ‘0’
     COM119 부터 시작하면 ‘1’
  • A[6] = COM Split Odd Even
     COM 순서로 Pixel을 채울 때, 홀수 줄과 짝수줄을 나눠서 채울지, 순차적으로 채울 지 선택하는 기능이다.
     ‘0’ 이면,
      COM0 -> Pixel 1 line
      COM1 -> Pixel 3 line
        ⁝
      COM63 -> Pixel 127 line
      COM64 -> Pixel 2 line
      COM65 -> Pixel 4 line
        ⁝
      COM127 -> Pixel 128 line
     
     ‘1’ 이면,
      COM0 -> Pixel 1 line
      COM1 -> Pixel 2 line
        ⁝
      COM127 -> Pixel 128 line

(3) LCD 초기화 과정

통신 Protocol과 Data 구조를 알아봤으니 이제 실전에 돌입하자.

  • 우선 초기화를 해야한다. 초기화 순서는 메뉴얼 10.1.11.에 나와있다.
    image
  • 첫 번째로 Power supply setting인데, 주석을 보니 Fig 8-17을 참고하란다.
     (이번 포스팅은 그림이 많아서 엄청 길어지는구나😂)
    image
  • 그림은 복잡하지만, 다음과 같이 요약할 수 있다.
     1. 전원 인가 후 내부 MCU 전원($V_{CI}$)이 안정화 될 때까지 최소 1 msec 대기.
     2. Reset 핀을 t1 이상 Low로 유지 후 High
     3. Reset 핀 Low 순간부터 LCD Driving 전원($V_{CC}$)이 안정화 될 때까지 t2 시간 대기
     4. 0xAF Command(Display On) 전송
  • 추가적으로, 이후에 Display Mode를 정해줘야 한다.
    image
  • Normal Mode로 0xA4를 사용하면 된다.

이번 포스팅은 여기서 마무리 하고, 다음 포스팅에서 코드를 다뤄보도록 하겠다.😁

카테고리:

업데이트:

댓글남기기