슬라이드 1

Similar documents
<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

Microsoft PowerPoint - es-arduino-lecture-03

Motor

PowerPoint 프레젠테이션

untitled

untitled

SRC PLUS 제어기 MANUAL

hd1300_k_v1r2_Final_.PDF

RVC Robot Vaccum Cleaner

(Asynchronous Mode) ( 1, 5~8, 1~2) & (Parity) 1 ; * S erial Port (BIOS INT 14H) - 1 -

슬라이드 1

MicrocontrollerAcademy_Lab_ST_040709

À̵¿·Îº¿ÀÇ ÀÎÅͳݱâ¹Ý ¿ø°ÝÁ¦¾î½Ã ½Ã°£Áö¿¬¿¡_.hwp

// 변수선언 unsigned char i; unsigned char FONT[]={0xC0, 0xF9, 0xA4, 0xB0, 0x99, 0x92, 0x82, 0xD8, 0x80, 0x98}; //PORTA 를출력으로설정하고초기값은모두 0 PORTA = 0x00; DD

[8051] 강의자료.PDF

<4D F736F F F696E74202D203131C1D6C2F7202D E6FB8A620C0CCBFEBC7D120C4B3B8AFC5CD204C43442C C1A6BEEEC7CFB1E2205

PowerChute Personal Edition v3.1.0 에이전트 사용 설명서

untitled

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A638C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

T100MD+

한글사용설명서

歯FDA6000COP.PDF

서보교육자료배포용.ppt

API 매뉴얼

IoT FND8 7-SEGMENT api

Orcad Capture 9.x

(SW3704) Gingerbread Source Build & Working Guide

PowerPoint 프레젠테이션

ºÎ·ÏB

예제 1.1 ( 관계연산자 ) >> A=1:9, B=9-A A = B = >> tf = A>4 % 4 보다큰 A 의원소들을찾을경우 tf = >> tf = (A==B) % A

step 1-1

Remote UI Guide

ez-shv manual

0.1-6

Microsoft Word - ASG AT90CAN128 모듈.doc

PowerPoint 프레젠테이션

KR

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A636C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

LCD Display

Smart Power Scope Release Informations.pages

Microsoft Word ARM_ver2_0a.docx

Microsoft Word - Automap3

MR-3000A-MAN.hwp

슬라이드 1

MODBUS SERVO DRIVER( FDA7000 Series ) STANDARD PROTOCOL (Ver 1.00) 1

ez-md+_manual01

슬라이드 1

PowerPoint 프레젠테이션

PowerPoint 프레젠테이션

歯superimp.PDF

[ 융합과학 ] 과학고 R&E 결과보고서 뇌파를이용한곤충제어 연구기간 : ~ 연구책임자 : 최홍수 ( 대구경북과학기술원 ) 지도교사 : 박경희 ( 부산일과학고 ) 참여학생 : 김남호 ( 부산일과학고 ) 안진웅 ( 부산일과학고 )

<4D F736F F F696E74202D20BBB7BBB7C7D15F FBEDFB0A3B1B3C0B05FC1A634C0CFC2F72E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - [2009] 02.pptx

Chapter 4. LISTS

BY-FDP-4-70.hwp

10X56_NWG_KOR.indd

PowerPoint 프레젠테이션

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

강의10

슬라이드 제목 없음

CANTUS Evaluation Board Ap. Note

Columns 8 through while expression {commands} 예제 1.2 (While 반복문의이용 ) >> num=0

슬라이드 1

UI TASK & KEY EVENT

6주차.key

PowerPoint 프레젠테이션

DE1-SoC Board

Microsoft Word - Installation and User Manual_CMD V2.2_.doc

CD-RW_Advanced.PDF

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202834C1D6C2F7207E2038C1D6C2F729>

CAN-fly Quick Manual

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

DTS-L300-V2 Specification Page 1 of 14 비접촉온도측정 원거리온도측정 High Accuracy Digital Interface : SPI Arduino UNO 예제코드제공 제품설명 DTS-L300-V2는접촉을하지않고원하는물체표면에온도를 50

CPX-E-SYS_BES_C_ _ k1

2주차: 입출력 제어 복습

목차 1. 제품 소개 특징 개요 Function table 기능 소개 Copy Compare Copy & Compare Erase

KEY 디바이스 드라이버

PowerPoint Presentation

lecture4(6.범용IO).hwp

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

DSP_MON 프로그램 메뉴얼

