제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환...

30
OLED를 이용한 디지털액자 만들기 Chapter. 15 Jaeheung, Lee HBE-MCU-Multi AVR

Transcript of 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환...

Page 1: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

OLED를이용한디지털액자만들기

Chapter. 15

Jaeheung, Lee

HBE-MCU-Multi AVR

Page 2: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

목차

1. OLED 모듈

2. OLED를 이용하여 디지털 액자 만들기

3. UART로 디지털 액자 사진 전송하기

Page 3: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

HBE-MCU-Multi로 배우는

마이크로컨트롤러(AVR편)

마이크로컨트롤러 기능

제 15장 OLED를 이용한 디지털액자 만들기

㈜ 한백전자 기술연구소

Page 4: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

1. OLED 모듈

2. OLED를 이용하여 디지털 액자 만들기

3. UART로 디지털 액자 사진 전송하기

OLED를 이용한 디지털액자 만들기

Page 5: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

OLED 모듈

¨ OLED(Organic Light-Emitting Diodes)

¤ 유기 기판에 적, 녹, 청색 등의 빛을 내는 유기화합물을 사용하여 자체 발광시키는 디스플레이

¤ 유기물을 발광층으로 사용

¤ OLED는 유기물 층과 음극과 양극으로 구성

¤ 장점

n 디스플레이의 백발광 특성으로 인해 시야각을 갖지 않으며 시인성이 우수

n 액정(Liquid Crystal)을 사용하지 않기 때문에 응답속도가 빠름

n 소비전력이 작음

n 자체발광 등의 장점을 가지고 있기 때문에 백라이트가 필요 없음

n 경량, 박형으로 제작이 가능함.

n 저온에서 제작 가능하며, 제종 공정이 간단하여 저 가격화가 가능함

Page 6: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

OLED 모듈

¨ HBE-MCU-Multi 의 OLED 모듈

¤ BL128128A OLED 모듈을 사용

n 128 * 128 Pixel을 Display

n 16비트 Color

n Text LCD와 유사한 인터페이스

OLED 모듈 핀 설명

Page 7: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

OLED 모듈

¨ OLED 모듈¤ OLED모듈을 제어하기

위해서는 각 제어신호의 동작 타이밍을 고려하여 펄스 타이밍을 설계하여야 한다.

¤ OLED 모듈은 하나의 Command 및 Data를전송하는 전송 싸이클이 최대 3MHz로 제한되어 있으며, 각 펄스의순서가 정해져 있다.

OLED 모듈 신호 타이밍도

Page 8: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 실습 개요

¤ OLED 모듈을 외부 메모리 인터페이스에 연결하고, 이를 이용하여 디지털 액자 기능을 구현한다.

¤ 배경이 되는 사각형(내부 빨간색, 외각선 녹색)을 먼저 그리고, 미리 변환된 RGB 이미지를 OLED에 출력하도록 한다.

¨ 실습 목표

¤ OLED 작동 원리 이해

¤ ATmega128를 이용한 OLED 구동 방법 습득

¤ 디지털 액자 기능 구현 방법 습득

Page 9: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 사용 모듈 : MCU 모듈, OLED모듈

OLED 모듈 Signal

MCU 모듈 OLED 모듈 포트 A, G

OLED 모듈에 연결

Page 10: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 모듈 결선 방법

MCU 모듈 포트 G의 PG0를 OLED 모듈의CS에, PG1을 RST에, PG2를 DC에, PG3를WN에, 그리고 PG4는 RN에 연결

MCU 모듈 포트 A의 PA0 ~PA7을 8핀 케이블로 OLED 모듈의 D0 ~ D7까지 연결

Page 11: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 구동 프로그램 : 사전지식

¤ OLED 라이브러리 함수(oled.c 파일에 정의)

initOLED(void) : OLED 모듈을 초기화 한다.write_cmd(unsigned char) : OLED 모듈에 명령을 1바이트 전달한다.write_data(unsigned char) : OLED 모듈에 데이터를 1바이트 전달한다.PutPixel(unsigned char x, unsigned char y, unsigned int color) :

OLED의 x,y 위치에 color라는 색깔로 점을 하나 찍는다.Draw_Line(unsigned char x1, unsigned char y1, unsigned char x2, unsigned char y2, unsigned int Color) :

x1, y1 점으로부터 x2, y2 까지의 직선을 그린다. 이때, 직선의 색깔은 Color로 한다.

Draw_Rectangle(unsigned char x, unsigned char y, unsigned char width, unsigned char height , unsigned char inFill, unsigned int inColor, unsigned int outColor) :

x, y 점으로부터 width, height 크기의 4각형을 그린다. 이때, 윤곽선은 outColor로 그리고, 만약 inFill이 1이면 내부를 inColor로 칠한다.

Print_text(unsigned char x, unsigned char y, char *text, unsigned int color) : x, y 위치에 *text 문자열을 출력한다. 이때, 문자의 색깔은 color 이다.

Page 12: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 구동 프로그램 : 사전지식

¤ oled.h : oled.c의 헤더 파일

