Senin, 26 Oktober 2015

Menjalankan LCD Nokia 1202 dengan AVR

Ini adalah pertamakalinya saya membuat pos tentang AVR. Semoga bermanfaat bagi para pengunjung sekalian.





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...
 

Bekerja dengan dan sangat baik. Tapi karena keterbatasan sumber daya dari Atmega8, saya belum bisa melakukan lebih dari ini.



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.

Rabu, 07 Oktober 2015

Memindahkan Direktori /home Ke Partisi Lain di Blankon

Pernahkah kalian mengalami hal ini?


 "Hardisk-ku penuh!!!"





Ya, hardisk penuh merupakan salah satu hal yang sukup menjengkelkan, terutama bagi yang meggunakan sistem operasi GNU/Linux. Ini karena sebagian besar data mereka berada di dalam direktori "/home".


Lalu, kenapa mereka menyimpan data di direktori "/home", bukan di partisi yang lain?




Ini karena, Linux merupakan sisop yang sangat diskriminatif. Sisop ini akan memberikan hak akses yang berbeda bagi setiap berkas yang berada di luar direktori "/" (baca: root). Terutama, yang paling merasakan hal ini adalah programmer. Selain itu menyimpan data di luar direktori /home juga menimbulkan ketidakrapihan dalam penyimpanan data.


Lalu adakah solusinya? Tentu saja ada. Yaitu dengan memindahkan direktori /home beserta datanya ke partisi atau hardisk yang lain dan membuat sistem menganggap bahwa partisi tersebut berada di dalam direktori "/".



Perhatian:
"Tutorial ini hanya bisa bekerja jika kalian sudah membagi hardisk kalian menjadi 2 atau lebih partisi logika, atau jika kalian sudah pergi ke toko komputer dan membeli sebuah hardisk baru (tidak harus baru, yang bekas juga boleh, yang penting masih bisa bekerja)."

"Direktori "/home" tidak hanya berisi data kalian, tetapi juga berisi data konfigurasi sistem itu sendiri. Jadi, diharapkan agar kalian mengikuti langkah-langkahnya secara cermat agar sistem kalian tidak "crash"." 

"Selama menjalankan turorial, diharapkan tidak membuka aplikasi yang lain selain Terminal. Ini untuk meminimalisir terjadi perbedaan konfigurasi antara sebelum dan sesudah pemindahan direktori /home ke partisi lain. Jadi sebaiknya kalian salin terlebih dahulu seluruh tutorial ini ke selembar kertas kosong atau buku catatan."




 Sebelum mulai, kita akan memasang paket yang diperlukan dalam kegiatan ini. Silahkan ketik perintah di bawah ini:

$sudo apt-get install rsync




Langsung saja kita mulai.
Untuk langkah-langkahnya, silahkan lihat di bawah ini:




1. Persiapkan partisi yang akan ditempati oleh "/home". Format menjadi tipe ext3 atau ext4 (Perhatian!! Data kalian di partisi ini akan terhapus).

2. Jalankan terminal dan cari UUID dari partisi tersebut dengan perintah blkid.
   Contoh:
   Saya memiliki sebuah partisi yang akan digunakan berada di /dev/sdb1, sedangkan sistem Linux berada di dalam /dev/sda1.

   $ sudo blkid

   Setelah itu akan muncul seperti ini (ini hanya contoh saja):

    /dev/sda1: UUID="9b9c4b97-d464-446b-b439-542d6f7a7b2b" TYPE="ext4" 
    /dev/sdb1: UUID="6a56cbf6-4a44-45ca-939f-8c79969499f0" TYPE="ext4"

   Yang akan digunakan adalah UUID milik /dev/sdb1.

3. Buatlah cadangan dari berkas fstab (file system table). Berkas ini menyimpan konfigurasi file system kalian, sepeti dimana sebuah partisi akan dikaitkan.
    Ketik perintah di bawah ini:

    $ sudo cp /etc/fstab /etc/fstab.cadangan

4. Buka berkas fstab dengan perintah:

     $ sudo gedit /etc/fstab

    Kemudian buatlah baris baru lalu masukkan konfigurasi seperti di bawah ini:

    UUID=*uuid partisi yang akan digunakan*    /media/home    *format partisi kalian*    defaults    0    2

    Contoh, dengan menggunakan partisi /dev/sdb1 di atas:

    UUID=6a56cbf6-4a44-45ca-939f-8c79969499f0    /media/home    ext4    defaults    0    2

    Kemudian simpan berkas fstab.

5. Buatlah direktori baru dengan perintah:

    $ sudo mkdir /media/home

6. Lakukan pengaitan ulang dengan perintah:

    $ sudo mount -a

7. Salin direktori /home ke partisi yang baru dengan perintah:

    $ sudo rsync -aXS /home/. /media/home/.

     Ini akan memakan waktu lama jika ukuran direktori /home kalian berukuran besar. Apalagi yang isinya penuh dengan film atau anime, hehehe...

    Proses ini harus ditunggu sampai selesai!!!

