Kamis, 09 Maret 2017

ARDUINO GRAPHIC LCD ST7920 128x64 DAN U8GLIB

Graphic LCD adalah LCD dengan banyak dot atau pixel. Jadi penanganannya berbeda dengan LCD character. LCD character kita tulis perkotak karakternya, kalau LCD graphic kita tulisnya perdot. keren kan. 

Sebenarnya Uda belum punya banya pengalaman tentang pemprograman pada Graphic LCD, tapi ga pa pa lah kalau kita coba membahasnya disini. 

Seperti biasa setiap peralatan yang kita pakai di arduino, kita gunakan library sesuai dengan hardware yang kita gunakan. Ada banyak library yang bisa kita pakai untuk graphic LCD seperti openGLCD, GLCD, U8GLIB dan U8G2. 

gambar ini dari hobby components

Tapi karna Uda biasa menggunakan Graphic LCD ST7920 maka hanya U8Glib yang bisa menghandle nya. yang lain hanya untuk chipset KS1080 dan lainnya. U8GLib dapat menghandle banyak chipset graphic LCD. 


Graphic LCD ke banyakan di indonesia adalah GLCD dengan chipset ST7920. Maka kita fokus ke GLCD ini aja ya bray...
Malasah pertama tentunya koneksi arduino dengan GLCD ST7920 ini. Ada dua cara juga untuk instalasinya, yaitu dengan cara serial dan paralel. Cara pemasangannya ada kok di example programnya u8glib itu sendiri.

//U8GLIB_ST7920_128X64_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_128X64_1X u8g(18, 16, 17);           // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);           // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_192X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_192X32_1X u8g(18, 16, 17);           // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_4X u8g(18, 16, 17);           // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_192X32_1X u8g(13, 11, 10);           // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10
//U8GLIB_ST7920_192X32_4X u8g(10);                             // SPI Com: SCK = en = 13, MOSI = rw = 11, CS = di = 10, HW SPI
//U8GLIB_ST7920_202X32_1X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_202X32_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16
//U8GLIB_ST7920_202X32_1X u8g(18, 16, 17);           // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17
//U8GLIB_ST7920_202X32_4X u8g(18, 16, 17);           // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17

Kita tinggal menghilangkan tanda “//” di samping . dan pin ini sepertinya cocok un
tuk arduino MEGA. Kalua kita pasang di arduino UNO, ya kita tinggal robah pinnya sesuai inisial pin di sebelahnya. Uda contohin nih. Misalnya kita mau pasang secara serial pada arduino UNO. Urutan  keempat ya konfigurasinya.


//U8GLIB_ST7920_128X64_4X u8g(18, 16, 17);           // SPI Com: SCK = en = 18, MOSI = rw = 16, CS = di = 17

Kita tinggal robah pin SCK,MOSI,CS sesuai dengan ISPnya arduino UNO

U8GLIB_ST7920_128X64_4X u8g(13, 11, 10);  // arduino pin 13 ke glcd EN, arduino pin 11 ke glcd RW, arduino pin 10 ke glcd DI

Kalau untuk paralel seperti urutan ke dua

//U8GLIB_ST7920_128X64_4X u8g(8, 9, 10, 11, 4, 5, 6, 7, 18, 17, 16);   // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16

Ya tinggal robah sesuai urutan // 8Bit Com: D0..D7: 8,9,10,11,4,5,6,7 en=18, di=17,rw=16 Ya menjadi

U8GLIB_ST7920_128X64_4X u8g(2, 3, 4, 5, 6, 7, 8, 9, 13, 11, 10);  

Lha... tinggal pin 0, 1, 12 aja. Dikit amat... g bisa nginputin apa2 dong di arduino Uno nya. Makanya bray kita pilih serial aja tuh untuk konekin ke arduino UNO. Yang Uda coba pakai arduino Mega kalau pakai 8 bit sih lancar jaya. Dengan banyak pin yang di sisain.
Sekarang metode penulisan sketchnya ya. Library ini memiliki 2 metode penulisan. Pertama langsung di tulis di looping program, yang kedua di tulis di inisialisasi program. Ni contoh penulisannya...
Langsung di tulis di looping.

#include "U8glib.h"
U8GLIB_ST7920_128X64_4X u8g(13, 11, 10);     // arduino pin 13 ke glcd EN, arduino pin 11 ke glcd RW, arduino pin 10 ke glcd DI
void setup(void) {
}
void loop(void) {
u8g.firstPage();
  do {
      u8g.setFont(u8g_font_helvB08);
      u8g.drawStr( 44, 9, "Hallo Bray");  
  } while( u8g.nextPage() );
  delay(200);
}

atau kita panggil dari inisialisasi program seperti ini

#include "U8glib.h"
U8GLIB_ST7920_128X64_4X u8g(13, 11, 10);     // arduino pin 13 ke glcd EN, arduino pin 11 ke glcd RW, arduino pin 10 ke glcd DI

void draw(void) {
   u8g.setFont(u8g_font_unifont);
  u8g.drawStr( 0, 22, "Hallo Bray”);
}
void setup(void) {
}
void loop(void) {
  u8g.firstPage(); 
  do {
    draw();
  } while( u8g.nextPage() );
  delay(200);
}


Sepertinya segitu dulu deh bray. Uda dah ngantuk. Besok-besok kita sambung lagi masih dengan grapich LCD. Soal gambar pemasangan menyusul ya Bray