//---------------------------------------//

// OLED Interface

//---------------------------------------//

#define CS_OLED 0 // OLED CS

#define RESETPIN_OLED 1

#define D_C 2

#define WN_OLED 3 // OLED WN : R/W#(WR#)

#define RN_OLED 4 // OLED RN : E(RD#)

#define OLED_CTRL_PORT PORTG

#define OLED_DATABUS PORTA

#define OLED_CTRL_DDR DDRG

#define OLED_DATA_DDR DDRA

Page 13: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 구동 프로그램 : 사전지식¤ OLED 화면 좌표 와 메모리 저장

n 화소, 혹은 Pixel(Picture Element) : 화면상의 한 점

n OLED의 화면 좌표

n 한장의 사진을 OLED에 꽉차게 출력하기 위해서는 128*128*16bit의 메모리가 필요.

(0,0) X

Y

(127,127)

(127,0)

(0,127)

Page 14: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 구동 프로그램 : 사전지식¤ 사진의 메모리 저장

n ATmega128등 대부분의 MCU는 작은 RAM size를 갖고 있기 때문에 그림이나 폰트등은 RAM에 정의할 수가 없다.

n 변수를 할당할 때 일반적으로 RAM에 할당되지만 변하지 않는 변수는 Flash ROM에 할당할 필요가 생긴다.

n Flash ROM을 변하지 않는 변수의 저장 공간으로 사용하기 위해, WINAVR에서는 pgmspace function을 제공

n pgmspace 사용법

n 변수선언 : prog_uchar lstar[5000]

n 변수 읽어오는 법 : buf= pgm_read_byte(lstar);

Page 15: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 구동 프로그램 : 소스분석¤ lstar.h

const prog_uint16_t lstar0[]={

0x1082, 0x862, 0x841, 0x841, 0x841, 0x841,

… 중략

}

const prog_uint16_t lstar1[]={

0xcf1f, 0xcf1f, 0xcf1f, 0xcf1f, 0xcf1e, 0xcf1e,

… 중략

}

Page 16: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 구동 프로그램 : 소스분석¤ OLED_VIEW.c

1) #include<avr/io.h>

#include<util/delay.h>

#include"oled.h" //oled 헤더

#include <avr/pgmspace.h> /* 데이터를 프로그램 롬에 저장하기 위한

read/write 함수, 변수 타입 정의 */

2) #include "lstar.h" //사용자가 변환한 BMP 배열

unsigned int *Image0 = lstar0; //사용자가 만든 파일명이 exam.c, exam.h인 경우

unsigned int *Image1 = lstar1; /* 옆의 lstar0, lstar1 대신 exam0 ,exam1로

바꾸게 되면 사용자가 만든 그림이 나오게 된다. */

#define DELAY_MS(x) {static unsigned int _i; \

for(_i=0;_i<x;_i++) \

_delay_ms(1); }

3) #define RGB565(r,g,b) ( (((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3) )

// RGB 24비트 값을 16비트로 변환해주는 매크로 함수

Page 17: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

4) void OLED_DrawImage(unsigned int * Image0,unsigned int * Image1);

// 화면에 이미지를 그려넣는다.

int main(){

5) initOLED(); //OLED 초기화

while(1){

6) Draw_Rectanle(0,0,128,128,1,RGB565(0,255,0),RGB565(255,0,0));

//배경 사각형을 출력

DELAY_MS(1000); //1000ms단위의 딜레이 간격

7) OLED_DrawImage(Image0,Image1); /* 변환해서 저장해둔 BMP->RGB 파일을

화면에 출력 */

DELAY_MS(1000); //1000ms단위의 딜레이 간격

}

return 0;

}

Page 18: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

8) void OLED_DrawImage(u16 * Image0,u16 * Image1){

u16* ptr; // 그림 배열 포인터 저장변수

u08 x,y,ye,xe; // x, y 값 저장

u08 width,height; // 그림 높이, 넓이

u16 buf;

width = 128;

height= 128;

x = 0;

xe = width;

y = (height/2);

ye = height;

ptr = Image1; // 그림 배열 포인터 저장

while(y<ye){

while(x<xe){

buf=pgm_read_word_near(ptr++);

PutPixel(x++,ye-1,buf);

}

Page 19: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

8) x=0;

ye--;

}

x = 0;

xe = width;

y = 0;

ye = (height/2);

ptr = Image2; // 그림 배열 포인터 저장

while(y<ye){

while(x<xe){

buf=pgm_read_word_near(ptr++);

PutPixel(x++,ye-1,buf);

}

x=0;

ye--;

}

}

Page 20: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 23 : OLED를 이용한 디지털 액자

¨ 실행 결과

Page 21: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

¨ 실습 개요

¤ 앞의 예제에서 만든 디지털 액자에 UART를 통한 이미지 전송과, 문자 출력 기능을 추가한다.

¤ PC등의 외부 장치에서 UART를 통해 출력할 이미지를 전송받을 수있다.

¤ 폰트 기능을 추가함으로써, OLED 화면에 글자를 써 넣을 수 있도록한다

