Dalam aplikasi embedded system, kadang dibutuhkan suatu HMI (Human Machine Interface) untuk menjembatani antara cara kerja mesin dan indra manusia. Misalnya untuk masukan suatu seting, user juga harus dapat melihat parameter feedback dari sistem yang diseting seperti penambahan dan pengurangan suatu nilai variabel. Salah satu HMI yang paling populer adalah penampil LCD. Salah satunya adalah jenis ALPHANUMERIC LCD yang tergolong murah. Jenis ini mempunyai  standar karakter yang sudah di disain oleh manufakturnya dan jumlah tersebut  masih sangat terbatas bila kita butuh simbol atau tampilan huruf sesuai dengan keinginan kita.

LCD Custom Character

Sebenarnya kita bisa membuat menuliskan karakter sendiri yang mungkin digunakan untuk membuat animasi pada aplikasi HMI yang kita buat. Saat anda mengirimkan kode ASCII seperti karakter  ‘X’ ke module LCD, kontroler pada module akan mencari data tersebut di ROM (Read Only Memory) yang sudah default tersedia pada module LCD dan menampilkannya menjadi karakter  ‘X’ pada 5×8 / 5×7 pixel tergantung jenis LCD yang digunakan. Karakter  generator ROM memiliki 192 bit maps yang terdiri dari alphabet, nomor, tanda baca, huruf kanji Jepang dan Symbol yunani. ROM tersebut sudah menjadi satu dalam kontroler LCD, misal jenis HD44780.

HD444780 2x16 (M16)

Karakter-karakter tersebut sudah diprogram secara read only dan tidak dapat dirubah oleh end user. Perusahaan pembuatnya juga menyediakan alternatif simbol pada ROM untuk bahasa Eropa dan Asia.  Meskipun demikian, sebagian besar LCD yang beredar hanya memiliki ROM dengan karakter standar. Alphanumeric LCD  controllers tidak memperbolehkan  anda untuk mengontrol pixel secara individu, misalnya mematikan dan menghidupkan satu pixel alphanumeric. Jika tidak bisa mengubah ROM dan juga mengontrol pixel secara individu, bagaimana bisa membuat karakter sendiri pada LCD?.

Jawabnya ‘mudah’, dalam kontroler ada 64byte RAM (Random Access Memory) yang berfungsi sama seperti karakter generator (CG) ROM. Saat kontroler menerima kode ASCII, code yang masuk dalam tabel maping CG RAM akan menggunakan pola bit yang disimpan pada RAM untuk kemudian dituliskan pada LCD. Nah, walaupun  anda tidak bisa merubah isi (CG) ROM, tetapi masih bisa merubah nilai pada (CG) RAM dan menuliskan karakter anda sendiri.

Setiap byte pada CG RAM terpetakan pada pola 5bit pixel garis horisontal dan 7/8bit pixel garis vertikal, tergantung jenis LCD yang digunakan. Kapasitas CG RAM adalah 64bytes dan cukup untuk menampung delapan karakter buatan sendiri. Karakter tersebut seperti kode ASCII dengan nilai 0 sampai 7, yang normalnya digunakan untuk kode kontrol untuk menandakan transimisi data serial atau membunyikan bel pada terminal. Karena pada LCD fungsi tersebut tidak digunakan, designer LCD menyediakannya untuk (CG) RAM.

Menulis data ke CG RAM seperti menggerakkan cursor ke posisi tertentu pada display dan menampilkan karakter pada lokasi yang baru. Langkah – langkahnya lumayan mudah tetapi memang membutuhkan low level programming dan kita akan berurusan dengan register, command dan perintah – perintah pada LCD.  Tetapi untuk pengguna CodeVision AVR, mendefinisikan karakter sendiri dan menuliskannya pada LCD adalah hal yang sangat mudah semudah copy dan paste :D

Pada CodeVisionAVR sudah disediakan library untuk LCD yang mempunyai controller bertipe HD44780 atau persamaanya. Dalam library tersebut sudah tersedia fungsi untuk menuliskan data byte ke karakter generator atau display RAM fungsinya adalah sebagai berikut:

void lcd_write_byte(unsigned char addr, unsigned char data);

