KOMUNITAS HOBBIYST ELEKTRONIKA - KHE

Diskusi Elektronika => Kategori Mikrokontroller/Robotik => Topik dimulai oleh: jonathan007 pada Januari 01, 2015, 12:49:12 PM

Judul: counter up dengan push button, output lcd 16x2
Ditulis oleh: jonathan007 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
Judul: Re:counter up dengan push button, output lcd 16x2
Ditulis oleh: RizQ 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
Judul: Re:counter up dengan push button, output lcd 16x2
Ditulis oleh: jonathan007 pada Januari 05, 2015, 08:18:38 AM
selain fungsi interrupt, apakah cara lain yang bisa saya lakukan ?
terimakasih
Judul: Re:counter up dengan push button, output lcd 16x2
Ditulis oleh: RizQ 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.

(https://lh3.googleusercontent.com/-CjgTZwzfre8/VK3u_gnv2TI/AAAAAAAAAM4/5l3i0EyGsms/s640/18.jpg)

(https://lh4.googleusercontent.com/-6VZVxdxV5h4/VK3u_YJ5F6I/AAAAAAAAAMw/E0z_EWa4h40/s640/19.jpg)

(https://lh3.googleusercontent.com/-JWg8lvPXG54/VK3u_9ye_iI/AAAAAAAAAM8/g25wuGvkKF4/s640/20.jpg)

(https://lh4.googleusercontent.com/-Zaq16PkdgeI/VK3vAo9QONI/AAAAAAAAANE/vjFB5taGIx8/s640/21.jpg)

(https://lh5.googleusercontent.com/-z34_A_puvPA/VK3vBFmjyKI/AAAAAAAAANI/4TztnkF92yc/s640/22.jpg)
Judul: Re:counter up dengan push button, output lcd 16x2
Ditulis oleh: robin 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);
 }
Judul: Re:counter up dengan push button, output lcd 16x2
Ditulis oleh: cungkrinx pada Pebruari 19, 2015, 01:32:13 PM
ikutan nyimak akh... :D