Archive for Desember 2013

Interfacing LCD 16x2 dengan AVR Atmega16

    • LCD merupakan device untuk menampilkan keluaran tertentu secara grafis. Dengan LCD, alat yang kita buat dapat menjadi lebih interaktif dengan menampilkan berbagai informasi pada layar LCD. Sebuah LCD 16x2 stardard yang sering digunakan adalah produk HITACHI seri HD44780. 16x2 berarti LCD terdiri dari 16 kolom dan 2 baris. 
      Sebuah LCD standard 16x2 memiliki diagram sebagai berikut:

      pin LCD 16x2


      VSS, merupakan pin power supply GND
      VDD, adalah VCC +5V
      VEE, untuk merubah brightness LCD. Tegangan supply antara +3.5-5V. Pin ini sering dihubungkan dengan potensiometer agar brightness dapat diatur sewaktu-waktu.
      RS, Register Select. Diset untuk mengirimkan command (0) atau data (1).  Command  merupakan perintah tertentu yang akan dijalankan LCD, seperti menampilkan cursor, membuat cursor berkedip, membersihkan tampilan LCD. Dll.
      RW, pin control untuk membaca atau menuliskan data ke LCD. 0 untuk Write dan 1 untuk Read
      E, pin control untuk enable/disable LCD
      D0-D7, merupakan pin data untuk mengirimkan data ke LCD.
      biasanya beberapa tipe LCD terdapat dua pin lagi untuk lampu belakang yang merupakan LED.

      Beberapa Daftar Command LCD

      LCD dapat dihubungkan dengan hanya 4 atau 8 bit pin data. Tentu saja akan lebih efisien jika menggunakan 4 bit pin data.  Pada tutorial ini akan dicontohkan penulisan code untuk   mode 8 dan 4 bit. Terutama mode 4 bit, kita dapat menggunakan library pada CodeVision yakni lcd.h.
      Mode 8 bit
      Untuk dapat menampilkan data ke LCD, kita perlu mengikuti workflow berikut:

      1.    Menggunakan register control untuk menuliskan perintah/data
      void LCD_cmd(unsigned char cmd)
      {
      LCD_DATA=cmd;
      ctrl =(0<<rs)|(0<<rw)|(1<<en); // RS and RW as LOW and EN as HIGH
      _delay_ms(1);
      ctrl =(0<<rs)|(0<<rw)|(0<<en); // RS, RW , LOW and EN as LOW
      _delay_ms(100);
      return;
      }
      2.    Melakukan inisalisasi  LCD dengan mengirim beberapa command untuk membersihkan layar, setting karakter, dll.  Lihat sample code berikut:
      void init_LCD(void)
      {

      LCD_cmd(0x38); // inisialisasi LCD mode 8 bit
      _delay_ms(1);
      LCD_cmd(0x01); // membersihkanlayar
      _delay_ms(1);
      LCD_cmd(0x0E); // menampilkan cursor
      _delay_ms(1);
      LCD_cmd(0x80); //  memulai penulisan karakter pada kolom 0 dan baris 0 pada LCD
      _delay_ms(1);
      return;
      }

      3.    Setelah inisialisasi, selanjutnya set pin RW ke 0 untuk menuliskan data dan melakukan perubahan en dari 1 ke 0 untuk memasukkan data ke LCD.
      void LCD_write(unsigned char data)
      {
      LCD_DATA=data;
      ctrl = (1<<rs)|(0<<rw)|(1<<en); // RW  LOW dan RS, EN HIGH
      _delay_ms(1);
      ctrl = (1<<rs)|(0<<rw)|(0<<en); // EN dan RW LOW dan RS HIGH
      _delay_ms(100); // delay, memberi kesempatan LCD untuk mengeksekusi perintah
      return ;
      }

      Sample Code
      Sample code berikut akan menuliskan karakter “ELINS” pada LCD. 
      //  program untuk menampilkan karakter “ELINS” pada LCD 16x2 
      /*
      LCD   pada mode 8 bit
      #include<avr/io.h>
      #include<util/delay.h>

      #define LCD_DATA PORTC // LCD data port
      #define ctrl PORTD
      #define en PB6 // enable signal
      #define rw PB5 // read/write signal
      #define rs PB4 // register select signal
      #define F_CPU 11059200


      void LCD_cmd(unsigned char cmd);
      void init_LCD(void);
      void LCD_write(unsigned char data);
      void LCD_write_string(unsigned char data[]);

      int main()
      {
      DDRC=0xff; //  inisialisasi port C sebagai output
      DDRD=0x70; //  port D pin PD4,5,6 sebagai ouput
      init_LCD(); // inisialisasi LCD
      _delay_ms(50); // delay  50 ms
      unsigned  char j[]="ELINS"; // array
      int i;
      LCD_write_string(j); menuliskan string ke LCD
      return 0;
      }

      void init_LCD(void)
      {

      LCD_cmd(0x38); // inisialisasi LCD mode 8 bit
      _delay_ms(1);
      LCD_cmd(0x01); // membersihkanlayar
      _delay_ms(1);
      LCD_cmd(0x0E); // menampilkan cursor
      _delay_ms(1);
      LCD_cmd(0x80); //  memulai penulisan karakter pada kolom 0 dan baris 0 pada LCD
      _delay_ms(1);
      return;
      }

      void LCD_cmd(unsigned char cmd)
      {
      LCD_DATA=cmd;
      ctrl =(0<<rs)|(0<<rw)|(1<<en); // RS and RW as LOW and EN as HIGH
      _delay_ms(1);
      ctrl =(0<<rs)|(0<<rw)|(0<<en); // RS, RW , LOW and EN as LOW
      _delay_ms(100);
      return;
      }
      void LCD_write(unsigned char data)
      {
      LCD_DATA=data;
      ctrl = (1<<rs)|(0<<rw)|(1<<en); // RW  LOW dan RS, EN HIGH
      _delay_ms(1);
      ctrl = (1<<rs)|(0<<rw)|(0<<en); // EN dan RW LOW dan RS HIGH
      _delay_ms(100); // delay, memberi kesempatan LCD untuk mengeksekusi perintah
      return ;
      }
      void LCD_write_string(unsigned char j[]) 
      // fungsi untuk mengirim beberapa karakter ke LCD
      {
          int i=0;
          while(j[i]!='\0')
          {
              LCD_write(j[i]);
              i++;
              _delay_ms(10);
          }
          return;
      }


      Compile code diatas dengan Code Vision/Atmel Studio (Atmel AVR untuk versi sebelum v.6).
      Test code tersebut pada proteus. Buat scematic seperti berikut pada ISIS proteus:


      Ads not by this site

      Pin 32 dan 30 dihubungkan ke VCC, karena kita menggunakan AREF sebagai referensi ADC. Untuk tahu lebih detil tentang interfacing ADC, luangkan untuk membaca post INI.

      Pastikan Frekuensi krital pada X1, dan U1 sama dengan setting F_CPU pada code.  Double click pada U1, dan berikan setting seperti berikut.  Pada program file, masukkan alamat lengkap untuk code HEX hasil compile. 


    • Posted by kutuSolder
    • 2 Comments
    • Tag :
    • Readmore . . .
    • Add Comment
Selamat datang di situs Kutu Solder™. Mohon maaf atas keterbatasan yang ada di situs ini, Admin masih belajar dan terus belajar dalam dunia elektro dan blogger. Terimakasih telah berkunjung ke blog saya. Copyright ©2014 Kutu Solder™