buton sorununu cözemedim?

Başlatan cundep, 28 Şubat 2011, 18:52:41

cundep

#include <16F877a.h>
#fuses XT
#use delay(clock=4000000)
#use fast_io(a)
#use fast_io(b)



void main(void)
{


setup_ccp1(CCP_PWM);
setup_timer_2(T2_DIV_BY_16,124,1);




while(true)
{
if(input(pin_a1)==1)  // a1 butonu  basıldı  zaman yazılım sorunsuz  calışıyor
{

output_high(pin_b3);
delay_ms(5000);
output_low(pin_b3);

set_pwm1_duty(124);
delay_ms(3000);
set_pwm1_duty(10);
delay_ms(1000);
set_pwm1_duty(124);
}
if (input(pin_a0)==1)  /// fakat 2. buton işlevi olan  pin_ a0 ile pin _a1   beraber calışmıyor. sadece pin_a1 calışıyor

{
while(!input(pin_a0)==1);     //  a0 butonuna  basıldıgı zaman  b0 pini  1 olsun
                                             //   a0  butonundan elimizi cektiğimiz zaman b0 pini 1 olarak  kalsın
output_toggle(PIN_B0);     //   tekrar  a0 butonuna  basıldıgı zaman  b0 pini  0 olsun
                                          //     tekrar a0  butonundan elimizi cektiğimiz zaman b0 pini 0 olarak  kalsın
                   sonuc olarak (pin_b0)....1-0-1-0-1-0.....olarak devam etsin istiyorum  ama yazılımda bir hata  var anlayamadım calıştramıyorum
}
}
}


benim  yapmak istegim a0 butuna basıldıgı  zaman if{}  arasındaki  işlevi  yapsın a1butonuna bastıgım zaman if{}arasındaki işlevini yapsın
kısacası iki işlevi bir arada calıştıramiyorum  bana yardım  ederseniz   cokmemnun olurum  birde ccs c ile  ilgili :) özel  egitim alabilecegim  kurumlar yada egitimci arkadaşlar varsa cok memnun  olurum   

fahri-

butona basınca ne olduğunu görmek için şema lazım. ona göre cevap verilebilir.

Ferhat Özdemir

delay_ms kullandığından sorun olusturabilir. Cunku her delay komutunda dongu delay suresince bekleyecektir. Sorun muhtemelen ondandir. Ayrica buton için kontak sicramasini onmelen gerekiyor. ek bir dongu ve ek bir delay süresi kontak sicramasini engelleyecektir.


eseneren

arkadasın dedıgı gıbı while(!input(pin_a0)==1); satırın altına denemek ıcın 500 ms delay koy dugmeye bas cek.
buradaki ! ozellıkle konulmus dıye dusunuyorum kod acıklamaları ıle anlamadım ne olacagını...

Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

cundep

sorunu  cözemesemde   cevap  verdiğiniz  için cok  teşekkür  ederim
bu  siteyi  yapanlardan ALLAH razı olsun  :) teşekkürler

eseneren

bu arada delay_ms(5000);  ccs ıcın manuelıne bak en fazla delay_ms(255) olabılır.
Sorunu tam anlasam yardımcı olmak ısterım
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

scaemteitn

#6
if (input(pin_a0)==1)  /// fakat 2. buton işlevi olan  pin_ a0 ile pin _a1   beraber calışmıyor. sadece pin_a1 calışıyor

{

                                             //   a0  butonundan elimizi cektiğimiz zaman b0 pini 1 olarak  kalsın
output_toggle(PIN_B0);     //   tekrar  a0 butonuna  basıldıgı zaman  b0 pini  0 olsun
                                          //     tekrar a0  butonundan elimizi cektiğimiz zaman b0 pini 0 olarak  kalsın
                   sonuc olarak (pin_b0)....1-0-1-0-1-0.....olarak devam etsin istiyorum  ama yazılımda bir hata  var anlayamadım calıştramıyorum
while(input(pin_a0)==1);     //  a0 butonuna  basıldıgı zaman  b0 pini  1 olsun
}

bide böyle denermisin.

tam olarak ccs yi bilmiyorum ama anladığım kadarı ile  while(!input(pin_a0)==1); input pina0 1 değilken burada dön demek. sistem de bakıyo   pina0 = 1 ve devamında sürekli olarak toggle komutunu icra ediyo. o kadar hızlı tıoggle yapıyo ki insan gözü onu göremez. onun için while komutunu sona aldım eğer butona basılı ise sitem orada bekler mantığı ile. inş. olmuştur.

bide bu ccs de analog dijital ayarı nasıl yapılıyo? çünkü kullandığın portlar analog bacakar belki default olarak analog ayarlıyodur. dijital için, kod yazman gerekebilir.

eseneren

scaemteitn 100micro saniye kararsız 1 ve 0 oluyorsa sonda da olsa while komutu sonda olması fayda etmeyecek gibi geliyor ban....
Seçim yapmak için durum hakkında bilgi sahibi olmak zorunda değilsin, sonucuna hazır olmak için durum hakkında kaygılanırsın.  http://bit.ly/gixfTk

salih18200

#8
if (input(pin_a0)==1)  /// fakat 2. buton işlevi olan  pin_ a0 ile pin _a1   beraber calışmıyor. sadece pin_a1 calışıyor

{
delay_ms(2000);  buraya gecikme koyarsan sorun kalmaz

while(!input(pin_a0)==1);     //  a0 butonuna  basıldıgı zaman  b0 pini  1 olsun
{                                      //   a0  butonundan elimizi cektiğimiz zaman b0 pini 1 olarak  kalsın
delay_ms(500);     
output_toggle(PIN_B0);     //   tekrar  a0 butonuna  basıldıgı zaman  b0 pini  0 olsun 
                                     //     tekrar a0  butonundan elimizi cektiğimiz zaman b0 pini 0 olarak  kalsın
                   sonuc olarak (pin_b0)....1-0-1-0-1-0.....olarak devam etsin istiyorum  ama yazılımda bir hata  var anlayamadım calıştramıyorum
}

cundep

yazılımın calısıp calışmadıgını xpkits adı  olan bir deneme kartında gercekleştiriyorum
yazılımın calışıp  çalışmadıgını ordan anlıyorum....