시프트 레지스터 Shift Resistor 자, 이제 LED MATRIX 8x8 Board를 마이크로컨트롤러에 연결된 3개의 선으 로 제어해 보자. 이는 마이크로컨트롤러의 포트를 확장함과 동시에 프로그램 으로 제어를 더 쉽게 한다는 장점이 있다. 물론 포트를 절약하게

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

2 / 26

KPS-19MA-1.hwp

untitled

K&R2 Reference Manual 번역본

API 매뉴얼

Microsoft Word - CL5000,5500_KOR_UM_ _.doc

Mango-AM335x LCD Type 커널 Module Parameter에서 변경하기

Microsoft PowerPoint - 30.ppt [호환 모드]

목차 BUG 문법에맞지않는질의문수행시, 에러메시지에질의문의일부만보여주는문제를수정합니다... 3 BUG ROUND, TRUNC 함수에서 DATE 포맷 IW 를추가지원합니다... 5 BUG ROLLUP/CUBE 절을포함하는질의는 SUBQUE

PowerPoint 프레젠테이션

Microsoft Word - AM-SLCD_시리얼 LCD_ 메뉴얼.doc

10주차.key

안전을 위한 주의사항 제품을 올바르게 사용하여 위험이나 재산상의 피해를 미리 막기 위한 내용이므로 반드시 지켜 주시기 바랍니다. 2 경고 설치 관련 지시사항을 위반했을 때 심각한 상해가 발생하거나 사망에 이를 가능성이 있는 경우 설치하기 전에 반드시 본 기기의 전원을

INDUCTION MOTOR 표지.gul

YD-3533.xls

Transcription:

임베디드시스템개론 : Arduino 활용 Lecture #5: Text LCD 출력하기 2012. 4. 6 by 김영주

강의목차 Text LCD 장치개요 간단한 Text LCD 출력테스트 Text LCD 인터페이스신호줄이기 아두이노라이브러리개요 LiquidCrystal 라이브러리 2

Text LCD 출력장치 (1) Text LCD 출력장치 ASCII 코드를입력받아영문자를출력하는장치주로 16x2 LCD 사용 -16문자 x 2 줄출력전력소모가적어임베디드시스템에서많이사용 3

Text LCD 출력장치 (2) Text LCD 내부모듈구조 LCD panel과제어기 (controller) 가하나의모듈로구성동작방식 데이터버스를통해제어기에명령과데이터를전송 제어기는명령에따라문자코드에해당하는글씨체를 LCD panel로출력 제어기는 LCD panel이계속출력상태를유지하도록제어 (Driving) 4

Text LCD 출력장치 (3) HD44780 의내부블록도 5

Text LCD 출력장치 (4) 내부레지스터 IR (Instruction Register) D.D.RAM과 C.G.RAM에대한주소정보또는클리어, 커서이동, 글자 on/off 등 LCD 제어에대한명령코드를입력받는 8-bit 레지스터 RS(Register Select) 신호가 L 일때에선택 DR(Data Register) D.D.RAM과 C.G.RAM에데이터를읽거나쓸때사용되는 8-bit 레지스터 RS 신호가 H 일때에선택 BF(Busy Flag) 연속적으로 LCD 모듈제어명령이입력될때에 LCD 모듈이처리할수있는지를나타내는상태표시 1-bit 플래그 IR 레지스터읽기를통해접근가능 AC(Address Counter) D.D.RAM과 C.G.RAM 의주소를지정할때사용현재문자가출력될위치 (cursor) 를의미함 6

Text LCD 출력장치 (5) 내부메모리 D.D.RAM(Display Data RAM) 8비트문자코드의디스플레이데이터를저장하는메모리최대용량은 80x8비트로 80문자를저장가능행별로 40 문자의데이터를저장 C.G.ROM(Character Generator ROM) ASCII 문자의글씨체정보를저장하고있는 ROM C.G.RAM(Character Generator RAM) 사용자정의글씨체를다운로드하여저장하는 RAM ASCII 문자이외의사용자정의문자를출력할때에사용 7

Text LCD 출력장치 (6) 외부인터페이스신호사양 8

Text LCD 출력장치 (7) Text LCD 동작명령과인터페이스신호 9

Text LCD 출력장치 (8) Text LCD 동작명령 10

