티스토리 뷰
앞의 글에서 SSD1306의 세가지 출력모드(addressing mode)가 있다는 것을 간단히 언급하였고, 그중에서 page addressing mode에 대해서 설명하였다.
이번에는 나머지 horizontal mode와 vertical mode에 대해서 설명하도록 하겠다. 두가지 모드는 출력되는 방향만 다를뿐 나머지 동작되는 방식은 완전히 동일하다.
위의 그림에 Horizontal addressing mode일때의 동작되는 방식이 설명되어 있다.
GDDRAM에 데이터를 쓰면 자동적으로 column이 증가되고, COL127에 데이터를 쓰면 RAM 주소가 COL0가 되고 PAGE는 다음 영역으로 자동으로 넘어가게 된다. 만약 가장 마지막 픽셀에 해당되는 RAM에 데이터가 쓰여지면 PAGE0, COL0의 주소로 넘어가게 된다.
ssd1306_set_addr_mode()를 이용하여 addressing mode를 설정할 수 있게 하였다.
위의 코드를 이용하여 보드에서 실행 시켜 어떤 결과가 나오는지 확인해 보도록 하겠다.
위의 동영상에 나오는 것처럼 특정 RAM주소를 지정하지 않고 연속적으로 데이터를 써주면 미리 설정된 영역내에서 자동으로 다음 위치에서 데이터가 표시되는 것을 확인할 수 있다. Horizontal 모드로 설정하였기 때문에 가로 방향으로 데이터가 표시되고 마지막 column 이후 다음 page의 첫번째 위치에서 데이터가 표시된다.
위의 그림은 vertical addressing mode로 설정되었을 경우 GDDRAM에 데이터가 쓰여지게 되면 어떤 순서로 RAM주소가 변경되는지 설명하는 것이다. Page가 먼저 증가되고, page의 끝에 다다르면 첫번째 page로 변경되고 column의 위치가 다음을 가르키게 되는것을 볼 수 있다.
ssd1306_set_addr_mode()의 인자를 "VERTICAL"로 변경한 후 다시 실행시키고 결과를 확인해 본다.
RAM에 데이터를 쓰게 되면 page 번호가 자동으로 1씩 증가하기 때문에 위에서 아래로 쓰여진 데이터가 표시되고, 마지막 page에 데이터가 쓰여지게 되면 page0의 다음 column 주소에 데이터가 표시된다. 그냥 봤을때는 화면 전체가 왼쪽에서 오른쪽으로 채워지는것처럼 보이게 된다.
지금은 디폴트 값으로 전체 영역이 설정되어 있으므로 128x64개의 점을 표시하게 되어 있지만, 필요에 따라 영역의 크기를 조절할 수 있다.
Set column address 레지스터와 set page address 레지스터를 이용하여 column의 시작과 끝 영역, page의 시작과 끝 영역을 설정해 줄 수 있다.
ssd1306_set_page_addr()와 ssd1306_set_col_addr() 함수를 만들어 page 영역, column 영역을 지정해 줄수 있게 만들었다.
8번줄에 page영역을 2~5로 지정해 주고, 9번 줄에서 column 영역을 32~95를 지정해 주었다. 이렇게 설정하고 프로그램을 실행하면 다음과 같이 출력되는 것을 볼 수 있다.
위의 동영상에 보이는것처럼 지정해준 영역에 한해서 데이터가 업데이트 되는것을 확인할수 있다.
'프로젝트 > OLED12864' 카테고리의 다른 글
OLED 12864 - I2C (6) | 2018.03.10 |
---|---|
OLED 12864 - String(문자 출력) (6) | 2018.03.09 |
OLED 12864 - Draw Dot (0) | 2018.03.03 |
OLED 12864 - Page Addressing Mode (0) | 2018.03.01 |
OLED 12864 - SSD1306 (1) | 2018.02.10 |