Kamis, 07 April 2011

Menampilkan data dari mikrokontroler ke LCD 2x16

Ingin menampilkan data dari mikrokontroler ke LCD ...? anda bingung caranya..? Pada postingan kali ini, saya ajak anda untuk belajar bagaimana menampilkan data dari mikrokontroler ke LCD. Untuk mikrokontroler kita menggunakan Atmega 8535 dan LCD 2x16.
Adapun keterangan kaki LCD 2x16 yaitu sebagai berikut:




Untuk hubungan ke mikrokontroler, dalam hal ini kita menggunakan mikrokontroler Atmega8535, kita bisa menggunakan semua PORT baik PORT A, PORTB, PORTC maupun PORTD. Sekarang kita akan menghubungkan LCD ini ke PORTC dari mikrokontroler, berikut ini gambar koneksi antara mikro ke LCD 2x16

Disini kita menggunakan koneksi data 4 bit antara LCD dan mikro. Setelah selesai, membuat rangkaian diatas selanjutnya code program. kita terlebih dahulu membuat file header-nya. berikut file headernya. simpan dengan nama file lcd.h

/* ================================================================

 nama file = lcd.h
 pembuat = Bayu Sasongko, teknik elektro 2008
 deskripsi = file header LCD 4 bit

 file header ini digunakan untuk menampilkan karakter
 ke dalam lcd. copykan file lcd.c dan lcd.h ke dalam
 folder tempat proyek anda berada. untuk konektor LCD
 ke mikrokontroler ikuti aturan berikut ini:

  
  PIN LCD   PIN MIKRO

R/W  (5)   - Ground
VEE   (3)   -  Vcc
   
  RS   (4)     - 0
  EN  (6)  - 1  
  D4  (11) - 4  
  D5 (12) - 5  
  D6  (13) - 6 
  D7 (14) - 7  



  pin R/W hubungkan saja ke ground, karena hanya menggunakan mode
  write saja.
================================================================
*/

#define LCD_PORT PORTC // PORT yang digunakan untuk data
#define LCD_DDR DDRC

// bit used (low(D3-D0) or high nibble(D7-D4)
#define HIGH_NIBBLE // uncomment this if low nibble pin used

#define LCD_RS_PORT PORTC // control RS PORT pin

#define LCD_RS_DDR DDRC // control RS DDR pin

#define RS 0 // RS Pin


#define LCD_E_PORT PORTC // control E PORT pin

#define LCD_E_DDR DDRC // control E DDR pin

#define E 1 // E Pin



void lcd_init (void); // inisialisasi LCD

void goto_xy (uint8_t row,uint8_t column); // koordinat tempat karakter

void clrscr (void); // membersihkan display



Setelah itu kita juga perlu membuat file lcd.c, berikut ini codenya: 

#include <avr/io.h>
#include <stdio.h>
#include "lcd.h"

// used for printf operation
static int lcd_putchar(char c, FILE *stream);
static FILE mystdout = FDEV_SETUP_STREAM(lcd_putchar, NULL,
                                             _FDEV_SETUP_WRITE);
// delay
void delay_us(uint8_t us);

void clock_e (void)
{
LCD_E_PORT |= (1<<E);
delay_us(5);
LCD_E_PORT &= ~(1<<E);
delay_us(3);
}

void write_command(uint8_t command)
{
// clear RS pin
LCD_RS_PORT &= ~(1<<RS);
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|(command&0xf0);
clock_e();
LCD_PORT = (LCD_PORT&0x0f)|((command&0x0f)<<4);
clock_e();
#else
LCD_PORT = (LCD_PORT&0xf0)|((command&0xf0)>>4);
clock_e();
LCD_PORT = (LCD_PORT&0xf0)|(command&0x0f);
clock_e();
#endif
uint8_t i;
for(i=0;i<20;i++)
delay_us(100);
}

void lcd_init (void)
{
uint8_t i;
// delay 15 ms for LCD to power up
for(i=0;i<150;i++)
delay_us(100);
// set all data and control port as output
#ifdef HIGH_NIBBLE
LCD_DDR |= 0xf0;
#else
LCD_DDR |= 0x0f;
#endif
LCD_RS_DDR |= (1<<RS);
LCD_E_DDR |= (1<<E);
// clear RS pin
LCD_RS_PORT &= ~(1<<RS);

// 4 bit mode write squence
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|0x30;
#else
LCD_PORT = (LCD_PORT&0xf0)|0x03;
#endif
clock_e();
// 4.1 ms delay
for(i=0;i<41;i++)
delay_us(100);
clock_e();
// 100 delay
delay_us(100);
clock_e();
// 40 us delay
delay_us(40);
// 4 bit mode setting
// 4 bit 2 line 5 X 7 dot matrix
write_command(0x28);
// increment cursor after write byte
write_command(0x06);
// display on cursor off
write_command(0x0C);
clrscr ();
// set function for printf
stdout = &mystdout;
}

