CCS C DE yaptığım zaman rölesinde sorun var

Başlatan Ahsen_1878, 24 Şubat 2012, 09:28:34

Ahsen_1878

slm arkadaşlar aşağıdaki kodlarla yaptığımn zaman rölesinde
set_tris_a(0xff);
set_tris_b(0x00);
for(;;)
if (input(pin_a1)==1)
{output_high(pin_b1);
delay_ms(2000);}
else
output_low(pin_b1);


pic' in ''porta1'' bitini 1 yaptığımda ''b1''    2 saniye sonra çıkış veriyor anca elimi butondan çektiğimde yani ''porta1'' 0 olunca 2 saniye sonra  portb1=0 oluyor ben istiyorum ki sadece portb1=1 olurken geçikme olsun 0 olurken gecikme olasını istemiyorum acaba kodda hangi değişikliği yapmalıyım yardımınızı bekliyorum

::) ::) ::) ::) ::) :-\ :'( :)

skara1214

burda kullandığınız sonsuz for döngüsünün hiçbir manası yok for(;;) demişsiniz sonra sistemi paranteze almamışsınız.
for(;;)
{
if (input(pin_a1))
{output_high(pin_b1);
delay_ms(2000);}
else
output_low(pin_b1);
}

bu şekilde doğru gibi
Herkes ölür ama herkes gerçekten yaşamaz

justice_for_all

set_tris_a(0xff);
set_tris_b(0x00);
for(;;)
{
  if (input(pin_a1)==1)
  {
       output_high(pin_b1);
       delay_ms(2000);
  }
  else
       output_low(pin_b1);
}
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

Ahsen_1878


justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay


skara1214

çok basit bir kod  ve devre çalışmama ihtimali yok proteustan kaynaklıdır.Yada kristal v.s ayarlarını düzgün yapmamışsındır onları bir kontrol et yada proteusun  tüm ekran resmini ve tüm kodu buraya koyarsan daha faydalı olur
Herkes ölür ama herkes gerçekten yaşamaz

vitruvius

Butona bastığınızda led 2 sn yansın, butondan elinizi çeker çekmez de hemen sönsün mü istiyorsunuz?

Ahsen_1878

evet ustam aynen öle elimi çektiğimde hemen sönmesi gerekiyo

vitruvius

Elinizi çektiğinizde hemen sönmesi için şöyle bir kod yazabilirsiniz:

while(1)
{
while (input(pin_a1))
{
output_high(pin_b1);
}
output_low(pin_b1);
}


2 sn gecikme olayı biraz sıkıntıya sokuyor.

justice_for_all

#10
#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)

unsigned int16 sayac=0;
#int_timer0
void timer0_isr(void)
{
   set_timer0(0); // 1us x 4 x 255 = ~ 1 ms
   sayac++;   ///2 saniyelik zaman  1ms x 2000 = 2 saniye
}
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
   set_tris_a(0xFF);
   output_b(0x00);
   set_tris_b(0x00);
   set_timer0(0);
   enable_interrupts(int_timer0);
   enable_interrupts(global);
   
   while(true)
   {
      if(input(pin_a1))
      {
         if(input(pin_a1) && sayac<=2000) //buton basiliysa ve 2 saniye dolmadiysa
            output_high(pin_b1);
         else
            output_low(pin_b1);
      }
      else
      {
         sayac=0;
         output_low(pin_b1);  
      }

   }

}



yada

   while(true)
   {
      if(input(pin_a1))
      {
         while(input(pin_a1) && sayac<=2000) //buton basiliysa ve 2 saniye dolmadiysa
            output_high(pin_b1);

         output_low(pin_b1);
      }
      else
      {
         sayac=0;
         output_low(pin_b1);  
      }

   }
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

Ahsen_1878

#11
 justice_for_all    hocam  emeğine sağlık çok makbule geçti teşekkürler... :) :) :) :) :D ;D

gokayk

Alıntı yapılan: justice_for_all - 24 Şubat 2012, 11:29:20
#include <16F84A.h>

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz for PCM/PCH , 3mhz to 10 mhz for PCD
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading

#use delay(clock=4000000)

unsigned int16 sayac=0;
#int_timer0
void timer0_isr(void)
{
   set_timer0(0); // 1us x 4 x 255 = ~ 1 ms
   sayac++;   ///2 saniyelik zaman  1ms x 2000 = 2 saniye
}
void main()
{
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_4);
   set_tris_a(0xFF);
   output_b(0x00);
   set_tris_b(0x00);
   set_timer0(0);
   enable_interrupts(int_timer0);
   enable_interrupts(global);
   
   while(true)
   {
      if(input(pin_a1))
      {
         if(input(pin_a1) && sayac<=2000) //buton basiliysa ve 2 saniye dolmadiysa
            output_high(pin_b1);
         else
            output_low(pin_b1);
      }
      else
      {
         sayac=0;
         output_low(pin_b1);  
      }

   }

}



yada

   while(true)
   {
      if(input(pin_a1))
      {
         while(input(pin_a1) && sayac<=2000) //buton basiliysa ve 2 saniye dolmadiysa
            output_high(pin_b1);

         output_low(pin_b1);
      }
      else
      {
         sayac=0;
         output_low(pin_b1);  
      }

   }


Eline sağlık, beklemeyi delay yerine timer ile kullanan nadir kullanıcılardansın :)

gambit1244

kristal 4 mhz olsa bile entegreye sağ tıklayıp ozelliklerine girdiginizde ordaki clock ayarınıda 4mhz yapmalısınız bunu kontrol ettinizmi acaba?

edit. konu çözülmüş şimdi gördüm.
[email]tufan_ozbek@hotmail.com[/email] Yesterday is history. Tomorrow is a mystery. Today is a gift aslında bütün mesele bu.