Interfacing
Materi 5: LCD and Keyboard Interfacing Disusun Oleh:
I Nyoman Kusuma Wardana
Outline • LCD Interfacing • Keyboard Interfacing • Workshop
Kusuma Wardana - Interfacing 2013
2
LCD Interfacing
Kusuma Wardana - Interfacing 2013
3
LCD Interfacing • LCD mulai saat ini telah banyak digunakan dan mulai menggeser penggunaan LED (seven segment atau multi segment yg lain) dgn bbrp alasan berikut: 1. Harga LCD yg mulai terjangkau 2. Kemampuannya dlm menampilkan angka, karakter, dan gambar 3. Meringankan beban CPU dlm me-refresh tampilan 4. Mudah dlm memprogram karakter & gambar Kusuma Wardana - Interfacing 2013
4
LCD Interfacing • Beberapa jenis LCD: 2 x 40 character LCD
1 x 16 character LCD
2 x 16 character LCD
5
LCD Interfacing • Fungsi Pin LCD:
Kusuma Wardana - Interfacing 2013
6
LCD Interfacing VCC, VSS, VEE • VSS tersambung ground sdgkan VCC/VDD ke +5V RS (Register Select) • Jika RS = 0: memungkinakan user mengirim perintah ke LCD (misal clear) • Jika RS = 1: memungkinkan user mengirim data utk ditampilkan Kusuma Wardana - Interfacing 2013
7
LCD Interfacing R/W (Read/Write) • Memungkinkan user utk menulis dan membaca informasi • R/W = 1 : membaca • R/W = 0 : menulis Enable • Latch info dlm LCD • Pulsa min 450ns diaplikasikan ke LCD ketika mengirim data Kusuma Wardana - Interfacing 2013
8
LCD Interfacing D0-D7 • 8-bit data pin mengirim dan membaca data • Karakter ASCII : A-Z, a-z dan 0-9, dgn RS =1 • Antarmuka LCD pd AVR ada 2 cara: • 8-bit • 4-bit Kusuma Wardana - Interfacing 2013
9
LCD Interfacing Sending Commands and Data to LCD • Berikut langkah utk mengirim data dan perintah pd LCD: 1. Inisialisasi LCD 2. Kirim brbagai command brdasarkn tabel di atas 3. Kirim karakter yg akan ditampilkan ke LCD • Langkah 2 dan 3 dpt dilakukan berulang kali Kusuma Wardana - Interfacing 2013
10
LCD Interfacing Inisialisasi LCD • Berdasarkan tabel LCD command, Utk menginisialisasi 8-bit LCD 5 x 7, diperlukan urutan perintah berikut: 0x38, 0x0E, 0x01 • Setelah LCD di power-up tunggu sekitar 15 ms sblm diinisialisasi Kusuma Wardana - Interfacing 2013
11
LCD Interfacing Mengirim Data ke LCD Langkah2nya sbb: 1. Utk mengirim data buat RS = 1 dan R/W = 0 2. Tempatkan data ke data pin (D0-D7) 3. Kirim pulsa high-to-low ke pin E (Enable) utk mengaktifkan internal lacth pd LCD 4. Stelah mengirim data tunggu 100µs utk memberi ksempatan modul LCD menampilkan data ke screen LCD Kusuma Wardana - Interfacing 2013
12
LCD Interfacing Contoh Program utk mengirim Data: void lcdData (unsigned char data) { LCD_DPRT = data; //kirim data ke data port LCD_CPRT |= (1<
Kusuma Wardana - Interfacing 2013
13
LCD Interfacing Contoh Program utk mengirim Command: void lcdCommand (unsigned char cmnd) { LCD_DPRT = cmnd; //kirim command ke data port LCD_CPRT &= ~(1<
Kusuma Wardana - Interfacing 2013
14
LCD Interfacing
Kusuma Wardana - Interfacing 2013
15
LCD Interfacing Mengirim 4-bit Kode atau Data • Pd bbrp kasus, akan lebih menguntungkan utk mengirimkan data hanya 4-bit • Hal ini utk menghemat penggunaan Pin • Ingat, inisialisasi akan berbeda dr 8-bit • Utk menginisialisasi kirim scr berurutan: 33, 32 dan 28 (hex) • Kita menggunakan high nibble Kusuma Wardana - Interfacing 2013
16
LCD Interfacing
Kusuma Wardana - Interfacing 2013
17
LCD Interfacing • Utk menginisialisasi kirim scr berurutan: 33, 32 dan 28 (hex) • Ini utk mengatakan ke LCD bahwa mode yg akan dipakai adlh 4-bit data
Kusuma Wardana - Interfacing 2013
18
LCD Interfacing Konfigurasi 4-bit single Port:
Kusuma Wardana - Interfacing 2013
19
LCD Interfacing Timing Diagram
LCD timing diagram utk2013 8-bit data Kusuma Wardana - Interfacing
20
LCD Interfacing
LCD timing diagram utk 4-bit data Kusuma Wardana - Interfacing 2013
21
Kusuma Wardana - Interfacing 2013
22
Kusuma Wardana - Interfacing 2013
23
LCD Interfacing DD (Display Data) RAM address location:
• Dimana utk 20 x 2 LCD: • XXXXXXXX = 00000000 s/d 0100111 (line 1) • XXXXXXXX = 10000000 s/d 1100111 (line 2) Kusuma Wardana - Interfacing 2013
24
LCD Interfacing • DD (Display Data) RAM address location:
Kusuma Wardana - Interfacing 2013
25
LCD Interfacing Contoh: • Berapakah alamat dr kursor berikut jika menggunakan LCD 20x4? a) Line 1, kolom 1 b) Line 2, kolom 1 c) Line 3, kolom 2 d) Line 4, kolom 3 Kusuma Wardana - Interfacing 2013
26
LCD Interfacing Jawab: a) 80 b) C0 c) 95 d) D6
Berapakah alamat dr kursor berikut jika menggunakan LCD 20x4? a) Line 1, kolom 1 b) Line 2, kolom 1 c) Line 3, kolom 2 d) Line 4, kolom 3
27
LCD Programming in C
Kusuma Wardana - Interfacing 2013
28
LCD Programming in C • Buatlah program utk mengirim kalimat ke LCD menggunakan 8-bit data dgn skematik berikut:
Kusuma Wardana - Interfacing 2013
29
Kusuma Wardana - Interfacing 2013
30
LCD Programming in C #include <mega16.h> #include <delay.h> #define #define #define #define #define #define #define #define #define
LCD_DPRT LCD_DDDR LCD_DPIN LCD_CPRT LCD_CDDR LCD_CPIN LCD_RS 0 LCD_RW 1 LCD_EN 2
PORTD DDRD PIND PORTC DDRC PINC
//LCD //LCD //LCD //LCD //LCD //LCD //LCD //LCD //LCD
Kusuma Wardana - Interfacing 2013
data port data DDR data Pin command Port command DDR command Pin RS RW EN 31
LCD Programming in C Subrutin utk pengiriman perintah (command) //*********************************************************** void lcdCommand (unsigned char cmnd) { LCD_DPRT = cmnd; //kirim command ke data port LCD_CPRT &= ~(1<
32
LCD Programming in C Subrutin utk pengiriman data //*********************************************************** void lcdData (unsigned char data) { LCD_DPRT = cmnd; //kirim command ke data port LCD_CPRT |= (1<
Kusuma Wardana - Interfacing 2013
33
LCD Programming in C Subrutin utk inisialisasi LCD //*********************************************************** void lcd_init() { LCD_DDDR = 0xFF; LCD_CDDR = 0xFF; LCD_CPRT &= ~(1<
//LCD EN = 0 //tunggu utk inisialisasi //init LCD 2 line //display on, cursor on //tunggu bentar //shift kursor ke kanan
} Kusuma Wardana - Interfacing 2013
34
Subrutin utk posisi kursor dan menulis data //*********************************************************** void lcd_gotoxy(unsigned char x, unsigned char y) { unsigned char almtKarakterPertama[]={0x80,0xC0,0x94,0xD4}; //lihat tabel lcdCommand(almtKarakterPertama[y-1] + x - 1); delay_us(100); } //*********************************************************** void lcd_print(char * str) { unsigned char i = 0; while(str[i]!= 0) { lcdData(str[i]); i++; } } 35
LCD Programming in C Program utama //*********************************************************** void main(void) { lcd_init(); lcd_gotoxy(1,1); lcd_print("Aku pasti bisa!"); lcd_gotoxy(1,2); lcd_print("Yakin!"); while(1);
// diam di sini selamanya
}
Kusuma Wardana - Interfacing 2013
36
LCD Programming in C • Buatlah program utk mengirim kalimat ke LCD menggunakan 4-bit data dgn skematik berikut:
Kusuma Wardana - Interfacing 2013
37
Kusuma Wardana - Interfacing 2013
38
LCD Programming in C #include <mega16.h> #include <delay.h> #define #define #define #define #define #define #define #define #define
LCD_DPRT LCD_DDDR LCD_DPIN LCD_CPRT LCD_CDDR LCD_CPIN LCD_RS 0 LCD_RW 1 LCD_EN 2
PORTD DDRD PIND PORTC DDRC PINC
//LCD //LCD //LCD //LCD //LCD //LCD //LCD //LCD //LCD
Kusuma Wardana - Interfacing 2013
data port data DDR data Pin command Port command DDR command Pin RS RW EN 39
LCD Programming in C Subrutin utk pengiriman perintah (command) void lcdCommand (unsigned char cmnd) { LCD_DPRT = cmnd & 0xF0; //kirim high nibble LCD_CPRT &= ~(1<
40
LCD Programming in C Subrutin utk pengiriman data //*********************************************************** void lcdData (unsigned char data) { LCD_DPRT = data & 0xF0; LCD_CPRT |= (1<
//kirim high nibble //RS = 1 utk data //RW = 0 utk write //EN = 1 utk pulsa H-to-L //tunggu sebentar utk enable //EN = 0 utk pulsa H-to-L //kirim low nibble //EN = 1 utk pulsa H-to-L //EN = 0 utk pulsa H-to-L
Kusuma Wardana - Interfacing 2013
41
LCD Programming in C Subrutin utk inisialisasi LCD void lcd_init() { LCD_DDDR = 0xFF; LCD_CDDR = 0xFF; LCD_CPRT &= ~(1<
//LCD EN = 0 //kirim $33 utk init //kirim $32 utk init //init LCD 2 line //display on, cursor on //clear LCD //tunggu utk inisialisasi //shift kursor ke kanan
} Kusuma Wardana - Interfacing 2013
42
Subrutin utk posisi kursor dan menulis data //*********************************************************** void lcd_gotoxy(unsigned char x, unsigned char y) { unsigned char almtKarakterPertama[]={0x80,0xC0,0x94,0xD4}; //lihat tabel lcdCommand(almtKarakterPertama[y-1] + x - 1); delay_us(100); } //*********************************************************** void lcd_print(char * str) { unsigned char i = 0; while(str[i]!= 0) { lcdData(str[i]); i++; } } 43
LCD Programming in C Program utama //*********************************************************** void main(void) { lcd_init(); lcd_gotoxy(1,1); lcd_print("Aku pasti bisa!"); lcd_gotoxy(1,2); lcd_print("Yakin!"); while(1);
// diam di sini selamanya
}
Kusuma Wardana - Interfacing 2013
44
LCD Programming in C • Bagaimana jika menggunakan library ?!
Kusuma Wardana - Interfacing 2013
45
LCD Programming in C • Jauh lebih sederhana, tapi…. Menghilangkan detil program #include <mega16.h> #asm .equ __lcd_port=0x15 #endasm #include
void main(void) { lcd_init(16); lcd_gotoxy(0,0); lcd_putsf("Aku pasti Bisa"); lcd_gotoxy(0,1); lcd_putsf("Yakin!"); while(1); }
46
Daftar Pustaka • Daniel J.Pack and Steven F.Barrettt, 2008, Atmel AVR Microcontroller Primer: Programming and Interfacing, Morgan & Claypool Publisher • Mazidi, Naimi and Naimi, 2011, The AVR Microcontroller and Embedded System: Using Assembly and C, Prentice Hall • AVR ATmega16 Manual, Atmel Corporation Kusuma Wardana - Interfacing 2013
47