PİC 16F876 ile RÖLE KONTROL ACİL YARDIM!!!

spirtless

Üye
Katılım
25 May 2009
Mesajlar
45
Puanları
1
Yaş
36
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;
}
}
 
Rölenin bağlantısını nasıl yaptınız ?

1- Şema ekleyiniz.
2- Röleleriniz kaç volt?
3- Röleyi sürmek için transistör kullanıdnız mı?
4- Röle bacaklarına paralel ters EMK diyotu taktınız mı?
5- Devreyi kaç volt ile beslediniz?

Cevaplarınıza göre donanımda mı yazılımda mı sorun var bakabiliriz.

Not : yazılımdan anlamam ama donanım kısmında sorun varsa gidermenizde yardımcı olabilirim.

Kolay gelsin.
 
rölelerim 5V , bc337 transistör üzerinden sürüyorum. Zıt emk içinde ters diyot bağlantısı yaptım.

Adsız.png
 
Anlattıklarınıza göre devrede sorun göremedim. Yazılım bilgisi olan arkadaşlarımız yardımcı olursa iyi olur.

Kolay gelsin.
 

Forum istatistikleri

Konular
128,169
Mesajlar
915,620
Kullanıcılar
449,933
Son üye
selcukbatman54

Yeni konular

Geri
Üst