Untuk kali ini saya mencoba menjalankan sebuah LCD grafis monochrome menggunakan AVR. LCD yang akan digunakan adalah LCD dari sebuah ponsel bermerek Nokia dengan tipe 1202. Alasan saya menggunakan LCD ini adalah karena LCD ini mudah didapatkan (saya membelinya di Bandung Electronic Center, BEC).
Keuntunggan menggunakan LCD grafis dibandingkan dengan LCD sejenis Hitachi HD44780 atau LCD seven segment adalah kemampuan LCD tipe ini untuk menampilkan gambar, menjadikannya sebagai antarmuka yang lebih bersahabat bagi pengguna device.
Tapi, LCD ini memiliki kekurangan, yaitu penggunaan sumber daya yang luar biasa. Untuk menampilkan gambar dan antarmuka, diperlukan bank RAM yang sangat besar, apalagi jika menggunakan warna.
Dan kenapa saya menghubungkan LCD ke AVR ? Alasannya...ah, entahlah. Hitung-hitung untuk latihan saja jika nanti saya harus bekerja dengan prosesor ARM yang memiliki sumber daya lebih besar. Mungkin.
Setelah saya berselancar di internet, akhirnya saya menemukan sebuah laman yang menyatakan bahwa chip kendali dari LCD Nokia 1202 adalah chip yang diproduksi oleh ST Microelectronics, yaitu STE2007.
Bagi kalian yang ingin mengunduh datasheet dari STE2007, kalian bisa mengunduhnya melalui link di bawah ini.
Unduh Datasheet STE2007
Lalu, bagaimana cara kerja dari LCD STE2007 ini ?
Mudah saja. STE2007 adalah chip yang menggunakan antarmuka SPI-9bit (Serial Peripheral Interface - 9bit), yang artinya kalian bisa mengirimkan 1 paket data dengan format 9-bit. Paket ini bisa berupa perintah atau data. Perintah berarti apa yang harus dilakukan oleh LCD dan data berarti apa yang harus ditampilkan oleh LCD.
STE2007 yang mengedalikan LCD Nokia 1202 memiliki 4 pin utama dalam komunikasi SPI ini. Yaitu:
1. Pin !Reset
Pin yang digunakan untuk mengatur ulang LCD secara hardware. Pin ini aktif jika kondisinya low. STE2007 memiliki 2 tipe reset, yaitu secara hardware dan secara software.
2. Pin !CS
Pin ini digunakan untuk memilih alamat perangkat untuk data yang akan dikirim. Jika pin ini berada dalam kondisi low, artinya data akan dikirim ke perangkat (dalam hal ini ke LCD N1202). Patikan kondisi pin ini low saat kalian akan mengirim paket data.
3. Pin SDA
Pin ini adalah pin yang akan mengirimkan data ke LCD. Satu paket data terdiri dari 9-bit, dan bit yang ke-9 atau bit MSB (Most Significant Bit - bit yang paling tinggi) akan berperan sebagai identitas dari sebuah paket, jika 1 berarti data, jika 0 berarti perintah. Dalam komunikasi dengan STE2007, bit MSB (bit ke-9) menjadi bit yang pertamakali dikirimkan dan bit LSB (Least Significant Bit - bit yang paling rendah) (bit ke-0) akan dikirimkan terakhir.
4. Pin SCL
Pin ini berfungsi sebagai pin sinkronisasi antara AVR dan LCD. Pin ini menjadi penentu kapan sebuah bit akan diterima oleh LCD. SPI adalah sebuah tehnik pengiriman data serial sinkronis. Jadi keberadaan pin ini sangatlah penting.
Lalu, bagaimana proses pengiriman paket data ke LCD ?
SPI adalah sebuah tehnik pengiriman serial sinkronis, jadi kalian tidak perlu menghawatirkan masalah toleransi waktu (sebenarnya ada, tetapi kalian tidak perlu khawatir karena waktu siklus proses AVR sangat cepat).
Baiklah, untuk memulai sesi pengiriman paket, kalian harus mengikuti langkah berikut ini:
1. Buat pin SCL menjadi low.
2. Kalian harus membuat pin !CS menjadi low.
3. Setelah pin !CS low, buat pin SDA menjadi low atau high sesuai dengan bit-n dari data yang akan dikirimkan. Jika bit = 0, maka SDA = low. Jika bit = 1, maka SDA = high. Inggat!!! Bit MSB (bit ke-9) lebih dahulu dikirimkan.
4. Buat pin SCL menjadi high. Saat pin SCL high, LCD akan membaca data dari pin SDA dan menyimpannya di dalam buffer.
5. Buat pin SCL menjadi low kembali sebagai persiapan untuk mengirim bit selanjutnya.
6. Ulangi langkah 3 s/d 5 sampai LSB (bit ke-0) dikirimkan.
7. Jika LSB sudah dikirimkan, buat pin !CS menjadi high kembali sebagai tanda sesi pengiriman paket telah berakhir. Untuk mengirimkan paket selanjutnya, silahkan memulai dari langkah 1.
Berikut adalah ilustrasi dari pengiriman paket data ke LCD N1202.
Lalu bagaimana cara untuk menggambar ke LCD N1202 ?
LCD ini bisa dibilang cukup unik. LCD ini memiliki luas piksel 68 x 96 piksel. Itu artinya ada 68 baris kali 96 kolom. Tapi kita tidak akan menggunakan satuan itu. Satuan yang digunakan adalah 8+4bit halaman kali 96 kolom.
Itu artinya kita tidak bisa menggambar melalui baris, tapi harus melalui halaman, dan tiap halaman memiliki 8-bit kecuali halaman ke-9 yang memiliki 4-bit karena 68 / 8 = 8 sisa 4.
Sebagai contoh sederhana saat kita ingin menggambar huruf A pada halaman 0 kolom 0 di layar.
kolom
0 1 2 3 4 5
0 0 1 1 1 1 0
1 1 0 0 0 0 1
Halaman ke - 0 2 1 0 0 0 0 1
3 1 0 0 0 0 1
4 1 1 1 1 1 1
5 1 0 0 0 0 1
6 1 0 0 0 0 1
7 1 0 0 0 0 1
Untuk lebih jelasnya, kalian bisa membaca datasheet-nya atau melihat langsung dari kode sumber yang saya buat.
Setelah kalian cukup memahami penjelasan di atas, kalian bisa langsung masuk ke mode perangkat keras (maksudnya mengatur dan mempersiapkan perangkat keras).
Berikut adalah gambar skematik beserta pinout dari LCD 1202.
LCD N1202 menggunakan catu daya 3.3V. Kalian bisa menggunakan chip regulator linear LM1117 sebagai penghasil tegangan 3.3V. Jangan pernah menggunakan tegangan lebih dari ini atau LCD kalian akan terbakar!!!
Dalam percobaan pertama, saya akan menggunakan AVR Atmega8 sebagai kelinci percobaan.
Dan bagi kalian yang ingin mempelajari kode sumbernya, silahkan unduh di bawah ini. Kode ini ditulis dengan bahasa C. Jadi para pengguna Bascom, saya minta maaf yang sebesar-besarnya.
Unduh Kode Sumber LCD1202
Berikut ini adalah foto dari LCD N1202 dan komponennya yang sudah saya rakit.
Tampak Depan |
Tampak belakang. Regulator beserta komponen lainnya. |
Lalu, bagaimana hasilnya. Sebagai percobaan pertama, saya akan menggambar pola catur pada layar LCD. Dan hasilnya...
Dengan mempelajari proyek ini, kalian juga bisa belajar bagaimana cara memanfaatkan sumber daya AVR sebaik mungkin. Contoh, dalam proyek tadi kita belajar membuat sebuat port komunikasi SPI dengan format 9-bit secara software.
Hal ini akan sangat membantu jika secara hardware AVR tidak mendukung, kita bisa membuat sebuah port komunikasi dengan perangkat lain secara software. Salah satu contoh yang bisa kita ambil adalah VUSB (https://www.obdev.at/vusb/).
VUSB adalah sebuah paket software yang bisa merubah AVR menjadi perangkat yang bisa berkomunikasi sebagi perangkat USB, baik secara host maupun client. Hal ini sangat membantu karena AVR Atmega, At90, dan Attiny tidak memiliki kemampuan sebagai perangkat USB secara hardware.
Contoh lainnya adalah kita bisa melipat gandakan port USART dengan menggunapan port yang memiliki fungsi Interrupt dan masih banyak lagi.
Sekian saja dulu pos dari domba. Semoga kita bisa bertemu lagi di lain waktu.
Salam domba.
Tidak ada komentar:
Posting Komentar