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

Jumat, 14 Juli 2017

Aplikasi ATMega32 dengan LED dan PUSH BUTTON



1. Teori [kembali]


LED

     LED (Light Emitting Dioda) adalah dioda yang dapat memancarkan cahaya pada saat mendapat arus bias maju (forward bias). LED (Light Emitting Dioda)  dapat memancarkan cahaya karena menggunakan dopping galium, arsenic dan phosporus. Jenis doping yang berbeda diata dapat menhasilkan cahaya dengan warna yang berbeda. LED (Light Emitting Dioda) merupakann salah satu jenis dioda, sehingga hanya akan mengalirkan arus listrik satu arah saja. LED akan memancarkan cahaya apabil diberikan tegangan listrik dengan konfigurasi forward bias. Berbeda dengan dioda pada umumnya, kemampuan mengalirkan arus pada LED (Light Emitting Dioda) cukup rendah yaitu maksimal 20 mA. Apabila LED (Light Emitting Dioda)  dialiri arus lebih besar dari 20 mA maka LED akan rusak, sehingga pada rangkaian LED dipasang sebuah resistor sebgai pembatas arus. Simbol dan bentuk fisik dari LED (Light Emitting Dioda) dapat dilihat pada gambar berikut.
         LED memiliki kaki 2 buah seperti dengan dioda yaitu kaki anoda dan kaki katoda. Pada gambar diatas kaki anoda memiliki ciri fisik lebih panjang dari kaki katoda pada saat masih baru, kemudian kaki katoda pada LED (Light Emitting Dioda)  ditandai dengan bagian body LED yang di papas rata. Kaki anoda dan kaki katoda pada LED (Light Emitting Dioda) disimbolkan seperti pada gambar diatas. Pemasangan LED (Light Emitting Dioda) agar dapat menyala adalah dengan memberikan tegangan bias maju yaitu dengan memberikan tegangan positif ke kaki anoda dan tegangan negatif ke kaki katoda.

Button Switch

    Push button switch (saklar tombol tekan) adalah perangkat / saklar sederhana yang berfungsi untuk menghubungkan atau memutuskan aliran arus listrik. Sebagai device penghubung atau pemutus, push button switch hanya memiliki 2 kondisi, yaitu On dan Off (1 dan 0).


2.Rangkaian Simulasi [kembali]



Prinsip Keja
Pada aplikasi ini menggunkan ATMega 32, push button dan led. Dimna pushbutton sebagai input yang di hubungkan di port B dan LED sebagai output yang di hubungkan dengan port A. Pada aplikasi ini kita membuat animasi dengan 8 buah LED yang di kontrol dengan PUSH BUTTON dimana kondisi yang kita program seperti tabel berikut ini.

pada tabel terlihat setiap tombol memiki keadan animasi yang berbeda. Dan animasi yang berbeda tersebut kita pogram nantinya.

3.Listing Pogram [kembali]


