PIC 16F876 İLE RÖLE KONTROLÜ NASIL YAPILIR?

Başlatan spirtless, 19 Haziran 2016, 13:44:28

spirtless

Arkadaşlar merhaba,
Pic16F876 ile röle kontrolü yapmak istiyorum. Röleler C portuna bağlı A portunda buton mevcut , B portunda ise yeşil-kırmızı led ve buzzer mevcuttur. Devreyi hazır hale getirdim.Devrede herhangi bir problem yok. Ancak röle kontrolünde tıkandım. Çünkü ben C portunun c0, c1 ve c2 çıkışlarına bilgi gönderdiğim halde rölelerden sadece bir tanesi sürekli çekip bırakırken , birisi sürekli çekiyor , diğeri ise hiç çekmiyor. Problem %90 programdan kaynaklı gibi geliyor. Programı defalarca kez yazdım ancak problemi çözemedim. Bu konuda bana yardımcı olabilir misiniz?

#include <16F876.h>

#fuses PROTECT,NODEBUG,NOWRT,NOCPD,NOLVP,NOBROWNOUT,PUT,WDT,HS

#use delay(clock=4000000)

int i,k,j,m,n,l,s,v = 0;

void main()
{   
   setup_adc_ports(NO_ANALOGS);   
   setup_adc(ADC_OFF);     
   setup_spi(SPI_SS_DISABLED);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   
   set_tris_a(0xff);    //a portu giriş
   set_tris_b(0x00);    //b portu cıkıs
   set_tris_c(0x00);    // c portu cıkıs
   output_b(0x00);      //b portunu sıfırla 
   output_c(0x00);      //c portunu sıfırla 
    
while(1)    //sonsuz döngüye giriliyor..   
   {     
   for (v=0 ; v<7 ; v++)
   {
   if (v==0)
   {
   output_low(pin_c0);
   output_low(pin_c1);
   output_low(pin_c2);
   
if(input(pin_a0) && input(pin_a1) && input(pin_a2))
   {     
         delay_ms(20);
         Output_high(pin_b1);   // kahve-siyah ok
         Output_high(pin_b3);   // sarı-siyah ok
         Output_high(pin_b5);   // kahve-sarı ok
         delay_ms(250);
   }
   } 

   else if (v==1)
    {
    
    output_low(pin_c0);
    output_low(pin_c1);
    output_low(pin_c2);
    delay_ms(20);
    output_low(pin_c0);
    output_high(pin_c1);
    output_low(pin_c2);
   
 if (input(pin_a1)&& input(pin_a2)&& !input(pin_a0))
   { 
         delay_ms(20);        
         Output_high(pin_b2);   // kahve-siyah red
         Output_high(pin_b3);   // sarı-siyah ok
         Output_high(pin_b5);   // kahve-sarı ok  
         
for(i=0; j<5 ; j++)
   {      
         output_high(pin_b0); 
         delay_ms(100);              // aralıklı buzzer çal   
         output_low(pin_b0);
         delay_ms(100);
   }
   }
   }          
   else if (v==2)
    {
        output_low(pin_c0);
        output_low(pin_c1);
        output_low(pin_c2);
        delay_ms(20);
        output_high(pin_c0);
        output_high(pin_c1);
        output_low(pin_c2);
      
 if (input(pin_a0) && input(pin_a1) && !input(pin_a2))  
   { 
        delay_ms(20); 
        Output_high(pin_b1);   // kahve-siyah ok
        Output_high(pin_b3);   // sarı-siyah ok
        Output_high(pin_b6);   // kahve-sarı red
       
for(i=0; i<5 ; i++)
   {                     
         output_high(pin_b0); 
         delay_ms(100);              // aralıklı buzzer çal   
         output_low(pin_b0);
         delay_ms(100);
   }
   } 
   }  
   else if (v==3)
    {   
        output_low(pin_c0);
        output_low(pin_c1);
        output_low(pin_c2);
        delay_ms(20);
        output_low(pin_c0);
        output_low(pin_c1);
        output_high(pin_c2);
   
 if (input(pin_a0) && input(pin_a2) && !input(pin_a1))  
   { 
         delay_ms(20);   
         Output_high(pin_b1);   // kahve-siyah ok
         Output_high(pin_b4);   // sarı-siyah red
         Output_high(pin_b5);   // kahve-sarı ok 
         
for(i=0; k<5 ; k++)
   {                           
         output_high(pin_b0); 
         delay_ms(100);              // aralıklı buzzer çal   
         output_low(pin_b0);
         delay_ms(100);
   }
   }
   }
   else if (v==4)
    {
          output_low(pin_c0);
          output_low(pin_c1);
          output_low(pin_c2);
          delay_ms(20);
          output_low(pin_c0);
          output_high(pin_c1);
          output_low(pin_c2);
   
 if (input(pin_a1)&& !input(pin_a2)&& !input(pin_a0))   
   { 
         delay_ms(20); 
         Output_high(pin_b2);   // kahve-siyah red
         Output_high(pin_b3);   // sarı-siyah ok
         Output_high(pin_b6);   // kahve-sarı red
         
for(i=0; n<5 ; n++)
   {                          
         output_high(pin_b0); 
         delay_ms(100);              // aralıklı buzzer çal   
         output_low(pin_b0);
         delay_ms(100);
   }
   }
   }
    else if (v==5)
    {     
          output_low(pin_c0);
          output_low(pin_c1);
          output_low(pin_c2);
          delay_ms(20);
          output_low(pin_c0);
          output_low(pin_c1);
          output_high(pin_c2);
   
 if (input(pin_a2)&& !input(pin_a1)&& !input(pin_a0))
   {    
         delay_ms(20);
         Output_high(pin_b2);   // kahve-siyah red
         Output_high(pin_b4);   // sarı-siyah red
         Output_high(pin_b5);   // kahve-sarı ok
         
for(i=0; l<5 ; l++)
   {                          
         output_high(pin_b0); 
         delay_ms(100);              // aralıklı buzzer çal   
         output_low(pin_b0);
         delay_ms(100);
   } 
   }
   }
    else if (v==6)
    {    
         output_low(pin_c0);
         output_low(pin_c1);
         output_low(pin_c2);
         delay_ms(20);
         output_high(pin_c0);
         output_low(pin_c1);
         output_low(pin_c2);
   
   if (input(pin_a0)&& !input(pin_a1)&& !input(pin_a2))  
   {     
         delay_ms(20);
         Output_high(pin_b1);   // kahve-siyah ok
         Output_high(pin_b4);   // sarı-siyah red
         Output_high(pin_b6);   // kahve-sarı red 
         
for(i=0; m<5 ; m++)
   {                            
         output_high(pin_b0); 
         delay_ms(100);              // aralıklı buzzer çal   
         output_low(pin_b0);
         delay_ms(100);
   } 
   }
   }
   
   else
        { 
        delay_ms(20);
        output_b(0x00);      //b portunu sıfırla
        i,k,j,m,n,l,s = 0;   
        }
   } 
        delay_ms(20);
        output_b(0x00);
        output_c(0x00);
        i,k,j,m,n,l,s,v = 0; 
  }
  }


nemesis83

devre şemanıda eklersen iyi olur

buton ve rölelerin öncesinde pull up direnç kullandın mı?

rölelerin öncesinde transistör tetiklemen var mı görmem lazım