8. Persiapan untuk pengaitan partisi ke direktori /home.
    Buka fstab dengan perintah:

    $ gedit /etc/fstab

   Lalu rubah baris terakhir yang tadi kita isi dari:
  
    UUID=*uuid partisi yang akan digunakan*    /media/home    *format partisi kalian*    defaults    0    2

   Menjadi:
  
    UUID=*uuid partisi yang akan digunakan*    /home    *format partisi kalian*    defaults    0    2

    Contoh, dengan menggunakan partisi /dev/sdb1 di atas:

    UUID=6a56cbf6-4a44-45ca-939f-8c79969499f0    /media/home    ext4    defaults    0    2

   Menjadi:

   UUID=6a56cbf6-4a44-45ca-939f-8c79969499f0    /home    ext4    defaults    0    2

9. Membuat direktori /home baru untuk menggantikan direktori /home lama.
   Ketik perintah berikut ini:

   $ sudo mv /home /home-lama
   $ sudo mkdir /home

10. Lakukan pengaitan ulang dengan perintah:

     $ sudo mount -a

11. Bukalah nautilus dengan perintah:

      $ nautilus

      Jika nautilus terbuka dengan sempurna berarti kalian sudah mengikuti langkah di atas dengan baik dan cermat.

12. Langkah terakhir, manghapus direktori /home-lama untuk memberi "ruang terbuka dan udara segar" bagi partisi sistem Linux.
      Ketik perintah di bawah ini:

      $ sudo rm -r /home-lama




Sekarang data kalian sudah selamat berada di partisi atau hardik baru yang tentu saja ukuranya lebih besar. Jadi kalian bisa menambah film atau anime data tanpa takut kehabisan ruang lagi.



Dengan cara ini juga, kalian bisa memasang ulang sisem operasi tanpa takut data kalian terhapus jika sistem kalian mengalami kerusakan yang cukup berat (ini terjadi pada mereka yang memiliki bakat sebagai peretas). Ini karena data kalian berada di partisi atau di hardisk yang berbeda dengan sistem Linux kalian.

Sampai jumpa lagi di tutorial berikutnya.  

Salam Domba.



Sembunyikan Berkas Atau Folder Di BlankOn (Nautilus)

Jika kalian adalah pengguna sisop (sistem operasi) GNU/Linux, kalian pasti tahu bahwa di dalam direktori "/home/pengguna" terdapat berkas atau folder yang berisi konfigurasi aplikasi dan sistem (termasuk folder .mozilla yang pernah saya terangkan dalam tutorial memasang firefox).

Tapi, kenapa berkas dan folder tersebut tidak ditampilkan di dalam nautilus atau di dalam terminal ketika kita menggunakan perintah "ls"? Jawabannya adalah, karena berkas tersebut secara default diberikan attribusi hidden (tersembunyi) oleh sistem.

Lalu, apakah kita bisa menyembunyikan berkas atau folder yang dibuat oleh kita? Tentu saja bisa!



Untuk cara pertama, lihat dibawah sini:



Secara default, sistem akan menyembunyikan berkas atau folder yang diberikan tanda "dot" di depan nama berkas atau folder tersebut.

Contoh:
 Saya memiliki sebuah folder bernama "rar" yang ingin disembunyikan.

Buka terminal. Kemudian ketikkan perintah:
$ mv rar .rar
Dengan menambahkan "dot" ke depan nama folder atau berkasa, sistem secara otomatis akan menyembunyikan berkas atau folder tersebut.







 Untuk cara kedua, lihat di bawah sini:



Cara kedua ini dijalankan jika kalian memiliki berkas yang penting dan tidak boleh diganti namanya seperti berkas sistem atau aplikasi.

Contoh:

Saya memiliki folder "kdenlive" dan "rosegarden". Folder ini tidak boleh diganti karena milik aplikasi kdenlive dan rosegarden.

Buka terminal. Kemudian buat berkas baru di direktori yang sama dimana berkas atau folder yang ingin kita sembunyikan berada dengan perintah:

$ gedit .hidden

  Kemudian masukkan nama berkas atau folder yang ingin disembunyikan ke dalam berkas .hidden. Untuk lebih jelasnya kalian bisa meliahat gambar di atas. Setelah itu simpan berkas .hidden tersebut. Setelah itu logout.

Setelah login, kedua folder tersebut tidak akan terlihat karena sudah diberi atribut tersembunyi oleh sistem.





Lalu, bagaimana cara untuk melihat berkas atau folder yang tersembunyi tersebut?




Mudah saja, yaitu dengan menghidupkan opsi "Tampilkan Berkas Tersebunyi" dari pengaturan nautilus atau dengan shortcut Ctrl+H.

Atau kalian bisa juga melalui terminal, yaitu dengan perintah "cd". Contoh:
              
                     $ cd /home/***********/.rar




Dengan tutorial yang saya berikan tadi, kalian bisa menyembunyikan berkas atau folder kalian dari orang-orang yang tidak bertanggung jawab. Tentunya selain dengan cara merubah hak akses-nya.
 






Atau kalian bisa menyembunyikan berkas rahasia kalian, jika kalian tahu maksud saya. hihihi...