fungsi diatas bertipe “void” (tidak memberikan feedback data sewaktu fungsi tersebut selesai dikerjakan). Yang dimaksud dengan “unsigned char addr” adalah alamat dari lokasi yang akan ditulisi (CG RAM) bertipe unsigned int. Sedangkan “unsigned int data” adalah nilai data yang akan dituliskan ke LCD, data bertipe unsigned int.

Langkah pertama untuk membuat dan menampilkan karakter sendiri adalah membuat pola karakter bitmap seperti yang kita inginkan. Seperti terlihat pada gambar dibawah ini:

LCD custom characters

Pada gambar diatas adalah contoh bila kita ingin membuat karakter panah kecil pada satu kolom karakter LCD. Jumlah byte vertikal ada 8 untuk LCD dengan matrix 5×8 dan bila LCD yang digunakan mempunyai resolusi 5×7, hal tersebut tidak menjadi masalah, tinggal menyesuaikan ukuran design karakter yang akan dibuat dengan resolusi tiap kolom pada LCD. Sebagai contoh adalah gambar diatas, kita bisa membuat array dari data bitmap yang telah kita buat data tersebut bisa ditulis dengan biner, hexa maupun desimal. Contoh untuk penulisan dengan biner.

flash unsigned char karakterku[8]={0b00000,0b00100,0b00010,0b11111,0b00010,0b00100,0b00000,0b00000,};

atau sama dengan hexa:

flash unsigned char karakterku[8]={0x00,0x03,0x02,0x1F,0x02,0x03,0x00,0x00,};

atau sama dengan desimal:

flash unsigned char karakterku[8]={0,4,2,31,2,4,0,0,};

Nah sekarang kita sudah mempunyai array bertipe flash unsigned char yang berisi data bitmap panah seperti gambar diatas. Kemudian langkah selanjutnya adalah membuat fungsi untuk definisi karakter dari bitmap yang telah dibuat sebelumnya untuk  disimpan dalam CG RAM. Fungsi standar definisi karakter seperti pada manual book CodeVisionAVR adalah sbb:

void define_char(unsigned char flash *pc,unsigned char char_code){
byte i,a;
a=(char_code<

Fungsi diatas betipe “void” sedangkan variabelnya bertipe flash unsigned char dan unsigned char dimana variabel pertama adalah data pointer ke data flash (data bitmap) yang akan disimpan pada CG RAM sedangkan variabel yang kedua adalah alamat CG RAM untuk menyimpan data tersebut.

Setelah membuat fungsi seperti diatas, langkah selanjutnya adalah menyimpan data bitmap ke CG RAM dengan menggunakan fungsi diatas. Caranya adalah sebagai berikut:

define_char(karakterku,0);

setelah data bitmap tersimpan dalam CG RAM, Bila karakter bitmap panah kecil ingin ditampilkan di LCD tinggal tulis aja..

misalkan di kolom 0 baris 1 LCD:

lcd_gotoxy(0,0);
lcd_putchar(0);

Selesai, karakter panah sudah tertampil di LCD. Jangan lupa menaikkan index alamat CG RAM bila anda membuat lebih dari satu karakter. Silahkan dikomeng, ane tunggu..

Silahkan juga kalo ada yang berminat dengan contoh program jadinya dan tentu saja disertai dengan simulasi Proteus ISIS. Request aja dikolom komentar gratis :D

Herlambang Aribowo.

Tagged with:  

8 Responses to Membuat Karakter Sendiri (Custom Character) Pada LCD HD44780 Dengan CodeVisionAVR

  1. tanto says:

    saya minta contoh list programnya dong mas. . . kirim ke email saya. . soalnya saya belum bisa kalo pake codevision. . (nurtantomwibowo@yahoo.com)

    thks

  2. ratman says:

    mas, saya minta source codenya lengkapnya , boleh khan? Trims ya.. (yratman@yahoo.com)

  3. Angga_yudistira says:

    Mantep… matep lah pokoke

  4. mas boleh minta tolong kirim program jadinya ke e-mail saya? kalau boleh tolong kirim ke e-mail saya mas (malik_tortoise@yahoo.com)

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

[+] kaskus emoticons