상세 컨텐츠

본문 제목

[우당탕탕 OLED 드라이버 만들기] 2. 데이터 시트

우당탕탕 OLED 드라이버 만들기

by 전산거북이 2026. 5. 25. 16:06

본문


임베디드 프로그래밍을 하면서 가장 걱정이 되는 부분 중 하나가 아마 데이터 시트 읽는 부분이 아닐까 싶네요. 저도 그랬구요...

암튼 꽤 바쁜 일주일을 보냈습니다.

이제 막 선 연결을 끝낸 상태에서 "그럼 화면은 어떻게 띄우지!" 라는 걱정이 되었으니까요ㅋㅋㅋ

I2C 방식으로 연결된건 알겠는데, 그 다음은? 이라는 생각이 되더라구요.

 

그래서 대충 해결책!

일단 gpt한테 화면을 띄우는 코드를 부탁했습니다. 결과는?

대성공!!!

 

근데 이게 저희가 원하는건 아니죠? 저희는 단순히 흰 화면을 보는게 아니라 글씨를 띄우거나 하는걸 원하는거잖아요!

그래서 데이터시트와 이미 만들어진 코드를 보고 역으로 분석을 해 나갈 것입니다.

누가 가르쳐주는 사람이 없으니 이렇게라도 해야죠 뭐...ㅋㅋ

 

코드는 대충 이런식으로 생겼었습니다.

 31 void initOLED(int fd)
 32 {
 33     sendCommand(fd, 0xAE); // display off
 34
 35     sendCommand(fd, 0x20);
 36     sendCommand(fd, 0x00);
 37
 38     sendCommand(fd, 0xB0);
 39
 40     sendCommand(fd, 0xC0);
 41
 42     sendCommand(fd, 0x00);
 43     sendCommand(fd, 0x10);
 44
 45     sendCommand(fd, 0x40);
 46
 47     sendCommand(fd, 0x81);
 48     sendCommand(fd, 0xFF);
 49
 50     sendCommand(fd, 0xA0);
 51
 52     sendCommand(fd, 0xA6);
 53
 54     sendCommand(fd, 0xA8);
 55     sendCommand(fd, 0x3F);
 56
 57     sendCommand(fd, 0xA4);
 58
 59     sendCommand(fd, 0xD3);
 60     sendCommand(fd, 0x00);
 61
 62     sendCommand(fd, 0xD5);
 63     sendCommand(fd, 0xF0);
 64
 65     sendCommand(fd, 0xD9);
 66     sendCommand(fd, 0x22);
 67
 68     sendCommand(fd, 0xDA);
 69     sendCommand(fd, 0x12);
 70
 71     sendCommand(fd, 0xDB);
 72     sendCommand(fd, 0x20);
 73
 74     sendCommand(fd, 0x8D);
 75     sendCommand(fd, 0x14);
 76
 77     sendCommand(fd, 0xAF); // display on
 78 }

와우...

sendCommand()도 한 번 확인해볼까요?

 11 void sendCommand(int fd, uint8_t cmd)
 12 {
 13     uint8_t buffer[2];
 14
 15     buffer[0] = 0x00; // command mode
 16     buffer[1] = cmd;
 17
 18     write(fd, buffer, 2);
 19 }

 

음... 대충 살펴본 결과, sendCommand()는 cmd를 fd로 보내주는 것 같습니다.

그리고 보내지는 cmd는 0xDB, 0x81 ... 아이구야 머리가 아픕니다.

이게 뭔지 알기 위해서는 데이터시트가 필요합니다.

 

https://www.hpinfotech.ro/SSD1309.pdf

 

제가 참고한 데이터시트입니다.

제가 이해한 바로는, sendCommand()에 저 Hex값을 보내주면 값이 세팅된다는 것 같습니다.

예를 들어, sendCommand(fd, 0xAE) 이라고 하면 디스플레이를 모두 끄는거죠.

 

잠깐만, 생각을 잘 해보면, sendCommand()에서 file descriptor를 굳이 설정해줄 필요가 있을까요? 이 모든걸 Class 로 만든 다음 파일 디스크립터는 클래스에서 넘겨주기만 하면 되지 않을까요?

 

이건 다음번에 올려보도록 하겠습니다.

제가 설정한 세팅값까지 함께요ㅎㅎ

관련글 더보기

댓글 영역