1.1. PENGENALAN LCD
(a) Graphical LCD; (b) Character LCD
LCD merupakan singkatan dari Liquid Crystal Display. LCD merupakan alat atau komponen yang digunakan untuk menampilkan berbagai hal secara visual. Ada banyak jenis LCD, namun yang secara umum yang digunakan dalam dunia robotika atau mikrokontroler dapat dikelompokan dalam dua jenis yaitu, character LCD dan graphical LCD. Pada tulisan ini akan yang akan dibahas adalah jenis LCD yang lebih sederhana yaitu character LCD.
Hitachi HD44780 adalah salah satu seri character LCD yang umum digunakan dalam
dunia mikrokontroler. LCD ini mampu menampilkan karakter dalam ukuran 2 baris
yang masing-masing baris terdiri dari 16 kolom. Namun yang akan digunakan dalam
arttikel ini adalah LCD seri JHD 162A. LCD seri JHD 162A ini memiliki bentuk
yang hampir sama dan memiliki desain yang kompetibel dengan seri HD44780,
sehingga dapat berjalan dengan code
yang yang sama. Kedua LCD ini memiliki konfigurasi pin yang sama seperti dapat
dilihat pada table 1:
Tabel
1. Konfigurasi pin LCD
No.
PIN |
NAMA
|
FUNGSI
|
1
|
VSS
|
Ground (referensi tegangan)
|
2
|
VCC
|
Power (Positive voltage), +5 Volt
|
3
|
VEE
|
Contrast Voltage (tegangan pengatur
kontras)
|
4
|
RS
|
Register Select (memilih register):
0
= Instruction Register
(mengaktifkan register instruksi)
1
= Data Register (mengaktifkan
register penerima data)
|
5
|
R/W
|
Read/Write:
0 = Write mode (LCD bekerja dalam modus menulis)
1
= Read Mode (LCD bekerja pada modus
data LCD bisa dibaca)
Umumnya,
read mode jarang digunakan sehingga sebagain orang hanya menghubungkan PIN
ini pada ground (0 = modus menulis)
|
6
|
E
|
Enable:
0
= Mulai menampung (save/latch) data karakter pada LCD
1
= disable / me-nonaktifkan
|
7
|
DB0
|
Data
Bit 0 (LSB)
|
8
|
DB1
|
Data
Bit 1
|
9
|
DB2
|
Data
Bit 2
|
10
|
DB3
|
Data
Bit 3
|
11
|
DB4
|
Data Bit 1 / Data
Bit 4
|
12
|
DB5
|
Data Bit 2 / Data
Bit 5
|
13
|
DB6
|
Data Bit 3 / Data
Bit 6
|
14
|
DB7
|
Data Bit 4 / Data Bit
7 (MSB)
|
15
|
BPL
|
Back Plane Light ( tegangan untuk backlight), +5 Volt atau lebih rendah
|
16
|
GND
|
Ground
|
1.2. Menghubungkan LCD
Kedua
seri character LCD yang disebutkan
sebelumnya, dapat beroperasi dengan mode 8 bit maupun mode 4 bit. Mode 8 bit
akan menghasilkan proses yang lebih cepat, tetapi memerlukan 8 pin koneksi data
pada mikrokontroler. Sedangakan mode 4 bit lebih lambat dibandingkan mode 8
bit, tetapi hanya memerlukan 4 pin untuk mengirimkan data dari mikrokontroler
(koneksi data belum termasuk koneksi pengendalian). Namun umumnya kecepatan
pengolahan data mode 4 bit sudah cukup memenuhi kebutuhan dan lebih umum
digunakan oleh para pecinta mikrokontroler. Oleh karena pada tulisan ini kita
akan belajar menghubungkan mikrokontroler dan LCD JHD 162A dengan mode 4 pin.
Gambar 3. Skema penggunaan LCD dengan modus
4 bit.
1.3. Menggunakan LCD
Sebelum mulai
menggunakan alat atau komponen elektronik tertentu biasanya kita akan mencoba
untuk mempelajari datasheet dari komponen tersebut, misalnya data sheet dari
LCD ini.
Tapi untuk menghasilkan proses pembelajaran yang lebih produktif dan efisien,
sahabat tidak perlu melakukan hal tersebut. Saya yakin sahabat suka dengan hal
yang lebih sederhana. Peter Fleury telah
menyediakan library LCD, yang dapat sahabat unduh di sini. Oleh karena
itu sebelum memulai coding dengan AVR Studio 5, sebaiknya sahabat memiliki
mengunduh dan meng-extract library
tersebut.
Sekarang
kita akan memulai dengan membuka AVR Studio 5 dan memulai create new project. Setelah terbuka, pada panel disebelah kanan,
sahabat akan menemukan jendela Solution
Explorer. Lakukan klik kanan pada nama project
di jendela tersebut. kemudian pilih Go to
à
Add dan kemudian pilih Existing Item. Jendela pencarian akan
muncul, dan sahabat tinggal memilih (Add)
file lcd.c dan kemudian ulangi
langkah diatas untuk memilih file lcd.h.
Akhirnya kita dapat melihat kedua file (file c dan file header dari library LCD)
tertera pada project kita.
Gambar 4. Menambahkan library LCD pada project di AVR Studio 5
Setelah kita menambahkan library
LCD pada project kita, mari lanjutkan dengan mengatur konfigurasi yang sesuai
untuk library tersebut, dengan mengikuti langkah-langkah berikut ini:
- Lakukan double click pada bagian ‘lcd.h’ (pada jendela Solution Explorer), sehingga akan memunculkan
tab ‘lcd.h’. Selanjutnya lakukan
scroll ke bawah secara perlahan agar kita tidak melewatkan hal-hal yang
penting.
- Pada bagian awal kita akan menemui beberapa teks
komentar yang mendeskripsikan tentang library
tersebut.
- Jika kita melakukan scroll
ke bawah lagi maka kita akan menemukan bahwa baris yang mendefinisikan nilai
XTAL (atau F_CPU). Sesuaikan nilainya dengan nilai clock (F_CPU) yang kita gunakan pada mikrokontroler. Jika nilai ini
tidak sesuai maka kita akan mendapatkan waktu delay yang tidak sesuai juga.
- Scroll lagi ke
bawah dan kita akan menemukan baris yang mendefinisikan LCD_IO_MODE. Seperti
telah dijelaskan pada deskripsi di bagian awal, LCD_IO_MODE = 0 berarti LCD
dalam modus memory mapped. Sedangakan
untuk LCD_IO_MODE = 1 berarti LCD dalam modus 4 bit. Pastikan agar LCD_IO_MODE
di set dengan nilai 1 (modus 4 bit). Perlu diingat bahwa library ini tidak mendukung modus 8 bit.
- Setelah bagian LCD_IO_MODE maka kita akan menemukan
bagian penting lainnya, yaitu pendefinisian port/pin pada mikrokontroler yang telah
dihubungkan dengan LCD. Sesuaikan port dan pin yang anda gunakan. Umumnya,
DB4,…,DB7 pada LCD dihubungkan dengan pin D4 hingga D7 pada mikrokontroler.
Sedangkan 3 pin pengendali LCD (RE, R/W, E) bebas sesuai keiinginan kita. Sebenarnya,
kita bebas mengatur pin yang digunakan, yang terpenting adalah kita
mendefinisikan pin-pin tersebut pada bagian ini sesuai dengan keadaan yang
sebenarnya.
- Sahabat telah selesai melakukan proses pengaturan
pendefinisian atau pengaturan konfigurasi. Jangan lupa untuk menyimpan (save) semua setting yang telah sahabat lakukan dalam lcd.h ini.
- Jika kita tetap melakukan scroll lebih lanjut lagi maka kita akan menemukan rangkaian daftar
perintah pada LCD yang dapat dijalankan dengan meng-input-kan perintah tersebut pada fungsi lcd_command().
- Selanjutnya kita juga akan menemukan rangkaian daftar
fungsi bersama deskripsinya, yang di definisikan melalui library ini.
Fungsi-fungsi tersebut antara lain lcd_init(),
lcd_clrscr(), lcd_home(), lcd_gotoxy(),
lcd_putc(), lcd_puts(), lcd_puts_p(),
lcd_command(), lcd_data() dan lcd_puts_P().
Their description is attached alongwith their declaration.
Terakhir, jangan
lupa untuk memasukan (#include) “lcd.h” pada bagian header file c project kita. Sekarang kita sudah siap
untuk melakukan coding untuk
menampilkan karakter yang kita inginkan pada LCD.
Coding
Mari kita
coba menampilkan karakter yang sederhana, sekaligus untuk memeriksa apakah kita
telah berhasil menghubungkan LCD dan mikrokontroler kita. Sahabat bisa
menggunakan code berikut ini:
Jika sudah
selesai mengetik code diatas, lakukan compile dan build untuk menghasilkan file
hex. Lakukan burning/programming/flashing file tersebut ke dalam mikrokontroler
sahabat yang sudah terhubung dengan LCD dan lihat apa yang terjadi dengan LCD
sahabat. Jika sahabat telah melihat tulisan “Hallo Sahabat” dan “Sky-Institute”
pada baris pertama dan baris kedua maka saudara telah berhasil menghubungkan
dan menggunakan LCD.
Sekarang
mari kita pelajari sesuatu yang lebih, sekaligus mematangkan kemampuan sahabat
dalam menggunakan LCD karakter ini.
1.3.1. Menampilkan karakter/string dinamis
Pada bagian
ini kita akan melihat contoh bagaimana menampilkan karakter yang
dinamis/bergerak pada LCD kita. Mempelajari bagian ini akan membantu kita untuk
lebih mengeksplore dan mengenal library
LCD yang kita tambahkan diatas. Bagian ini juga akan membuat kemampuan sahabat
semakin bertambah, dan saya yakin hal ini akan memberikan kesenangan dan
kepuasan bagi sahabat yang sedang mempelajari pengunaan LCD.
Kali ini
kita akam menampilkan tulisan atau karakter yang akan bergerak. Sebagai tips:
gunakanlah perintah/fungsi lcd_command()
yang telah kita lihat sebelumnya, misalnya lcd_command(LCD_MOVE_DISP_RIGHT)
untuk menggerakan karakter ke kanan, lcd_command(LCD_MOVE_DISP_LEFT),
dan lain-lain. Kemudian coba buat agar tulisan tersebut dapat berputar
bergantian antara baris satu dan baris kedua pada LCD. Sahabat bisa mempelajari
lebih jauh menggunakan code berikut
ini:
Gambar 6. Contoh c code
untuk menampilkan karakter dinamis
1.3.2. Menampilkan nilai atau angka (integer, float):
Seperti namanya LCD karakter,
maka fungsinya pun untuk menampilkan karakter. Namun bagaimana jika sahabat
ingin menampilkan data integer, float atau yang lain? Apakah hal
tersebut dapat dilakukan? Pada dasarnya yang dapat kita display adalah grafik ataupun karakter. Sedangkan integer dan
proses aritmatik hanya bisa terjadi didalam otak. Angka merupakan merupakan
representasi karakter dari sebuah data integer,
float, dan lain-lain. Oleh karena itu
kita dapat menampilkan data integer
ataupun hasil operasi aritmatika lainnya, tetapi kita perlu
‘merubah’/merepresentasikan dalam bentuk data karakter (string).
Untuk mengubah data integer
menjadi data string kita dapat menggunakan perintah/fungsi itoa(integer_yg_ingin_diubah,
representasi_string_nya, basis). Dengan fungsi tersebut kita
dapat ‘mengubah’ data integer menjadi data karakter sesuai basis yang
diinginkan. Misalnya jika kita ingin mengubah data integer 14 menjadi data string
dalam bentuk biner maka basis kita isi dengan 2. Dari pada berpanjang lebar,
mari kita lakukan percobaan dengan code
berikut ini:
Gambar
7. C code untuk menampilkan data integer
Secara umum, kita tidak
disarankan untuk menggunakan perhitungan decimal (float number) dalam melakukan pemrograman mikrokontroler. Hal ini
disebabkan karena umumnya inti otak dari mikrokontroler tidak dilengkapi dengan
kemampuan untuk melakukan operasi aritmatik dengan bilangan decimal. Yang dapat
dilakukan oleh otak dari mikrokontroler adalah melakukan operasi aritmatik.
Namun secara engineer hal itu dapat
dilakukan dengan mensimulasi (emulate)
operasi aritmatik tersebut pada perangkat lunaknya.
Jika sahabat melakukan operasi
aritmatik sederhana dan selalu menghasilkan bilangan bulat (integer) maka sahabat tidak perlu
khawatir karena mikrokontroler dapat melakukannya dengan mudah. Tetapi jika
pecahan atau bilangan desimal (float)
tidak dapat dihindari maka sahabat perlu menggunakan perintah sprintf(). Seperti yang telah disebutkan
diatas bahwa untuk melakukan operasi aritmatik bilangan decimal maka kita perlu
menambahkan semacam emulator pada mikrokontroler kita. Fungsi sprintf() umum digunakan, tetapi membutuhkan
waktu dan memori yang lebih banyak dibandingkan operasi aritmatik sederhana.
Oleh karena itu sedapat mungkin sabahat menggunakan perhitungan yang sederhana.
Terkadang kita tidak dapat
menghindar dari operasi aritmatik bilangan desimal. Pilihan lain adalah dengan
menggunakan perintah/fungsi seperti dtostre()
atau dtostrf(), karen fungsi-fungsi
tersebut memiliki library yang lebih
sederhana dan ringan dibandingkan perintah sprintf().
Atau kita juga dapat menggunakan perintah rprintfFloat(jmlhdigit, double_or_float) yang terdapat pada library AVR (rprintf.h).
Sekarang mari kita coba
menampilkan data float ke dalam LCD, misalnya data tekanan udara.
Setelah sahabat memprogram
mikrokontroler sahabat dengan code
diatas, apakah yang terjadi? Apakah yang muncul di LCD hanya ‘tanda tanya’ (?)
seperti gambar dibawah ini?
Masih ingat kan dengan penjelasan
diatas bahwa, untuk melakukan operasi dengan data float, mikrokontroler
membutuhkan ‘emulator’. Nah, kita perlu menjalankan ‘emulator’ tersebut agar
operasi berjalan lancar, dengan cara memberitahukan kepada linker agar menggunakan floating
point library. Library ini
umumnya sudah tersedia dalam software
AVR studio 5, tetapi perlu kita set agar library
tersebut dapat digunakan. Library
yang perlu ditambahkan adalah libprintf_flt.a
dan libm.a, dan kita juga perlu
menambahkan -Wl,-u,vfprintf -lprintf_flt
–lm pada linker option agar library diatas dapat dijalankan dengan
benar.
Berikut ini adalah cara
memberitahukan linker pada AVR studio 5 mengenai floating point library:
-
Pada bagian menu klik Project (ALT+F7)
-
Klik Toolchain dan lihat pada bagian AVR/GNU
C Linker dan pilih Libraries.
-
Pada bagian Librarier
(-Wl,-l), lakukan klik pada tombol Add,
dan sebuah jendela akan terbuka. Ketikkan (insert)
libprintf_flt.a. Pilih Ok dan ulangi dari tombol Add dan ketikkan libm.a.
-
Lanjutkan dengan mengklik bagian Miscellaneous pada bagian AVR/GNU C Linker dan ketikkan -Wl,-u,vfprintf -lprintf_flt –lm pada baris input disamping tulisan
Other linker flags.
-
Lakukan save, kemudian rebuild
file C project sahabat.
Program kembali mikrokontroler sahabat dengan file hex yang baru, maka sahabat akan
mendapatkan tampilan pada LCD seperti yang diharapkan.
Catatan: bagi sahabat yang masih menggunakan CV AVR,
sahabat dapat melakukan langkah diatas dengan melakukan klik pada Project à Configure, kemudian pada bagian (s)printf
feature ubah statusnya menjadi float,
width, precision.
Kesalahan (error)
yang Sering Terjadi dan Solusinya
Saat
menggunakan LCD mungkin sahabat akan menemui beberapa masalah seperti berikut:
-
tidak ada yang
terlihat di layar
-
layar tampak
hitam semuanya
-
hanya tampak
kursor yang berkedip, dan tidak nampak karakter yang diinginkan
-
tampak karakter
atau simbol yang aneh
Untuk
masalah-masalah tersebut coba selasaikan dengan langkah-langkah berikut:
ü Atur resistor variabel (potensiometer) untuk
meningkatkan kontras
ü Periksa kembali sambungan, mungkin ada koneksi yang
putus atau mengalami short sircuit.
ü Periksa kembali code
sahabat. Pastikan sahabat telah menggunakan nilai clock (XTAL/F_CPU) yang tepat
pada project utama maupun pada library lcd.h.
ü Terakhir, jangan lupa bertanya kepada orang lain,
karena mungkin mereka pernah mangalami masalah yang sahabat hadapi, dan mereka
telah berhasil menemukan solusinya. Sahabat juga dapat bertanya di blog ini
melalui jendela comment.
BIBLIOGRAPHY
dl8dtl. (2006, June 30). How to use sprintf with
floats in AVR STUDIO (winavr compile). Retrieved August 14, 2012, from
www.avrfreaks.net: http://www.avrfreaks.net/index.php?name=PNphpBB2&file=viewtopic&t=39892
Motisan, R. (2012, February 8). AVR Studio 5
snprintf / vsnprintf problem with Floats. Retrieved August 14, 2012, from
POCKET MAGIC: Where Technology meets Magic: http://www.pocketmagic.net/?p=2513
Rudiawan, E. (2012, March 19). ngooprek.com.
Retrieved August 14, 2012, from Belajar AVR – Sensor Interfacing – 13: http://ngooprek.com/blog/2012/03/19/belajar-avr-sensor-interfacing-13/
Vitu, M. (2011, June 16). LCD Interfacing with AVR.
Retrieved August 14, 2012, from maxEmbedded: a Guide to Robotics and Embedded
Electronics: http://maxembedded.wordpress.com/2011/06/16/lcd-interfacing-with-avr/
winavr.scienceprog.com. (2007,
January 19). Using sprintf function for float numbers in AVR-GCC.
Retrieved August 14, 2012, from AVR-GCC Tutorial WINAVR: http://winavr.scienceprog.com/comment/28
2 comments:
keren banget gan infonya buat newbi kaya saya.
saya boleh minta library nya ga soalnya link yang diatas error terus
sufyaniskandar@gmail.com
terimakasih
Maaf Gan baru sempat membalas. Berikut link terbaru dari Peter Fleury :
http://homepage.hispeed.ch/peterfleury/lcdlibrary.zip
Semoga bermanfaat. :)
Posting Komentar