void goto_xy(uint8_t row,uint8_t column)
{
if (row == 1)
write_command (0x80 + column - 1);
else
write_command (0xC0 + column - 1);
}

void clrscr (void)
{
write_command(0x01);
}

static int lcd_putchar(char c, FILE *stream)
{
// set RS pin
LCD_RS_PORT |= (1<<RS);
#ifdef HIGH_NIBBLE
LCD_PORT = (LCD_PORT&0x0f)|(c&0xf0);
clock_e();
LCD_PORT = (LCD_PORT&0x0f)|((c&0x0f)<<4);
clock_e();
#else
LCD_PORT = (LCD_PORT&0xf0)|((c&0xf0)>>4);
clock_e();
LCD_PORT = (LCD_PORT&0xf0)|(c&0x0f);
clock_e();
#endif
// 2 ms delay
uint8_t i;
for(i=0;i<20;i++)
delay_us(100);
return 0;
}

void delay_us(uint8_t us)
{
TCNT0 = 257-us;
TCCR0 |= (1<<CS01);
loop_until_bit_is_set(TIFR,TOV0);
TIFR |= (1<<TOV0);
TCCR0 &= ~(1<<CS01);
}


atau silahkan download file lcd.h dan file lcd.c disini . kalau anda ingin merubah PORT nya misalnya mau ke PORTA ganti saja file lcd.h menjadi PORTA. Setelah file lcd.h dan lcd.c sudah jadi maka selanjutnya kita perlu me-load file tadi ke program avr studio


Selanjutnya di program utama kita perlu meng-include kan file header lcd.h kita ladi. kurang lebih begini tampilan program penampil teks ke LCD


15 komentar:

  1. Kalau pake bahasa assembly gmn gan,, mislanya untuk menampilkan pesan hello word ,, ,
    tolong penjelasanya gan ,, klo bisa kirim ke email saya, effand@ymail.com

    BalasHapus
  2. klo bahasa assembly ane malah gx thu tuh...blum pernah pke assembly

    BalasHapus
  3. Walau lieeeer...
    Tapi mantaaaap... Suwun

    BalasHapus
  4. Setelah itu harus lakukan apalg agar bisa ditampilkan di LCD ny?
    Pilih Platform Programmerny apa?
    Thx

    BalasHapus
  5. sebelumnya ane ucapin mg tambah sukses ja ych bang..
    ane mw nanya ne, ane kan punya sensor ultrasonik + sistim minimumny dengan ATMega8535 + 3 buah relay DC dngan output relay berupa AC 220V (intiny cm sebagai saklar).
    setelah baca2 blog abang untuk menampilkan data jarak dr sensor ultrasonik ke LCD, ane coba dan ternyata berhasil..
    nah, yg mw ane tanyakan ne bang, gimana programnya untuk menghidupkan relay td secara otomatis berdasarkan data dari sensor ultrasonik?
    misal, data jarak ultrasonik 1-300. bila data terbaca antara 0-100 maka relay 1 ON. data 101-200 relay 1 dan 2 ON. data 201-300 relay 1 2 dan 3 ON. diatas 300 relay 1 2 dan 3 OFF dan data 0 relay jg OFF.
    maaf bang, ane cm lulusan SMA tp ane sneng dngn mikrokontroler.. minta petunjuknya bang..thnks

    email ane trapzt69@yahoo.com

    BalasHapus
  6. haturnuhunnn pisaannn semoga ilmuu masss makinn bertammbahhh makinn sukkksess amiiinnn

    BalasHapus
  7. ko aneh keterangan kaki pin satu di lcd GND (-)sedangkan di gambar keterangan koneksi dengan mikro pin LCD pin satu (+) bisa di jelaskan mas? mohon pencerahannya ...sebelumnya makasih mas

    BalasHapus
  8. mas kalo misalnya mau buat simulasi menggunakan AVR ATMega8 dimana ada 3 push button. jika di tekan push button 1 hidup lampu 1 dan di LCD tampil tulisan PB1. jika di tekan push button 2 hidup lampu 2 dan di LCD tampil tulisan PB2. begitu juga dengan push button 3.
    gmn ya simulasi sama programnya??? bisa di buatin gk. kalo bisa tlg krm ke email aq: riska.simaremare@gmail.com


    thx before...

    BalasHapus
  9. nggak bisa di download mas...?

    BalasHapus
  10. void gotoxy (0,0); . declaration syntax error mas. cara ngatasinnya bagaimana...?

    BalasHapus
  11. Mas ada program/sket..untuk. buat runing text dak...untuk buat d arduino..klo ada saya.minta tlng kirimkn ke email .......debyearies@gmail.com

    BalasHapus
  12. Gan kalau ada proyekan ane ngikut ya... :D Kunjungi saya di Jual Arduino

    BalasHapus

Silahkan isi komentar yang dapat membangun blog ini. Atas komentarnya saya ucapkan terimakasih

Related Posts Plugin for WordPress, Blogger...