Cari Blog Ini

Senin, 20 Agustus 2012

MENGHUBUNGKAN DAN MENGGUNAKAN LCD SEBAGAI PERIPHERAL PADA MIKROKONTROLER AVR DENGAN AVR STUDIO 5



1.1.      PENGENALAN LCD





Gambar 1. Liquid Crystal Display
(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.

Gambar 2. LCD JHD 162A
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:

Gambar 5. Contoh c code untuk menampilkan karakter sederhana pada LCD
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.

Gambar 8. C code untuk menampilkan data float/double
Setelah sahabat memprogram mikrokontroler sahabat dengan code diatas, apakah yang terjadi? Apakah yang muncul di LCD hanya ‘tanda tanya’ (?) seperti gambar dibawah ini?

Gambar 9. Error saat menampikan data float pada LCD
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:

Joue Ar-Rauf mengatakan...

keren banget gan infonya buat newbi kaya saya.
saya boleh minta library nya ga soalnya link yang diatas error terus
sufyaniskandar@gmail.com
terimakasih

skysmith mengatakan...

Maaf Gan baru sempat membalas. Berikut link terbaru dari Peter Fleury :
http://homepage.hispeed.ch/peterfleury/lcdlibrary.zip

Semoga bermanfaat. :)

Posting Komentar