Penulis Topik: counter up dengan push button, output lcd 16x2  (Dibaca 2802 kali)

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Offline jonathan007

  • Newbie
  • *
  • Tulisan: 2
counter up dengan push button, output lcd 16x2
« pada: Januari 01, 2015, 12:49:12 PM »
siang,
saya mau nanya untuk counterup dengan push button.
saya sudah berhasil counting ketika push button ditekan (aktive low)
pertanyaan saya apakah bisa hanya menghitung 1x bila push button ditekan terus sampai push button tsb dilepas. kemudian push button tersebut ditekan lagi dan melakukan hal yang sama sampai dilepas kembali ?
karena masalah yang saya hadapi ketika push button saya tekan terus, maka dia akan counting terus menerus.
terlepas dari penggunaan DELAY.
 
jika bisa, mohon bantuan untuk program yang harus ditambahkan.

chip yang saya gunakan atmega8535, software cvavr.

terima kasih  ;D

Offline RizQ

  • Full Member
  • ****
  • Tulisan: 130
Re:counter up dengan push button, output lcd 16x2
« Jawab #1 pada: Januari 02, 2015, 01:46:16 PM »
Coba gunakan fungsi interrupt, pada AVR ada 4 mode : Low Level, Any change, Falling Edge dan Rising Edge. Coba cari buku AVR Book tulisan Mohammed Adel EL.Shaer,  Chapter 3 membahas External Interrupt. buku ini menggunakan CodeVision AVR

Offline jonathan007

  • Newbie
  • *
  • Tulisan: 2
Re:counter up dengan push button, output lcd 16x2
« Jawab #2 pada: Januari 05, 2015, 08:18:38 AM »
selain fungsi interrupt, apakah cara lain yang bisa saya lakukan ?
terimakasih

Offline RizQ

  • Full Member
  • ****
  • Tulisan: 130
Re:counter up dengan push button, output lcd 16x2
« Jawab #3 pada: Januari 08, 2015, 10:10:27 AM »
Ini cuplikan buku AVR (AVR Book) dari EL.Shaer :
Gambar terakhir menunjukan hasil dari berbagai mode interupt. Signal Interrupt pada simulasi menggunakan Function Generator, bisa juga diganti dengan push-on. Pada kondisi normal POTRA.0 - PORTA.2 = 1, ketika interrupt terjadi, kode di bawah interrupt akan dijalankan dalam hal ini POTRA.0 - PORTA.2 = 0. Pada pilihan mode interrupt Low level, selama interrupt terjadi, maka kode dibawah interrupt akan dijalankan.










Offline robin

  • Newbie
  • *
  • Tulisan: 1
Re:counter up dengan push button, output lcd 16x2
« Jawab #4 pada: Januari 29, 2015, 01:08:57 AM »
Coba Test Source Code Di bawah Ini.
Semoga Bermanfaat.

/******************************************************************************
' Name Project    : Penghitungan Nomor Antrian                                '
' Microcontroller : PIC16F877A                                                '
' Crystal         : 4 Mhz                                                     '
' Copyright       : 2010@RWorotikan                                           '
' Revision        : 2013@RWorotikan                                           '
******************************************************************************/

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;

char PS_1[]="NOMOR ANTRIAN";
char PS_2[]="LOKET -> 1" ;
char PS_3[]="LOKET -> 2" ;
char PS_4[]="LOKET -> 3" ;
char PS_5[]="LOKET -> 4" ;
char PS_6[]="LOKET -> 5" ;

unsigned int angka = 0;
char *digit = "000";

void Tunda(){
Delay_ms(280);
}

void Tampilan_nilai()
{
 digit[0] = (angka/100)%10 +48;
 digit[1] = (angka/10)%10 + 48;
 digit[2] = angka%10 +48;
 Lcd_Out(2,1,digit);
}

void main()
{
 CMCON = 0x07;
 TRISB = 0x00;
 PORTB = 0xC0;
 TRISC = PORTC = 0b11111111 ;
 TRISD = PORTD = 0xFF ;
 Lcd_init();
 Lcd_cmd(_LCD_CLEAR);
 Lcd_cmd(_LCD_CURSOR_OFF);
 Lcd_out(1,1,PS_1);
 Delay_ms(2600) ;
 PORTD = 0x00 ;
 
 do{
   if(Button(&PORTC,2,0,0)){
                            Tunda() ;
                            angka = angka +1;
                            Lcd_out(1,1,PS_1);
                            Lcd_out(2,7,PS_2);
                            PORTD = 0x01 ;
                           }
  if(Button(&PORTC,4,0,0)){
                             Tunda() ;
                             angka = angka +1;
                             Lcd_out(1,1,PS_1);
                             Lcd_out(2,7,PS_3);
                             PORTD = 0x02 ;
                             }
   if(Button(&PORTC,5,0,0)){
                             Tunda() ;
                             angka = angka +1;
                             Lcd_out(1,1,PS_1);
                             Lcd_out(2,7,PS_4);
                             PORTD = 0x04 ;
                             }
    if(Button(&PORTC,6,0,0)){
                             Tunda() ;
                             angka = angka +1;
                             Lcd_out(1,1,PS_1);
                             Lcd_out(2,7,PS_5);
                             PORTD = 0x08 ;
                             }
    if(Button(&PORTC,7,0,0)){
                             Tunda() ;
                             angka = angka +1;
                             Lcd_out(1,1,PS_1);
                             Lcd_out(2,7,PS_6);
                             PORTD = 0x10 ;
                             }
    if(Button(&PORTC,3,0,0)){
                             Tunda() ;
                             angka = angka -1;
                             Lcd_cmd(_LCD_CLEAR);
                             Lcd_out(1,1,PS_1);
                             PORTD = 0x00 ;
                             }
    if (angka > 500  )
            angka = 0;
    Tampilan_nilai();
   
    } while(1);
 }

Offline cungkrinx

  • Hero Member
  • ********
  • Tulisan: 672
    • omrin
Re:counter up dengan push button, output lcd 16x2
« Jawab #5 pada: Februari 19, 2015, 01:32:13 PM »
ikutan nyimak akh... :D