Button ile süreli led

temel09

Üye
Katılım
16 Eyl 2019
Mesajlar
9
Puanları
3
Yaş
23
merhabalar kolay gelsin ben 16f628a ile bir buton ile röle kontrol etmek istiyorum buton a basıldıgı zaman röle acık uclarını kapatacak buttondan elimi cekince belli bir süre sonra kapatmasını istiyorum if else ile denedim ama yapamadım yardım edermisiniz acaba iyi çalişmlar.



void main() { // ana program başlangıcı
cmcon = 0x07; // PIC16F628A komparatörleri kapatıldı
option_reg = 0x80; // portb'deki pull-up dirençleri aktif edildi
trisa.ra0 = 1; // RA0 pini giriş yapıldı
porta.ra0 = 0; // RA0 pini sıfırlandı
trisb = 0x00; // portb çıkış olarak yönlendirildi
portb = 0x00; // portb'nin bütün pinleri sıfırlandı

while(1) // sonsuz döngü başlangıcı
{
if (porta.ra0) // butona basıldı mı?
{
portb = 0xff; // portb'nin bütün pinlerine lojik 1 gönderildi
delay_ms(100); // 1 saniye beklendi
}
else {
delay_ms(5000);
portb = 0x00;
}
} // sonsuz döngü sonu
} // ana program sonu
 

kudretuzuner

Paylaşımcı üye
Katılım
28 Tem 2009
Mesajlar
902
Puanları
133
Merhaba,İsis şemasını verirseniz programı yazayım.
 

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
749
Puanları
58
Butonun bırakılması haline kadar
"while" içinde beklenebilir. While
bitince gecikme başlar.
 
Konu Sah
T

temel09

Üye
Katılım
16 Eyl 2019
Mesajlar
9
Puanları
3
Yaş
23

Ekli dosyalar

karaapak

Uzman Üye
Katılım
2 May 2011
Mesajlar
1,424
Puanları
209
Yaş
31
Kod:
void main() { // ana program başlangıcı
cmcon = 0x07; // PIC16F628A komparatörleri kapatıldı
option_reg = 0x80; // portb'deki pull-up dirençleri aktif edildi
trisa.ra0 = 1; // RA0 pini giriş yapıldı
porta.ra0 = 0; // RA0 pini sıfırlandı
trisb = 0x00; // portb çıkış olarak yönlendirildi
portb = 0x00; // portb'nin bütün pinleri sıfırlandı

while(1) // sonsuz döngü başlangıcı
{
if (porta.ra0) // butona basıldı mı?
{
delay_ms(20);  //buton arkı bekle
portb = 0xff; // portb'nin bütün pinlerine lojik 1 gönderildi
while(porta.ra0); //buton bırakılana kadar bekle
delay_ms(20);  //buton arkı bekle

delay_ms(5000);  //buton bırakıldıktan sonra ledler söndürülene kadar ne kadar beklenecekse
portb = 0x00; // led söndür

}


} // sonsuz döngü sonu
} // ana program sonu
 

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
749
Puanları
58
Buton arkı gecikmesinden sonra
yine buton basılı mı diye kontrol
etmeliyiz. Basılı ise işlem yapacak,
değilse çıkacak.
 

kudretuzuner

Paylaşımcı üye
Katılım
28 Tem 2009
Mesajlar
902
Puanları
133
Merhaba,ayrıca ben de şu eklemeyi yapayım RA0 pinini 10kohm direnç ile 5 volta bağlayıp butonu da şaselemek için kullanırsanız daha sağlıklı bir çalışma alırsınız.
 

karaapak

Uzman Üye
Katılım
2 May 2011
Mesajlar
1,424
Puanları
209
Yaş
31
buton a basıldıgı zaman röle acık uclarını kapatacak buttondan elimi cekince belli bir süre sonra kapatmasını istiyorum
Altını çizdiğim yeri açmasını diye düşünerek kodu yazdım ben,
ilk oduğuğumda anlamamıştım şimdi anladım
@mehmet.bey 'in niye öyle dediğini :)
 

kudretuzuner

Paylaşımcı üye
Katılım
28 Tem 2009
Mesajlar
902
Puanları
133
Merhaba,

Kod:
;Dt.K.UZUNER  2019
;PORTA HEPSİ GİRİŞ
;PORTB HEPSİ ÇIKIŞ OLARAK AYARALANDI
LIST P=16F628
INCLUDE "P16F628.INC"
SAYAC1 EQU H'20'
SAYAC2 EQU H'21'

;*************
MOVLW H'07';   PORTA GİRİŞLERİ DİGİTAL
MOVWF CMCON
;*************
BSF STATUS,5

MOVLW B'11111111'
MOVWF TRISA

MOVLW B'00000000' 
MOVWF TRISB   

BCF STATUS,5

;*************
CLRF PORTA
CLRF PORTB
;*************
BASLA


BTFSC PORTA,0
GOTO ROLE_KAPA
CALL BEKLE
GOTO ROLE_AC


ROLE_AC
BSF PORTB,7
CALL BEKLE

GOTO BASLA

ROLE_KAPA
BCF PORTB,7

GOTO BASLA
;*********
BEKLE
MOVLW H'FF'
MOVWF SAYAC1
DONGU1
MOVLW H'FF'
MOVWF SAYAC2
DONGU2
DECFSZ SAYAC2,F
GOTO DONGU2
DECFSZ SAYAC1,F
GOTO DONGU1
RETURN
;*********
END

hex ve diğer dosyalar ektedir.
 

Ekli dosyalar

  • 129.9 KB Görüntüleme: 3
Moderatör tarafında düzenlendi:

mehmet.bey

Katılımcı Üye
Katılım
19 Ara 2011
Mesajlar
749
Puanları
58
Debounce konusu biraz anlaşılmamış
gibi duruyor.
Butona basılırken oluşan gerilim sıçramalarından
emin olmak için;
butona basılınca bir şart içine girilir, belli bir süre
(bu örnekte 20mS) beklenir. Yine bir şart ile
hala basılı olup olmadığı kontrol edilir.

Kod:
void main(void)  // ana program başlangıcı
{
    cmcon = 0x07; // PIC16F628A komparatörleri kapatıldı
    option_reg = 0x80; // portb'deki pull-up dirençleri aktif edildi
    trisa.ra0 = 1; // RA0 pini giriş yapıldı
    porta.ra0 = 0; // RA0 pini sıfırlandı
    trisb = 0x00; // portb çıkış olarak yönlendirildi
    portb = 0x00; // portb'nin bütün pinleri sıfırlandı

    while(1) // sonsuz döngü başlangıcı
    {
        if (porta.ra0) // butona basıldı mı?
        {
            delay_ms(20);  //buton arkı bekle
            if(port.ra0)   //20mS bekledikten sonra hala buton basılı mı?
            {
                portb = 0xff; // portb'nin bütün pinlerine lojik 1 gönderildi
                while(porta.ra0); //buton bırakılana kadar bekle
                //delay_ms(20);  //buton arkı bekle
                delay_ms(5000);  //buton bırakıldıktan sonra ledler söndürülene kadar ne kadar beklenecekse
            }
            portb = 0x00; // led söndür
        }
    } // sonsuz döngü sonu
} // ana program sonu
 

Sponsor Bağlantı

Forum istatistikleri

Konular
105,984
Mesajlar
746,614
Kullanıcılar
393,881
Son üye
yurdakul1985

Yeni konular

Üst