Text LCD 출력장치 (9) Text LCD 문자출력 출력위치를고려하여 D.D.RAM의원하는위치를지정하고 (IR 레지스터 ), 출력할문자의 ASCII 코드를전송한다 (DR 레지스터 ). D.D.RAM은출력할문자들의코드값을저장하는버퍼역할을수행 최대 80개의문자를저장 (80 bytes), 라인별로 40 bytes씩분리하여할당예 : 16문자 2라인 LCD의경우 열위치 -> 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 1 행 -> 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 2 행 -> 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F AC 레지스터는현재문자를출력할 D.D.RAM 주소를저장, 자동증가 문자출력예 : 11 D.D.RAM 의주소 (Hex) 1행 16열에 A 출력 : 0x81 IR, 0x41 DR 2행 1열에 1 출력 : 0xC0 IR, 0x31 DR 1행 4열부터 abc 출력 : 0x83 IR, 0x61 DR, 0x62 DR, 0x63 DR

Text LCD 출력장치 (10) 사용자정의문자출력하기 1. 사용자정의문자패턴의크기 5x7 8 바이트정보로표현 2. IR 레지스터에 C.G.RAM 주소설정 3. DR 레지스터에문자패턴정보 1 바이트설정 4. 8 바이트정보입력이완료될때까지 2, 3 번과정반복 5. D.D.RAM에출력하고자하는사용자정의문자의코드 (0x00~ 0x07) 을설정 6. 사용자정의문자출력 12

Text LCD 출력장치 (11) Text LCD 의초기화과정 Function Set( 이진수 :001x xx00). Display ON/OFF Control(0000 1xxx) Setting. Entry Mode Set(0000 01xx). D.D.RAM 주소 Setting. 문자데이터를연속으로보낸다 13

Text LCD 출력장치 (12) Text LCD 제어신호타이밍 다음동작명령을실행하려면 BF(Busy Flag) 가 0 이될때까지대기 데이터 I/O 를위한파형형태 : E 신호스트로브 HIGH 구간은 0.5[usec] 이상유지 1 2 4 3 14

Text LCD 간단출력테스트 (1) 실험개요 Arduino-Mega 에 Text LCD 장치를연결하여테스트문장을출력한다. 사전요구사항 Text LCD 장치의인터페이스신호규격을정확히이해한다. Text LCD 장치에서의문자출력방법을이해한다. Text LCD 장치의제어신호의타이밍도를이해한다. Arduino-Mega와 Text LCD 장치의연결방법을정한다. 15

Text LCD 간단출력테스트 (2) 회로도및회로구성 회로도 : 16

Text LCD 간단출력테스트 (3) 회로도및회로구성 회로구성 : 17

Text LCD 간단출력테스트 (4) 아두이노프로그램 : Hello, World! 출력프로그램 uint8_t _rs_pin; // LOW: command. HIGH: character. uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. uint8_t _enable_pin; // activated by a HIGH pulse. uint8_t _data_pins[8]; void lcd_init(int rs, int rw, int enable, int* data, int data_cnt) { int i; _rs_pin = rs; _rw_pin = rw; _enable_pin = enable; for (i=0; i<data_cnt; i++) _data_pins[i] = data[i]; while (i < 8) { _data_pins[i] = 0; i++; pinmode(_rs_pin, OUTPUT); pinmode(_rw_pin, OUTPUT); pinmode(_enable_pin, OUTPUT); 18 // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! // according to datasheet, we need at least 40ms after power rises above 2.7V // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 delaymicroseconds(50000);

Text LCD 간단출력테스트 (5) 아두이노프로그램 ( 계속 ) 19 // Now we pull both RS and R/W low to begin commands digitalwrite(_rs_pin, LOW); digitalwrite(_rw_pin, LOW); digitalwrite(_enable_pin, LOW); // Send function set command sequence lcd_command(0x20 0x10 0x08); delaymicroseconds(4500); // wait more than 4.1ms // second try lcd_command(0x20 0x10 0x08); delaymicroseconds(150); // third go lcd_command(0x20 0x10 0x08); // finally, set # lines, font size, etc. lcd_command(0x20 0x10 0x08); // turn the display on with no cursor or blinking default lcd_command(0x08 0x04); // clear it off lcd_command(0x01); // clear display, set cursor position to zero delaymicroseconds(2000); // this command takes a long time!

Text LCD 간단출력테스트 (6) 아두이노프로그램 ( 계속 ) // Initialize to default text direction (for romance languages) lcd_command(0x04 0x02); delaymicroseconds(2000); // this command takes a long time! void lcd_print(char *str) { while (*str!= NULL) { lcd_data(*str); str++; void lcd_command(uint8_t value) { lcd_send(value, LOW); void lcd_data(uint8_t value) { lcd_send(value, HIGH); void lcd_send(uint8_t value, uint8_t mode) { digitalwrite(_rs_pin, mode); digitalwrite(_rw_pin, LOW); 20 lcd_write8bits(value);