¨ 실습 목표

¤ UART를 통한 데이터 전송 방법 습득

¤ OLED에 폰트 기능 구현 방법 습득

Page 22: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

¨ 사용 모듈 : MCU 모듈, OLED모듈, UART 모듈

OLED 모듈 Signal

MCU 모듈 OLED 모듈 포트 A, G OLED 모듈에 연결

MCU 모듈 포트 E

UART 모듈 Signal

UART 모듈

USB-to-Serial 포트 RS 232포트

Page 23: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

¨ 모듈 결선 방법

MCU 모듈 포트 A의 PA0 ~PA7을 8핀 케이블로 OLED 모듈의 D0 ~ D7까지 연결

MCU 모듈 포트 E의 PE0는 UART 모듈의 RXD0에, PE1은 TXD0에연결한다

MCU 모듈 포트 G의 PG0를 OLED 모듈의 CS에, PG1을 RST에, PG2를 DC에, PG3를 WN에, 그리고 PG4는 RN에 연결

Page 24: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

¨ 구동 프로그램 : 사전지식¤ Print_text(unsigned char x, unsigned char y, char *text, unsigned i

nt color) 함수

n x, y 위치에 color 색깔의 *text 문자열을 출력 개요

n Print_text 함수를 사용하기 위해서는 폰트 데이터가 있어야 하는데, Font.c와font.h는 문자열 출력에 사용될 폰트를 담고 있다.

¤ UART를 통한 이미지 전송

n 8장에서 사용하였던 UART용 송신/수신 함수 getch()와 putch() 사용

n getch_u0()와 putch_u0()로 만들어 avr_lib.c에 포함시켜 놓았음.

n 수신 데이터의 형식은 2바이트를 하나의 화소 데이터로 간주

n 먼저 도착한 바이트가 하위 바이트가 되고, 나중에 도착한 바이트가 상위 바이트가 된다.

n PC에서는 UART통신으로 그림파일을 전송하는 프로그램이 필요.(한백전자 홈페이지에서 다운받을 수 있음)

Page 25: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

¨ 구동 프로그램 : 소스분석¤ OLED_UART.c

1) #include<avr/io.h>

#include<util/delay.h>

#include"oled.h" //oled 헤더

#include <avr/pgmspace.h> /* 데이터를 플래쉬메모리에 대한 read/write

함수 , 변수 타입 정의 */

#define DELAY_MS(x) {static unsigned int _i; \

for(_i=0;_i<x;_i++) \

_delay_ms(1); }

#define RGB565(r,g,b) ( (((r) >> 3) << 11) | (((g) >> 2) << 5) | ((b) >> 3) )

char buf[2][10]={"Please","Wait~"};2) void OLED_DrawImage_4Uart(void); // UART로 이미지를 받아 OLED에 출력

int main(){

Page 26: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

3) DDRE = 0xfe; //Rx(입력 0), Tx(출력 1)

UCSR0A = 0x00;

UCSR0B = 0x18; // Rx, Tx enable

UCSR0C = 0x06; // 비동기 방식, No Parity bit, 1 Stop bit

UBRR0H = 0x00;

UBRR0L = 3; //7.3728 MHz -> 115200 bps

/* UBRRnH/L레지스터는 16비트 중에서 12비트만 사용하여 USARTn모듈의 송수신 속도를 설정 */

4) initOLED(); //OLED 초기화

Draw_Rectanle(0,0,128,128,1,RGB565(100,100,100),RGB565(200,50,50));

5) Print_text(30,30,buf[0],YELLOW); //글자 출력 (빨간 바탕에 노란 글씨)

Print_text(40,60,buf[1],YELLOW);

6) while(1){

OLED_DrawImage_4Uart(); //시리얼 통신으로 데이터를 받아 OLED에 출력

DELAY_MS(10); //10ms의 딜레이 간격

}

return 0;

}

Page 27: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

7) void OLED_DrawImage_4Uart(void) {

u08 x,y,xe,ye; // x, y 값 저장

u08 width,height; // 그림 높이, 넓이

u16 buf;

width = 128;

height= 128;

u08 uartData1=0;

u08 uartData2=0;

x = 0;

xe = width;

y = 0;

ye = height;

Page 28: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

7) while(y<ye){

while(x<xe){

buf=0;

uartData1=0;

uartData1=getch_u0();

if(uartData1=='E' && uartData2=='E')

return;

uartData2=0;

uartData2=getch_u0();

if(uartData1=='E' && uartData2=='E')

return;

buf=((uartData2<<8) |uartData1);

PutPixel(x++,ye,buf);

}

x=0;

ye--;

}

}

Page 29: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

¨ 실행 결과

UART통신으로 그림파일을 전송하는 프로그램

Page 30: 제15장 OLED를 이용한 디지털 액자 (HBE-MCU-Multi AVR).ppt [호환 …artoa.hanbat.ac.kr/lecture_data/microprocessor/2014/제15... · 2014-03-14 · 이때, 직선의색깔은Color로한다.

실습 24 : UART로 디지털액자 사진 전송

¨ 실행 결과