Kamis, 27 Juli 2017

Aplikasi ATMega32 dengan LCD dan Counter Push Button



1.Teori [kembali]


LCD (Liquid Crystal Display) adalah suatu jenis media tampil yang menggunakan kristal cair sebagai penampil utama. LCD sudah digunakan diberbagai bidang misalnya alal–alat elektronik seperti televisi, kalkulator, ataupun layar komputer. Pada bab ini aplikasi  LCD yang dugunakan ialah LCD dot matrik dengan jumlah karakter 2 x 16. LCD sangat berfungsi sebagai penampil yang nantinya akan digunakan untuk menampilkan status kerja alat. Adapun fitur yang disajikan dalam LCD ini adalah :
a.      Terdiri dari 16 karakter dan 2 baris.
b.      Mempunyai 192 karakter tersimpan.
c.       Terdapat karakter generator terprogram.
d.      Dapat dialamati dengan mode 4-bit dan 8-bit.
e.       Dilengkapi dengan back light.



Cara kerja LCD 2*16 secara umum
             Pada aplikasi umumnya RW diberi logika rendah “0”. Bus data terdiri dari 4-bit atau 8-bit. Jika jalur data 4-bit maka yang digunakan ialah DB4 sampai dengan DB7. Sebagaimana terlihat  pada table diskripsi, interface LCD merupakan sebuah parallel bus, dimana hal ini sangat memudahkan dan sangat cepat dalam pembacaan dan penulisan data dari atau ke LCD. Kode ASCII yang ditampilkan sepanjang 8-bit dikirim ke LCD secara 4-bit atau 8 bit pada satu waktu. Jika mode 4-bit yang digunakan, maka 2 nibble data dikirim untuk membuat sepenuhnya 8-bit (pertama dikirim 4-bit MSB lalu 4-bit LSB dengan pulsa clock EN setiap nibblenya). Jalur kontrol EN digunakan untuk memberitahu LCD bahwa mikrokontroller mengirimkan data ke LCD. Untuk mengirim data ke LCD program harus menset EN ke kondisi high “1” dan kemudian menset dua jalur kontrol lainnya (RS dan R/W) atau juga mengirimkan data ke jalur data bus.
       Saat jalur lainnya sudah siap, EN harus diset ke “0” dan tunggu beberapa saat (tergantung pada datasheet LCD), dan set EN kembali ke high “1”. Ketika jalur RS berada dalam kondisi low “0”, data yang dikirimkan ke LCD dianggap sebagai sebuah perintah atau instruksi khusus (seperti bersihkan layar, posisi kursor dll). Ketika RS dalam kondisi high atau “1”, data yang dikirimkan adalah data ASCII yang akan ditampilkan dilayar. Misal, untuk menampilkan huruf “A” pada layar maka RS harus diset ke “1”. Jalur kontrol R/W harus berada dalam kondisi low (0) saat informasi pada data bus akan dituliskan ke LCD. Apabila R/W berada dalam kondisi high “1”, maka program akan melakukan query (pembacaan) data dari LCD. Instruksi pembacaan hanya satu, yaitu Get LCD status (membaca status LCD), lainnya merupakan instruksi penulisan. Jadi hampir setiap aplikasi yang menggunakan LCD, R/W selalu diset ke “0”. Jalur data dapat terdiri 4 atau 8 jalur (tergantung mode yang dipilih pengguna), DB0, DB1, DB2, DB3, DB4, DB5, DB6 dan DB7. Mengirim data secara parallel baik 4-bit atau 8-bit merupakan 2 mode operasi primer. Untuk membuat sebuah aplikasi interface LCD, menentukan mode operasi merupakan hal yang paling penting.
           Mode 8-bit sangat baik digunakan ketika kecepatan menjadi keutamaan dalam sebuah aplikasi dan setidaknya minimal tersedia 11 pin I/O (3 pin untuk kontrol, 8 pin untuk data).Sedangkan mode 4 bit minimal hanya membutuhkan 7-bit (3 pin untuk kontrol, 4 pin untuk data). Bit RS digunakan untuk memilih apakah data atau instruksi yang akan ditransfer antara mikrokontroller dan LCD. Jika bit ini di set (RS = 1), maka byte pada posisi kursor LCD saat itu dapat dibaca atau ditulis. Jika bit ini di reset (RS = 0), merupakan instruksi yang dikirim ke LCD atau status eksekusi dari instruksi terakhir yang dibaca.

2.Rangkaian Simulasi [kembali]


Prinsip Kerja
Pada percobaan kali ini kita menggunakan Mikrokontroller ATMega 32 dan  LCD sebagai output. Dimna LCD dihubungkan dengan port A. Sedangkan untuk push button sebagai fungsi counter pada percobaan kedua. Dimna port B sebagai input pada push button. Ada dua kondisi pada percobaan ini:

1. Menampilkan Running Text Pada LCD
2.Menampilkan Data Count Pada LCD dengan PUSH BUTTON

3.Listing Pogram [kembali]


1. Pogram menampilkan running text pada LCD

