Pic ile röle kontrolü

Mikro c den anlayan yardımcı olabilecek bi arkadaş yok mu?
 
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;
}
}
 

Forum istatistikleri

Konular
128,179
Mesajlar
915,658
Kullanıcılar
449,940
Son üye
yavuzturan

Yeni konular

Geri
Üst