Text LCD 간단출력테스트 (7) 아두이노프로그램 ( 계속 ) void lcd_pulseenable(void) { digitalwrite(_enable_pin, LOW); delaymicroseconds(1); digitalwrite(_enable_pin, HIGH); delaymicroseconds(1); // enable pulse must be >450ns digitalwrite(_enable_pin, LOW); delaymicroseconds(100); // commands need > 37us to settle void lcd_write4bits(uint8_t value) { for (int i = 0; i < 4; i++) { pinmode(_data_pins[i], OUTPUT); digitalwrite(_data_pins[i], (value >> i) & 0x01); lcd_pulseenable(); void lcd_write8bits(uint8_t value) { for (int i = 0; i < 8; i++) { pinmode(_data_pins[i], OUTPUT); digitalwrite(_data_pins[i], (value >> i) & 0x01); 21 lcd_pulseenable();

Text LCD 간단출력테스트 (8) 아두이노프로그램 ( 계속 ) void setup() { int d[8] = { 26, 27, 28, 29, 30, 31, 32, 33 ; lcd_init(22, 23, 24, d, 8); lcd_print("hello, World!..."); void loop() { // display-on cursor-on blink-off lcd_command(0x08 0x04 0x02); delay(5000); // display-on cursor-on blink-on lcd_command(0x08 0x04 0x02 0x01); delay(5000); // display-on cursor-off blink-off lcd_command(0x08 0x04); delay(5000); 22

Text LCD 간단출력테스트 (9) 실험결과 Text LCD 장치에출력되는내용이좌또는우로이동 ( 흐름 ) 하도록수정하여보아라. 23

Text LCD 간단출력테스트 (10) 실험개선 Text LCD 장치의인터페이스신호를줄이는방법은? 4-bit data 통신모드사용출력전용동작지정 24

Text LCD 의 Nibble Interface Mode (1) 실험개요 Text LCD 장치의 Nibble 데이터인터페이스모드를사용하여인터페이스신호수를줄이도록한다. 사전요구사항 25 회로구성은앞의실험과동일하나인터페이스신호연결은다음과같은사항이바뀐다. Text LCD Arduino Mega --------------------------------------------------------------------- RS 22 pin RW GND (Write Only) Enable 24 pin d4 30 pin d5 31 pin d6 32 pin d7 33 pin

Text LCD 의 Nibble Interface Mode (2) 사전요구사항 ( 계속 ) Text LCD 장치는데이터인터페이스모드에따라초기화과정이달라진다. 데이터인터페이스모드가 Nibble 모드인경우, 명령이나데이터를 4-bit 씩 2 번에나누어전송하여야한다. 26

Text LCD 의 Nibble Interface Mode (3) 아두이노프로그램 : Hello, World! 출력프로그램수정 uint8_t _rs_pin; // LOW: command. HIGH: character. uint8_t _rw_pin; // LOW: write to LCD. HIGH: read from LCD. uint8_t _enable_pin; // activated by a HIGH pulse. uint8_t _data_pins[8]; #define BYTE_MODE 0 #define NIBBLE_MODE 1 uint8_t _bit_if_mode = BYTE_MODE; void lcd_init(int rs, int rw, int enable, int* data, int data_cnt) { int i; uint8_t cmd; _rs_pin = rs; _rw_pin = rw; _enable_pin = enable; for (i=0; i<data_cnt; i++) _data_pins[i] = data[i]; while (i < 8) { _data_pins[i] = 0; i++; 27 if (data_cnt < 8) _bit_if_mode = NIBBLE_MODE;

Text LCD 의 Nibble Interface Mode (4) 아두이노프로그램 ( 계속 ) pinmode(_rs_pin, OUTPUT); // pinmode(_rw_pin, OUTPUT); pinmode(_enable_pin, OUTPUT); // SEE PAGE 45/46 FOR INITIALIZATION SPECIFICATION! // according to datasheet, we need at least 40ms after power rises above 2.7V // before sending commands. Arduino can turn on way befer 4.5V so we'll wait 50 delaymicroseconds(50000); // Now we pull both RS and R/W low to begin commands digitalwrite(_rs_pin, LOW); // digitalwrite(_rw_pin, LOW); digitalwrite(_enable_pin, LOW); if (_bit_if_mode == NIBBLE_MODE) { // we start in 8bit mode, try to set 4 bit mode lcd_write4bits(0x03); delaymicroseconds(4500); // wait min 4.1ms // second try lcd_write4bits(0x03); delaymicroseconds(4500); // wait min 4.1ms 28 // third go! lcd_write4bits(0x03); delaymicroseconds(150);

Text LCD 의 Nibble Interface Mode (5) 아두이노프로그램 ( 계속 ) // finally, set to 4-bit interface lcd_write4bits(0x02); cmd = 0x20 0x08; else { // Send function set command sequence cmd = 0x20; // function set command cmd = (0x10 0x08); // 8bit I/F & 2-line & 5x8 font lcd_command(cmd); delaymicroseconds(4500); // wait more than 4.1ms // second try lcd_command(cmd); delaymicroseconds(150); // third go lcd_command(cmd); 29 // finally, set # lines, font size, etc. lcd_command(cmd); : : :

Text LCD 의 Nibble Interface Mode (6) 아두이노프로그램 ( 계속 ) : : void lcd_send(uint8_t value, uint8_t mode) { digitalwrite(_rs_pin, mode); // digitalwrite(_rw_pin, LOW); if (_bit_if_mode == BYTE_MODE) { lcd_write8bits(value); else { lcd_write4bits(value>>4); lcd_write4bits(value); : : 30

Text LCD 의 Nibble Interface Mode (7) 아두이노프로그램 ( 계속 ) : : : void setup() { // int d1[8] = { 26, 27, 28, 29, 30, 31, 32, 33 ; int d2[4] = { 30, 31, 32, 33 ; // lcd_init(22, 23, 24, d1, 8); lcd_init(22, 23, 24, d2, 4); lcd_print("hello, World!..."); : : 31

Text LCD 의 Nibble Interface Mode (8) 실험결과및개선 출력속도에는차이가있는가? 32

아두이노라이브러리 (1) 아두이노라이브러리 33 빠른프로토타이핑 (Prototyping) 을지원하기위해일반적으로많이사용하는장치에대한인터페이스프로그램을라이브러리로제공 http://arduino.cc/en/reference/libraries 아두이노표준라이브러리 : EEPROM - reading and writing to "permanent" storage Ethernet - for connecting to the internet using the Arduino Ethernet Shield Firmata - for communicating with applications on the computer using a standard serial protocol. LiquidCrystal - for controlling liquid crystal displays (LCDs) SD - for reading and writing SD cards Servo - for controlling servo motors SPI - for communicating with devices using the Serial Peripheral Interface (SPI) Bus SoftwareSerial - for serial communication on any digital pins Stepper - for controlling stepper motors Wire - Two Wire Interface (TWI/I2C) for sending and receiving data over a net of devices or sensors.

아두이노라이브러리 (2) 아두이노라이브러리 ( 계속 ) 라이브러리는예제프로그램을같이제공하여프로그램작성시에참고하도록함. 표준라이브러리이외의추가적인라이브러리는아두이노사이트에서확인할수있으며, 라이브러리제공사이트에다운받아설치하여사용할수있다. 34

아두이노라이브러리 (3) LyquidCrystal 라이브러리 Text LCD 장치를지원하는아두이노표준라이브러리 Hitachi HD44780 (or a compatible) chipset 장착 LCD 제어 4- or 8-bit 데이터인터페이스모드지원 주요함수 : LiquidCrystal(), begin(), clear(), home(), setcursor(), write(), print(), cursor(), nocursor(), blink(), noblink(), display(), nodisplay(), scrolldisplayleft(), scrolldisplayright(), autoscroll(), noautoscroll(), lefttoright(), righttoleft(), createchar() 35

아두이노라이브러리 (4) LyquidCrystal 라이브러리예제 : HelloWorld 36 // include the library code: #include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins LiquidCrystal lcd(12, 11, 5, 4, 3, 2); void setup() { // set up the LCD's number of columns and rows: lcd.begin(16, 2); // Print a message to the LCD. lcd.print("hello, world!"); void loop() { // set the cursor to column 0, line 1 // (note: line 1 is the second row, since counting begins with 0): lcd.setcursor(0, 1); // print the number of seconds since reset: lcd.print(millis()/1000);

아두이노라이브러리 (5) LyquidCrystal 라이브러리활용 LC 라이브러리에서제공하는다양한예제프로그램을테스트하여사용법을확인하기바람. 활용예 : http://tronixstuff.wordpress.com/2011/01/08/tutorial-arduino-andmonochrome-lcds/ 37

과제물 #2 과제내용 1. 조도센서입력를받아현재의조도크기를 Text LCD 장치에출력하는프로그램을작성하여라. 2. 학기말과제에대한제안서를제출하여라 A. 학기말과제아이템내용 B. 구현일정 C. 팀원별역할분담 제출물 회로도, 프로그램소스, 실행예 ( 사진 ) 학기말과제제안서 5 분간발표 제출일 차주수업시간 38