지금까지는 OLED 디스플레이 모듈과의 통신을 위하여 SPI버스를 이용하였지만, 이번에는 I2C 버스를 이용하여 원하는 데이터를 출력하는 방법에 대해서 설명하도록 하겠다.SPI 버스 방식은 모두 7개의 연결이 필요하였지만, I2C버스의 경우 전원 포함 4개의 연결만 필요하므로 훨씬 단순한 연결방식이라고 할 수 있겠다.SSD1306 datasheet 문서에서 I2C 버스의 경우에 어떻게 데이터를 보내야하는지는 위의 그림과 같이 설명되어 있다.I2C의 경우 device address가 필요한데 SSD1306의 경우에는 0x3C의 값을 가진다. 필요한 경우 칩의 D/C# 핀을 1로 연결하면 device address가 0x3D로 변경할 수 있다. 이번 프로젝트에서 사용하는 모듈은 0x3C의 주소를 가지고 있다..
예전에 설명하였던 LCD1602나 LCD12864의 경우 글자를 출력하기 위한 기능이 디스플레이 내부에 들어 있었지만, SSD1306은 그런 기능이 없기 때문에 글자를 표현하기 위해서 직접 점들을 조합하여야 한다.이번 프로젝트에서는 5x7 픽셀의 점들을 이용하여 ASCII code를 출력하는 방법에 대해서 설명하겠다.예를 들어 대문자 'A'를 출력하기 위한 표시는 위의 그림과 같다. 가로로 5칸, 세로로 7칸의 조합으로 표시하며, 좌,우,상,하 글자와 구분하기 위하여 아래로 한칸, 오른쪽에 한줄의 공백을 두어야 한다. SSD1306 datasheet 문서를 보면 Page내에서 위쪽에 있는 점이 D0에 해당되고 가장 아래쪽에 있는 점이 D7에 해당된다. 그러므로, 'A'의 첫번째 행을 이진수로 표현하면 '..
앞의 글들을 통해서 기본적인 SSD1306의 동작 원리를 설명하였으므로 이를 응용하여 화면에 원하는 위치에 점 하나를 표시하는 방법을 구현해 보도록 하겠다.점 하나만을 표시하고자 할때 주의할 점은 위의 그림을 보면 알겠지만, column의 위치는 특정 SEG위치를 지정해 줌으로써 원하는 위치를 직접 지정해 줄수 있지만, row의 위치는 Page단위, 즉, 1바이트 크기만큼씩 지정해 줄수밖에 없는 구조에 대해 고려해 주어야 한다는 것이다.만약, 18번째 줄의 어딘가에 점하나를 출력하고자 원한다면, PAGE2의 D1비트의 값을 1로 설정해 주면 된다. 하지만 이때 나머지 비트값들은 그대로 유지해 주어야한다. 그렇지 않으면, D1비트값만 켜지고 나머지 줄들의 데이터는 모두 0이 되므로 꺼지게 되는 것이다.따라..
앞의 글에서 SSD1306의 세가지 출력모드(addressing mode)가 있다는 것을 간단히 언급하였고, 그중에서 page addressing mode에 대해서 설명하였다.이번에는 나머지 horizontal mode와 vertical mode에 대해서 설명하도록 하겠다. 두가지 모드는 출력되는 방향만 다를뿐 나머지 동작되는 방식은 완전히 동일하다.위의 그림에 Horizontal addressing mode일때의 동작되는 방식이 설명되어 있다.GDDRAM에 데이터를 쓰면 자동적으로 column이 증가되고, COL127에 데이터를 쓰면 RAM 주소가 COL0가 되고 PAGE는 다음 영역으로 자동으로 넘어가게 된다. 만약 가장 마지막 픽셀에 해당되는 RAM에 데이터가 쓰여지면 PAGE0, COL0의 주소로..
이전 글에서 MCU와 OLED 모듈간의 SPI 통신이 제대로 수행되는지 확인하는 방법에 대해서 설명하였다. 확인하는 방법으로 Entire Display ON 레지스터의 값을 1로 설정하여 전 영역의 픽셀들이 모두 켜보는것이었다.기본적인 통신이 잘 되는지 확인하였으면 정상적인 화면 출력을 위하여 Entire Display ON 레지스터의 값을 0으로 만들어 어떻게 화면 출력이 이루어지는지 확인해 보도록 하겠다. void ssd1306_init(void) { _delay_ms(1); ssd1306_reset(); ssd1306_chargepump_enable(true); ssd1306_entire_on(false); ssd1306_display_on(true); } 8번 줄에 보이는것처럼 ssd1306_en..
이번 프로젝트는 SSD1306를 사용한 OLED 128 x 64 디스플레이를 구동해 보는 방법을 구현해 보는것이다.먼저 해야할 일은 SSD1306 datasheet를 구해서 충분히 이해될 정도로 반복해서 읽어 보는것이다.위의 표에 설명되어 있는것처럼 SSD1306은 MCU와 연결하는 방법이 5가지가 있음을 알수 있다. 이번 프로젝트에서는 그 중에서 4-wire SPI 연결 방법을 이용하여 MCU와 연결하도록 하겠다.이 프로젝트에서는 위의 그림에 보이는 OLED 디스플레이 모듈을 사용하도록 하겠다. 그림을 보면 모두 7핀이 제공되는데, SDIN(MOSI), SCLK(SCK), CS, D/C 이렇게 4개의 신호선을 SPI 통신으로 연결하는데 사용하고, Reset 신호를 받아들이기 위한 RES핀과 전원 연결을..