//Running text
#include <mega32.h>   //library atmega32
#include <alcd.h>     //library lcd
#include <delay.h>    //librarry delay
char kolom=0;         //inisialisasi kolom 0
void main (void)      // fungsi utama
{
lcd_init(16);      //untuk penggunaan lcd 16
while (1)          // looping
{
for(kolom=0;kolom<=15;kolom++) //dari kolom 0 sampai kolom 15 menambah satu satu
{
lcd_clear();              //membersihkan layar
lcd_gotoxy(0,0);           // mulai di kolom 0 baris 0
lcd_putsf(" UNAND ");      // mencetak tulisan
lcd_gotoxy(kolom,1);       //kolom eldi jalan satu satu kolom
lcd_putsf("TEKNIK ELEKTRO");         // tulisan eldi
delay_ms(100);          // delay 100 ms
}
}
}


2.Pogram Menampilkan Data Count Pada LCD dengan PUSH BUTTON

/*****************************************************
This program was produced by the
CodeWizardAVR V2.05.0 Evaluation
Automatic Program Generator
© Copyright 1998-2010 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : 
Version : 
Date    : 7/31/2017
Author  : Freeware, for evaluation and non-commercial use only
Company : 
Comments: 


Chip type               : ATmega32
Program type            : Application
AVR Core Clock frequency: 16.000000 MHz
Memory model            : Small
External RAM size       : 0
Data Stack size         : 512
*****************************************************/

#include <mega32.h> // library atmeg 32
#include <stdlib.h> 
// Alphanumeric LCD Module functions
#include <alcd.h> //library mengaktifkan LCD

// Declare your global variables here
//eprom
int data=0;
unsigned char tampil[6];
bit status_up=0,status_down=0;

#define tombol_up     PINB.1
#define tombol_down   PINB.0
#define on            0
#define off           1

void main(void) //fungsi utama
{
// Declare your local variables here

// Input/Output Ports initialization
// Port A initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTA=0x00;
DDRA=0x00;

// Port B initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTB=0x03;
DDRB=0x03;

// Port C initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTC=0x00;
DDRC=0x00;

// Port D initialization
// Func7=In Func6=In Func5=In Func4=In Func3=In Func2=In Func1=In Func0=In 
// State7=T State6=T State5=T State4=T State3=T State2=T State1=T State0=T 
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: Timer 0 Stopped
// Mode: Normal top=0xFF
// OC0 output: Disconnected
TCCR0=0x00;
TCNT0=0x00;
OCR0=0x00;

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: Timer1 Stopped
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

// Timer/Counter 2 initialization
// Clock source: System Clock
// Clock value: Timer2 Stopped
// Mode: Normal top=0xFF
// OC2 output: Disconnected
ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

// External Interrupt(s) initialization
// INT0: Off
// INT1: Off
// INT2: Off
MCUCR=0x00;
MCUCSR=0x00;

// Timer(s)/Counter(s) Interrupt(s) initialization
TIMSK=0x00;

// USART initialization
// USART disabled
UCSRB=0x00;

// Analog Comparator initialization
// Analog Comparator: Off
// Analog Comparator Input Capture by Timer/Counter 1: Off
ACSR=0x80;
SFIOR=0x00;

// ADC initialization
// ADC disabled
ADCSRA=0x00;

// SPI initialization
// SPI disabled
SPCR=0x00;

// TWI initialization
// TWI disabled
TWCR=0x00;

// Alphanumeric LCD initialization
// Connections specified in the
// Project|Configure|C Compiler|Libraries|Alphanumeric LCD menu:
// RS - PORTA Bit 0
// RD - PORTA Bit 1
// EN - PORTA Bit 2
// D4 - PORTA Bit 4
// D5 - PORTA Bit 5
// D6 - PORTA Bit 6
// D7 - PORTA Bit 7
// Characters/line: 16
lcd_init(16);
lcd_clear();
lcd_gotoxy(0,0);
lcd_putsf("COUNTER LED");
lcd_gotoxy(0,1);
lcd_putsf("DATA:");


while (1)
      {
      // Place your code here
       if (tombol_up==off) status_up=on;
       if ((tombol_up==on)&(status_up==on)) { data++;
                                              if (data>=1000){ data=1000;} 
                                              status_up=off;
                                              lcd_clear();
                                                 }
       if (tombol_down==off) status_down=on;
       if ((tombol_down==on)&(status_down==on)) {
                                                  data--;  
                                                  status_down=off;
                                                  lcd_clear();
                                                  if (data<1) { data=0;}
                                                     }
     
      lcd_gotoxy(0,0);
      lcd_putsf("COUNTER LCD");
      lcd_gotoxy(0,1);
      lcd_putsf("DATA COUNT:");                                           
      itoa(data,tampil); 
      lcd_gotoxy(12,1);
      lcd_puts(tampil);
       
      }

}

4.Video Simulasi [kembali]




5.Dowload Rangkaian dan Pogram [kembali]


Bisa di download disini dan semoga bermanfaat. :)

http://www.mediafire.com/file/n88r66gojamtvol/LCD_COUNTER.rar

Tidak ada komentar:

Posting Komentar