Butonlarda debounce önleme ?

Başlatan baran123, 19 Haziran 2014, 02:03:20

baran123

Bu şey beni sinir ediyor basit bir devre yapıyorum basıyorum olmuyor çok artma oluyor falan filan bunu en minimize nasıl ederiz öğrenci olduğumdan elimde osilaskop da yok 100n nasıl olur buton bağlantı şeması vs öneriniz var mı bir zener diyot işe yarar mı bir projede görmüştüm ?

AsHeS

Bunu en iyi yazılımla önlersiniz.
Örnek olması için aşağıda veriyorum.
struct button_control_s
{
        uint8_t  bc_button_state;
        uint8_t  bc_past_button_state;
}__attribute__((packed));

struct button_control_s button_control = {0, 0};


int main()
{
        init_timer();
};



void timer_20_ms_int()
{
        button_control.bc_button_state = read_pin_state;
       
        if(button_control.bc_button_state != button_control.bc_past_button_state &&  button_control.bc_past_button_state == 1)/*Yükselen kenarda perform_button_click_event fonk. çağrılır.*/
        {
                perform_button_click_event(button_control.bc_button_state);
                button_control.bc_past_button_state = button_control.bc_button_state;

        };
};

tekosis

#2
 
while(buton==1)   //buton basılı ise buraya girer
{
delay_ms(20);
while(buton==1) {}   //buton basılı olduğu müddetçe burada bekler 
delay_ms(20);  //artık buton basılı değildir ne olur ne olmaz 20msn daha bekle
}


şema için ise bu programa göre şöyle yapabilirsin.
- butonun bir ucu "+" diğer ucu 1k dirençte.
- direncin diğer ucu şasede
- direnç ile butonun birleştiği nokta picin giriş olan pinine bağlanır
- butona paralel bir 100nf iyi olur.
bu şekilde butona basılı değilken giriş direnç üzerinden"0" seviyesinde olurken basılınca "1" olur. bu yapıya pull-down denir.
İlim ilim bilmektir, ilim kendin bilmektir, sen kendin bilmezsin, bu nice okumaktır.

z

#3
char Buton()
{
char a;
        a=0;
Oku:
        a=((a<<1) | GetButon()) & 7;
        ShortDelay();
        a=((a<<1) | GetButon()) & 7;
        ShortDelay();
        a=((a<<1) | GetButon()) & 7;
        if (a==7) return(1);
        if (a==0) return(0);
        ShortDelay();
        goto Oku;
}


goto begenmezseniz degistirin.
Bana e^st de diyebilirsiniz.   www.cncdesigner.com

sadogan

Donanımsan çözmek istersen bu devre çok işe yarıyor.


a.zorba

yukardaki devreyi bende kullanıyorum belirtmek istedigim püf nokta,  100n pic e nekadar yakın okadar iyi.

Bilenler bilir . Biz maraşlilar için şehir olarak şubat ay' i bayram ,kurtuluş ,yaz in gelmesiydi. Şimdi karalar in yas in ayı oldu.

selimkoc

Blogumdaki buton kontrolü isimli yazımda bu konu hakkında açıklamalar yapmıştım. Faydalı olması dileğimle...

baran123

Herkese teşekkürler birde zener diyot kullanılan devreler var onlar işe yarar mı ?

Melih1802


Erol YILMAZ

Bu konu mcu programlamaya başlayanların ilk çözdüğü konulardan olmalı.

Ve kendi başına çözmelidir.

Bu çözülemeyip, yardıma ihtiyaç oluyorsa, zaten program yazmak mümkün olmaz.

interrupter

Butonun iki ucu arasına küçük değerli bir kondansatör konulabilir. Yada yazilimsal olarak buton okunduktan sonra  bir miktar bekleme yapilabilir.

CLR

#11
Knowledge and Experience are Power

sfiber

Alıntı yapılan: AsHeS - 19 Haziran 2014, 02:06:45
Bunu en iyi yazılımla önlersiniz.
Örnek olması için aşağıda veriyorum.
struct button_control_s
{
        uint8_t  bc_button_state;
        uint8_t  bc_past_button_state;
}__attribute__((packed));

struct button_control_s button_control = {0, 0};


int main()
{
        init_timer();
};



void timer_20_ms_int()
{
        button_control.bc_button_state = read_pin_state;
       
        if(button_control.bc_button_state != button_control.bc_past_button_state &&  button_control.bc_past_button_state == 1)/*Yükselen kenarda perform_button_click_event fonk. çağrılır.*/
        {
                perform_button_click_event(button_control.bc_button_state);
                button_control.bc_past_button_state = button_control.bc_button_state;

        };
};




Hocam şu struct olayini bir turlu kavrayamadim.

AsHeS

Alıntı yapılan: sfiber - 19 Haziran 2014, 22:16:46


Hocam şu struct olayini bir turlu kavrayamadim.
Sırasıyla gidelim hocam neresinden itibaren kafanızda hiçbir şey belirmedi ?