Anda di halaman 1dari 25
BAB IV LCD TEXT 4.1 Tujuan 1, Mahasiswa memahami rangkaian interface mikrokontroller dengan LCD Karakter 2x16 2. Mahasiswa dapat memahami program Arduino untuk menampilkan data ke LCD Karakter 2 x 16 3. Mahasiswa memahami beberapa instruksi pada library header liquiderystal 4. Mahasiswa memahami mencetak karakter pada posisi baris dan kolom tertentu 4.2 Peralatan 1, Sebuah Komputer 2, Satu set trainer mikrokontroler 4.3 Teori Modul LCD Character dapat dengan mudah dihubungkan dengan mikrokontroller seperti Arduino Uno R3. LCD yang akan kita praktikumkan ini mempunyai lebar display 2 baris 16 kolom atau biasa disebut sebagai LCD Character 2x16, dengan 16 pin konektor, yang didifinisikan sebagai berikut: Gambar 4.1 Komponen LCD 2x16 & I2C Modul 68 Display karakter pada LCD diatur oleh pin EN, RS dan RW: 1 Jalur EN dinamakan Enable, Jalur ini digunakan untuk memberitahu LCD bahwa anda sedang mengirimkan sebuah data. Untuk mengirimkan data ke LCD, maka melalui program EN harus dibuat logika low “0” dan set pada dua jalur kontrol yang lain RS dan RW. Ketika dua jalur yang lain telah siap, set EN dengan logika “1” dan tunggu untuk sejumlah waktu tertentu (sesuai dengan datasheet dari LCD tersebut ) dan berikutnya set EN ke logika low “0” lagi, Jalur RS adalah jalur Register Select. Ketika RS berlogika low “0”, data akan dianggap sebagai sebuah perintah atau instruksi khusus ( seperti clear screen, posisi kursor dll ). Ketika RS berlogika high “1”, data yang dikirim adalah data text yang akan ditampilkan pada display LCD. Sebagai contoh, untuk menampilkan huruf “T” pada layar LCD maka RS harus diset logika high “1”. Jalur RW adalah jalur kontrol Read/ Write. Ketika RW berlogika low (0), maka informasi pada bus data akan dituliskan pada layar LCD. Ketika RW berlogika high "1", maka program akan melakukan pembacaan memori dari LCD. Sedangkan pada aplikasi umum pin RW selalu diberi logika low "0". 6 Tabel 4.1, Pin LCD dan Fungsi PIN Nama Fungsi I Vss Ground voltage 2 Veo | +5V 3 Vex Contras voltage Register Select 4 RS 0 = Instruction Register 1 =Data Register 5 Raw _ | Read/Write, untuk memilih mode write atau read Enable 6 E 0 = mulai memsang data ke LCD karakter_ 1 =disable 7 DBO LSB 8 DBI - 9 DB2 - Pada percobaan dalam modul ini akan menggunakan modul Inter-Integrated Cireuit (12C) sebagai perantara menangani perintah yang ada pada LCD. Sehingga posisi 12C ini diantara LCD dan Arduino, dengan konsep menghemat pin yang digunakan arduino ‘untuk mengendalikan LCD, Pada umumnya LCD dikendalikan dengan menggunakan 6 jalur yang ada pada LCD : RS, EN, D7, D6, DS, dan D4. Jika diinginkan lebih simplekita bisa menggunakan LCD shield yang bisa langsung integrated pada board. Tapi ketika kita ingin menggunakan yang lebih simple dari segi ukuran I2C mungkin salah satu jawabannya, 70 Gambar 4.2 Modul 12C Hitachi 16x2 LCD menggunakan HD44780 sangat murah dan tersedia secara luas, dan merupakan bagian pen ing untuk setiap proyek yang menampilkan informasi. Menggunakan LCD, data yang diinginkan dapat ditampilkan pada LCD melalui bus 12C. Pada prinsipnya, modul tersebut dibangun menggunakan PCF8574 (dari NXP) yang konsepnya adalah dua arah 8 bit VO port expander yang menggunakan protokol I2C. PCF8574 adalah silikon CMOS sirkuit sebagai pengendali I/O ekspansi (8-bit dua arah) bagi sebagian besar keluarga mikrokontroler melalui dua jalur dua arah bus (I2C- bus). Perhatikan bahwa kebanyakan modul dibuat dari varian PCF8574T (SO16 paket PCF8574 dalam paket DIP16) dengan alamat default slave 0x27. Jika modul tertanam: chip PCE8574AT(bisa dilihat dibagian belakangeipl2C), maka alamat slave default akan berubah ke Ox3F. Singkatnya, perangkat didasarkan pada PCF8574T dan koneksi alamat (A0-A1-A2) tidak dijembatani dengan solder akan memiliki 0x27 alamat slave. Gambar 4.3 Letak Koneksi Alamat Logic I2C TT Berikut merupakan rangkaian yang bisa dijadikan referensi untuk menghubungkan arduino dengan LCD melalui modul I2C. oll Jenvstaee |eousanbe 1 Gambar 4.4 Rangkaian I2C ke LCD Berikut merupakan komponen I2C yang terpasang pada LCD dengan Pin yang dimiliki dan fungsi tiap masing Pin. Gambar 4.5 Pin 2C Keterangan Konfigurasi kabel-kabel jumper : + GND-GND + vec-sv SDA - ANALOG Pin 4 + SCL- ANALOG pin 5 Pada kebanyakan papan Arduino, SDA (data line) adalah dihubungkan pada input analog pin 4, dan SCL (clock line) pada input analog pin 5. Pada Arduino Mega SDA 2 adalah digital pin 20 dan SCL adalah 21. Pada baru Arduino UNO (The "V3" pinout), pin SCL dan SDA juga pada dua paling kiri baru pin atas. CATATAN: Potentiometer berwarna biru pada gambar 4.6 untuk menyesuaikan kontras atau kecerahan dari layar LCD. Jika Anda tidak melihat karakter apapun, sesuaikan, Mulai searah jarum jam dan kembali ke tempat karakter yang cerah dan sampai background tidak memiliki kotak yang biasanya timbul di belakang karakter. Gambar 4.6 Konfigurasi Kabel Jumper Untuk membuat program yang nantinya akan memanfaatkan I2C yang berkomunikasi dengan LCD, maka dibutuhkan alamat yang tepat dari modul 12C. Alamat ini akan berbeda-beda untuk tiap device tergantung pada IC yang dipakai oleh modul I2C. Melihat alamat yang dipakai untuk modul I2C dapat menggunakan program scanner yang nantinya menghasilkan alamat yang dipakai pada modul 12C yang digunakan saat pengiriman perintah pada LCD. Scan device I2C dengan program berikut : #include void setup() { Wire.begin(); 7B Serial.begin (9600); while (!Serial); // Leonardo: wait for serial monitor Serial.printin("\nI2¢ Scanner"); void loop() { byte error, address; int nDevices; Serial.printIn("Scanning... "yr nDevices = 0; for (address = 1; address < 127; address++ { // The i2¢_scanner uses the return value of // the Write.endTransmisstion to see if // a device did acknowledge to the address. Wire. beginTransmission (address); error = Wire.endTransmission(); if (error — 0) { Serial.print("12C device found at address 0x"); if (address<16 Serial.print ("0" de Serial.print (address, HEX) ; Serial.println(" !"); nDevicest+; } else if (error=-4 { Serial.print ("Unknow error at address 0x"); if (address<16 Serial.print ("0" de Serial.print1n (address, HEX) + 74 ) } if (nDevices == 0) Serial.printin("No 12C devices found\n"); else Serial.printin("done\n"); delay (5000) ; // wait 5 seconds for next scan Hasil bisa dilihat dengan menggunakan menu Serial Monitor yang berada dibagian jendela kanan atas Arduino IDE. nea pein enaino Ue) Gambar 4.7 Hasil Eksekusi Sean I2C 44 Percobaan 1: CD & I2C Modul Mencoba mengirimkan karakter dengan menggunakan LCD melalui Modul 12C, yang pada dasarnya akan lebih mudah daripada menggunakan perintah standard tanpa menggunakan modul I2C : /*-----( Import needed libraries )----- / #include // Comes with Arduino IDE #include Declare Constants )- Declare objects ) // set the LCD address to 0x27 for a 16 chars 2 line display // B® FEW use address 0x3F // Set the pins on the 12C chip used for LCD 75 connections: // addr, en,rw,rs,d4,d5,d6,d7,b1,blpol LiguidCrystal_I2C led (0x3F, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Set the LCD I2C address ( Declare Variables ) Ff void setup() /* { Serial.begin(9600);// Used to type in characters lcd.begin(16,2); // initialize the lcd for 16 chars 2 lines, turn on backlight =( SETUP: RUNS ONCE )----*/ - Quick 3 blinks of backlight - for(int i = 0; i< 3; i++) led. backlight (17 delay (250); cd. noBacklight (); delay (250); } lcd.backlight(); // finish with backlight on - Write characters on the display Me // NOTE: Cursor Position: (CHAR, LINE) start at 0 led.setCursor (0,0); //Start at character 4 on line 0 led.print ("Hello, world!"); delay (1000); led.setCursor (0, 1)7 led.print ("Hi, POLINES' delay (8000); // Wait and then tell user they can start the Serial Monitor and type in characters to // Display. (Set Serial Monitor option to "No Line Ending") led.clear(); led. setCursor (0,0); //Start at character 0 on lined led.print ("D3TT INFORMATIKA") led.setCursor (0,1); 16 led.print ("type to display"); }/*--(end setup )---*/ 100 RUNS CON! NTLY ) void loop() /*- { // when characters arrive over the ser: if (Serial.available()) (/ wait a bit e entire message arrive delay(100); // clear the screen led.clear(); // vead all the available characters while (Serial.available() > 0) ( // displa h character to the LCD led.write (Serial. ree Oe } }/* -=(end main loop )-- */ 7* (THE END ) */ Keterangan Kode Program : 1. Memanggil library, lokasi fisik library biasanya berada pada lokasi dimana Arduino IDE diinstall. Untuk menambhakan library kita tinggal masukkan folder library baru kitake folder library. Lokasi yang memungkinkan untuk menyimpan library lainnya adalah di samping tempat penyimpanan skecth Library bisa didownload di: _https://bitbucket.org/fmalpartida/new- liquiderystal/downloads //Default sudah ada pada Arduino IDE include //Tambahan Library LCD dengan 12C f#include 2. Inisialisasi class yang ada pada header library yang nantinya object yang dihasilkan dariproses inisialisasi digunakan untuk pemrograman selanjutnya. 1 // Set the LCD 12¢ address Liquidcrystal_12¢ led(0x3F, 2, 1, 0, 4, 5, 6 7, 3, POSITIVE) + Konfigurasi pin I2C terhadap LCD Tabel 4.2 Konfigurasi pin ardunio addr |en|rw Rs d4| dS d6 | d7_ bl | bipol ox3F] 2] 1fo[4]s]e][7]3 3. Konfigurasi untuk fungsi setup() Inisialisasi penggunaan baudrate/kecepatan tranfer serial : Serial.begin (9600); Inisialisasi tipe LCD yang digunakan led. begin (16,2); Membuat efek flash blink/berkedip padalayar LCD sebanyak 3 kali for(int i = 0; i< 3; itt) { led. backlight (17 delay (250); ed. noBacklight ( ); delay (250); } Membuat LCD dengan tampilan lampu latar belakang menyala led.backlight(); // finish with backlight on Menginstrusikan kursor pada posisi sesuai dengan parameter, dimulai dari 0 untuk baris pertama, dan increment | untuk baris berikutnya. led. setCursor (0,0); 8 Mencetak pada LCD dengan karakter yang ada pada parameter led.print ("Hello, world!"); Memberikan delay () waktu tunda sebelummengeksekusi baris program s lanjutnya, Satuan dalam millisecond. delay (1000); led. setCursor (0,1); led. (HI! POLINES"); delay (8000) ; ein Membersihkan layar LCD untuk semua baris led.clear(); ‘Mengarahkan kursor ke baris pertama ex 0 on lined led.setCursor (0,0); // arac} Menuliskan karakter pada LCD pada posisi kursor yang berarti mereplace/mengganti karakter lama dengan karakter yang baru. led.print ("D3 TEKNIK INFORMATIKA") ; led. setCursor (0,1); led. print ("POLINES }/*--(end setup )- 4, Mengeksekusi rutin fungsi loop) Jika serial port menerima masukkan yang akan dirubah menjadi karakter setiap yang diterima serial akan ditampilkan pada LCD. // when c cters arrive over the seria port... if (Ser available ()) t a bi // wa r arrive delay (100) // clear the ser: 79 led.clear ()i // read all the available characters while (Serial.available() > 0) { // display each character to the LCD led. write (Serial. read()); 4.5 Percobaan 2 : LCD SHIELD ARDUINO Cara Jain untuk menggunakan LCD dengan cara menggunakan Shield untuk LCD yang akan menambahkan board diatas arduino sesuai dengan konfigurasi pin yang ada pada arduino, Dengan LCD Shield kita bisa menggunakan LCD sekaligus ‘menghemat pemanfaatan pin yang ada di arduino, Jadi jika dibandingkan dengan pemanfaatan 12C pada bahasan sebelumnya, LCD shield ini berbeda, pin LCD akan seolah-olah seperti tertancap secara langsung pada Arduino tanpa menggunakan modul 12C. Gambar 4.8 LCD Shield Arduino ‘Tombol keypad yang berada pada bagian bawah akan langsung terhubung dengan Analoginput Pin 0. 80 Detail Konfigurasi Pin LCD Shield : Tabel 4.3 Konfigurasi Pin dan fungsi Analog 0 Button (select, up, right, down and left) Digital 4 DB4 Digital 5 DBS Digital 6 DB6 Digital 7 DB7 Digital 8 RS (Data or Signal Display Selection) Digital 9 Enable Digital 10 Backlight Control Instruction for 04 To 010 and Analog Pin 0 Pin Function instruction Dam AH ution set Select up ght, down and it Gambar 4,9 Konfigurasi Pin LCD Shield 81 Berikut merupakan konfigurasi pemasangan LCD Shield pada Arduino : Gambar 4.10 Pemasangan LCD Shield pada Arduino Rangkaian : Gambar 4.11 Konfigurasi pengkabelan LCD dan Potensiometer 82 Contoh Kode Program : //Sample using LiquidCrystal library #include // select the pins used on the LCD panel Liquidcrystal lcd(8, 9, 4, 5, 6, 7) // define some values used by the panel and buttons int led_key = 0; int ade_key_in= 0; #define btnRIGKT 0 #define btnuP 1 #define btndowN 2 #define btnLEFT 3 Hdefine btnSELECT 4 #define btnNONE 5 // read the buttons int read_LCD_buttons() { adc_key_in = analogRead(0) ; // read the value from the sensor // my buttons when read are centered at these valies: 0, 144, 329, 504, 741 // we add approx 50 to these values and check to see if we are close if (adc_key_in > 1000) return btnNONE; // We make this the 1st option for speed reasons since it will be the most likely result // For V1.1 us this threshold if (ade_key_in < 50) return btnRIGHT, if (ade_key_in < 250) return btnUP, if (adc_key_in < 450) return btnDOWN if (adc_key_in < 650) return btnberT. if (ade_key in < 850) return btnSELECT return btnNONE; // when all others fail, 83 return this... } void setup () { led.begin(16, 2); // start the library led.setCursor (0,0); led.print ("Push the buttons"); // print a simple message ) void loop( { led.setCursor (9,1); // move cursor to second line and 9 spaces over led.print (millis()/1000);// display seconds elapsed since power-up led.setCursor (0,1); // move to the begining of the second line led_key = read_LCD_buttons(); // read the buttons switch (led_key) // depending on which button was pushed, we perform an action { case btnRIGHT: { led.print ("RIGET "); break; ) case btnLEFT: { led.print ("LEFT "); break; ) case btnUP: { led.print ("UP"); break; } case btnDOWN: { 84 led.print ("DOWN"); break; ) case btns) led. print ("SELECT break; ) case btnNoN lcd.print ("NONE " 4.6 Percobaan 3 : LCD SEBAGAI DAFTAR MENU Pada dasamya LCD hanya untuk menampilkan tampilan yang dihasilkan dari kode program saja, tapi tipe LCD shield mempunyai keypad yang tujuannya untuk memilih tampilan yang sekaligus akan menentukan aksi yang akan dilakukan setelahnya. Pada kasus tertentu kita membutuhkan tampilan sebagai kontrol dari aktivitas yang kita lakukan sebagai pengganti mouse atau touchscreen yang kita sering pakai dalam layar smartphone atau fouchScreen Monitor. Fungsi pemilihan ini digambarkan sebagai menu navigasi yang ada pada sebuah webs . yang akan memberikan informasi yang berbeda untuk tiap menu yang terpilih dengan memanfaatkan tombol keypad yang ada pada LCD Shield. 85 Gambar 4.12 Keypad pada LCD Shield Keypad pada shield akan mempunyai nilai range analog pada & bit jalur data, yang kisaran nilainya antara 0 — 1023. Nilai ini akan bisa didapatkan dengan menggunakan fungsi analogRead() pada arduino, ade_key_in alogRead (0); Misal kita mempunyai nilai hasil pembacaan pada masing-masing keypad : RIGHT = 0 uP DOWN = 329 LEFT = 504 SELEC’= 741 sehingga kita bisa membuat range untuk menangkap setiap inputan keypad yang dilakukan oleh user. Untuk mendekatkan nilai yang dihasilkan Analog Digital Converter kita berikan tambahan nilai 50 untuk tiap nilai default. if if if (adc_key (adc_key_in (ade_key_in if (adc_key_in if (ade_key_in if (ade_key in Dengan kode program diatas 000) 50) 250) return 450) return 650) return 850) return return btnNONe; btnRIGHT; > < return < < < < akan menentukan aksi, dengan menyesuaikan tombol 86 yang ditekan dengan nilai tombol tersebut, Contoh kasus : Membuat seleksi menu yang tertampil pada LCD Bisnis proses : Pada LCD shield akan ditampilkan Sejumlah menu dengan level yang sama kita sebut MainMenu, 1 Ketika keypad up ditekan pada LCD akan ditampilkan menu selanjutnya, dan jika keypad Down ditekan akan ditampilkan menu terakhir (pada urutan terbalik dari keypad Up) Ketika keypad Select ditekan pada main menu, pada LCD akan menampilkan submenu yang ada dalam tiap main menu, Atau jika tidak mempunyai submenu maka akan melakukan aksi sesuai dengan menu terpilih Kode Program : [oettteeette tet Description : Simple Menu function on LCD Button ion #include Liquidcrystal led(8,9,4,5,6,7)7 int keypad pin = AO; int keypad_value = 0; int keypad_value_old = 0; char btn_push; 87 byte mainMenuPage = 1; byte mainMenuPagedld 1; byte mainMenuTotal 4a; void setup () { led.begin(16,2); //Initialize a 2x16 type LCD MainMenuDisplay (0; delay (1000); } void loop() { btn_push = ReadKeypad(); MainMenuBtn () ; if (btn_push { "s')//enter selected menu WaitBtnRelease(); switch (mainMenuPage { case 1: Menwa () + break; case 2: MenuB () 7 break; case 3: Menu () 7 break; case 4: MenuD () break; MainMenuDisplay (); WaitBtnRelease (); ) delay (10)¢ 88 VMi-- void MenuA() { End of loop() loop--: led.clear(); led.setCursor (0,0); led.print ("Inside Menu A"); while (ReadKeypad () ! { hy //Insert Task for Menu A here ) ) void MenuB() { led.clear(); led.setCursor (0,0); led.print ("Inside Menu B"); "hy while (ReadKeypad () { //tnsert Task for Menu B here ) ) void Menuc() { led.clear(); led.setCursor (0,0); lcd.print ("Inside Menu C"); while (ReadKeypad() { "LY //Insert Task for Menu C here ) ) void MenuD() { lcd.clear(); led.setCursor (0,0); led.print ("Inside Menu D"); while (ReadKeypad () ‘hry 89 //Insert Task for Menu D here void MainMenuDisplay() { led.clear(); led. setCursor (0,0) 4 switch (mainMenuPage) { case 1: led.print("1. Menu A"); breaks case 2: led.print("2. Menu BY); break; case 3: led.print("3. Menu C"); break case 4: led.print("4. Menu D"); brea! void MainMenuBtn (} { WaitBtnRelease(); if (btn_push == 'U") { mainMenuPage++; if (mainMenuPage > mainMenuTotal) mainMenuPage = 1; ) else if(btn_push { tbr mainMenuPage-~; if (mainMenuPage 0) mainMenu?age = mainMenuTotal; 90 if (mainMenuPage != mainMenuPageOld) //only update display when page change { MainMenuDisplay (); mainMenuPageOld = mainMenuPage char ReadKeypad ( { /* Keypad button analog Value no button pressed 1023 select 741 left 503 down 326 up 142 right 0 */ keypad_value = analogRead(keypad_pin); if (keypad_value < 50) return 'R'; else if(keypad_value < 250 return 'U'; else if(keypad_value < 450) return 'D'; else if(keypad_value < 650 return 'L" else if(keypad_value < 850) return 'S'; else return 'N'; void WaitBtnRelease () { while( analogRead(keypad_pin) < 800) {} } //END Program 9 4.7 Latihan 1, Buat running text geser kekiri pada LCD dengan I2C dan LCD Shield Karakter - [NAMA] - D3TI POLINES 2. Gunakan fungsi untuk meletakkan karakter pada baris pertama dan kedua sehingga posisi karakter yang ditampilkan berada ditengah, Jika jumlah karakter lebih dati 16, maka karakter akan dipotong di karakter 16, 3. Gunakan Arduino dengan LCD Shield. Manfaatkan keypad pada LCD Shield untuk memasukkan kombinasi password jika pasword benar akan tertampil “Selamat Datang” dan Lampu Led Hijau akan menyala, jika inputan kombinasi salah Led Merah menyala tampilan LCD “Password Salah”. 92

Anda mungkin juga menyukai