Button ile süreli led

temel09

Üye
Katılım
16 Eyl 2019
Mesajlar
11
Puanları
1
Yaş
28
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
 
Merhaba,İsis şemasını verirseniz programı yazayım.
 
Butonun bırakılması haline kadar
"while" içinde beklenebilir. While
bitince gecikme başlar.
 

Ekli dosyalar

  • Ekran Alıntısı.PNG
    Ekran Alıntısı.PNG
    18.1 KB · Görüntüleme: 19
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
 
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.
 
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 :)
 
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

  • temel_1.rar
    129.9 KB · Görüntüleme: 3
Moderatör tarafında düzenlendi:
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
 

Forum istatistikleri

Konular
129,867
Mesajlar
930,872
Kullanıcılar
452,732
Son üye
erencok

Yeni konular

Çevrimiçi üyeler

Geri
Üst