/*****************************************************
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/30/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 ATmega 32
#include <delay.h>      // library delay

// Declare your global variables here

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

// Input/Output Ports initialization
// Port A initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=Out Func1=Out Func0=Out 
// State7=0 State6=0 State5=0 State4=0 State3=0 State2=0 State1=0 State0=0 
PORTA=0x00; // untuk melakukan inisialisasi PORT A
DDRA=0xFF;  // untuk melakukan inisialisasi DDR A

// 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=0x00; // untuk melakukan inisialisasi PORT B
DDRB=0x00;  // untuk melakukan inisialisasi DDR B

// 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;

while (1) //fungsi pengulangan
      {
      // Place your code here 
      // PORTA=PINB;
         if(PINB.0==0)PORTA=0b11100111;  // jika pin 0 pada port B bernilai 0 atau low maka port a                                                                                menghidupkan LED yang telah di tentukan.
         else if(PINB.1==0)PORTA=0b01010101; // jika pin 1 pada port B bernilai 0 atau low maka                                                                                         port a  menghidupkan LED yang telah di tentukan.
         else if(PINB.2==0)PORTA=0b00100100;
         else if(PINB.3==0)
         {
         PORTA=0b01100110;
         delay_ms(100);
         PORTA=0b11111111;
         delay_ms(100);  // waktu delay
         }
         else if(PINB.4==0)
         {
         PORTA=0b01111111;
         delay_ms(100);
         PORTA=0b10011111;
         delay_ms(100);
         PORTA=0b11001111;
         delay_ms(100);
         PORTA=0b11100111;
         delay_ms(100);
         PORTA=0b11110011;
         delay_ms(100);
         PORTA=0b11111001;
         delay_ms(100);
         PORTA=0b11111100;
         delay_ms(100);
         }
         else if(PINB.5==0)
         {
         PORTA=0b11111100;
         delay_ms(100);
         PORTA=0b11111001;
         delay_ms(100);
         PORTA=0b11110011;
         delay_ms(100);
         PORTA=0b11100111;
         delay_ms(100);
         PORTA=0b11001111;
         delay_ms(100);
         PORTA=0b10011111;
         delay_ms(100);
         PORTA=0b00111111;
         delay_ms(100);
         }
         else if(PINB.6==0)
         {
         PORTA=0b01111110;
         delay_ms(100);
         PORTA=0b10111101;
         delay_ms(100);
         PORTA=0b11011011;
         delay_ms(100);
         PORTA=0b11100111;
         delay_ms(100);
         PORTA=0b11011011;
         delay_ms(100);
         PORTA=0b10111101;
         delay_ms(100);
         PORTA=0b01111110;
         delay_ms(100);
         }
         else if(PINB.7==0)
         {
         PORTA=0b10000001;
         delay_ms(100);
         PORTA=0b11000011;
         delay_ms(100);
         PORTA=0b11100111;
         delay_ms(100);
         PORTA=0b11111111;
         delay_ms(100);
         }

      }
}

4.Video Simulasi [kembali]


5.Download Rangkaian dan Pogram [kembali]

Bisa di download disini dan semoga bermanfaat. :)

Mikrokontroler ATMega 32

            Microcontroller dan microprocessor mempunyai beberapa perbedaan. Jika ditelaah dari artinya maka, microprocessor adalah pengolah mikro sedangkan microcontroller adalah pengendali mikro. Dari pengertian tersebut sebenarnya sudah bisa diketahui perbedaannya dimana microprocessor yang terdapat pada komputer seperti Intel Pentium, hanya dapat bekerja apabila terdapat komponen pendukung seperti RAM (Random Access Memory), hard disk, motherboard, perangkat I/O, dan sebagainya. Komponen-komponen tersebut diperlukan karena microprocessor hanya dapat melakukan pengolahan data, namun tidak dapat menyimpan data, menyimpan program, menerima masukan dari user secara langsung, ataupun menyampaikan data hasil pemrosesan ke keluaran. Berbeda dengan microprocessor, microcontroller sudah dilengkapi dengan komponen komponen yang dikemas dalam satu chip seperti memori, perangkat I/O, timer, ADC (Analog to Digital Converter), dan lain-lain. Hal ini membuat microcontroller lebih tepat untuk digunakan pada aplikasi embedded system.

               Microcontroller AVR (Alf and Vegard’s Risc processor) standar memiliki arsitektur 8bit, dimana semua instruksi dikemas dalam kode 16-bit, dan sebagian besar instruksi dieksekusi dalam 1 (satu) siklus clock. AVR berteknologi RISC (Reduced Instruction Set Computing). AVR dapat dikelompokkan menjadi empat 6 kelas, yaitu keluarga ATtiny, keluarga ATSOSxx, keluarga ATmega, dan AT86RFxx. Pada dasarnya, yang membedakan masing-masing kelas adalah memori, anda dapat mencoba ATmega8 atau ATtiny2313 dengan ukuran Flash Memory 2KB dengan dua input analog.

Berikut adalah fitur yang terdapat pada microcontroller ATmega32 yaitu:

1. Saluran I/O ada 32 buah, yaitu Port A, Port B, Port C, dan Port D.
2. ADC (Analog to Digital Converter) 10 bit sebanyak 8 channel.
3. Tiga buah Timer/Counter.
4. CPU yang terdiri dari 32 buah register.
5. Memiliki 131 instruksi yang membutuhkan 1 siklus clock.
6. Watchdog timer dengan osilator internal.
7. Dua buah timer/counter 8 bit, satu buah timer/counter 16 bit.
8. Tegangan operasi 2.7 V – 5.5 V pada ATmega 16L.
9. Internal SRAM sebesar 1 KB.
10. Memori flash sebesar 32KB dengan kemampuan Read While Write.
11. Unit interupsi internal dan external.
12. Port antarmuka SPI.
13. EEPROM sebesar 512 byte yang dapat diprogram saat operasi.
14. Antarmuka komparator analog.
15. 4 channel PWM.
16. 32x8 general purpose register.
17. Hampir mencapai 16 MIPS pada Kristal 16 MHz.
18. Port USART yang dapat diprogram untuk komunikasi serial.


Konfigurasi PIN 

Gambar : Konfigurasi pin ATMega 32

              Fungsi umum dari susunan pin microcontroller ATmega32 adalah sebagai berikut:

1. VCC merupakan catu daya positif.
2. GND sebagai pin ground catu daya negatif.
3. Port A (PAO..PA7) merupakan pin I/O dua arah dan dapat diprogram
    sebagai pin dari ADC.
4. Port B (PBO..PB7) merupakan pin I/O dua arah dan fungsinya sebagai,
    timer/counter, komparator analog, dan SPI.
5. Port C (PCO..PC7) merupakan pin I/O dua arah dan fungsinya sebagai,
    TWI, komparator analog, dan timer osilator.
6. Port D (PDO..PD7) merupakan pin I/O dua arah dan fungsinya sebagai,
    komparator analog, interupsi eksternal dan komunikasi serial.
7. Reset merupakan pin yang digunakan untuk me-reset microcontroller.
8. XTAL 1 dan XTAL 2 sebagai pin clock eksternal. Pada microcontroller
    membutuhkan sumber (clock) agar dapat mengeksekusi instruksi yang ada di memori. 
    Semakin tinggi nilai kristalnya, maka semakin cepat microcontroller tersebut.
9. AVCC sebagai pin tegangan untuk ADC.
10. AREF sebagai pin tegangan referensi.