yaptığım devre bir türlü çalışmıyor

Başlatan serdar546, 04 Nisan 2014, 17:28:50

serdar546

arkadaşlar üniversiteliyim bir projem var. altta vereceğim linkte proteus'ta kurulu devre ve c kodları var. acaba bilgili birileri kodları derlememde bana yardımcı olabilirler mi ?

http://s3.dosya.tc/server20/F20yhP/XX.rar.html

#include <16F628a.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOMCLR //sigortalar ayarlanıyor, iç kristal kullanılacak ve mclr pullup kullanılmayacak
#use fast_io(b)  //hızlı giriş çıkış ayarı
#use fast_io(a)
#use delay(clock=4MHZ) //kristal ayarı
#byte INTCON=0x0B
#byte PIE1=0x8C

int i,sn,dk,saat;

int a=0;

#int_timer0

serdar()
{
   set_timer0(217);
   
 if(a=1) {
   
   i++;
   
   if(i==100)
   {sn++;i=0;}
   if(sn==60)
   {dk++;sn=0;}
   if(dk==60)
   {saat++;dk=0;}
   
   if(saat<=4)
   {output_high(PIN_A7);}
   if(saat>=4)
   {output_low(PIN_A7);}
   if(saat==8)
   {saat=0;}
}
}

void main()
{
   enable_interrupts(global);
   enable_interrupts(int_timer0);
   setup_timer_0(rtcc_internal | rtcc_div_256);
   set_timer0(217);
   
  
   
   
INTCON=0b11000000;
PIE1=0b00100000;
   set_tris_b(0x00);
   set_tris_a(0x00);
   output_a(0x00);
 

delay_ms(10000);

output_high(PIN_A2);

delay_ms(10000);

output_low(PIN_A2);

 for(;;){
   if(input(PIN_B0))
   {a=1;}
   }
}
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

Salih

#1
iki yerde düzeltme yaptım.

Hex dosyası.

https://dl.dropboxusercontent.com/u/20087162/Pic_Program/nem.hex

#include <16F628a.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOMCLR //sigortalar ayarlanıyor, iç kristal kullanılacak ve mclr pullup kullanılmayacak
#use fast_io(b)  //hızlı giriş çıkış ayarı
#use fast_io(a)
#use delay(clock=4MHZ) //kristal ayarı
#byte INTCON=0x0B
#byte PIE1=0x8C

int i,sn,dk,saat;

int a=0;

#int_timer0

void serdar() // Dönüş değeri olmadığı için uyarı veriyordu. Hata değil.
{
   set_timer0(217);
   
 if(a==1) {// Burada  a=1 yazmışsın. Burası mantıksal hatalı idi düzelttim.
   
   i++;
   
   if(i==100)
   {sn++;i=0;}
   if(sn==60)
   {dk++;sn=0;}
   if(dk==60)
   {saat++;dk=0;}
   
   if(saat<=4)
   {output_high(PIN_A7);}
   if(saat>=4)
   {output_low(PIN_A7);}
   if(saat==8)
   {saat=0;}
}
}

void main()
{
   enable_interrupts(global);
   enable_interrupts(int_timer0);
   setup_timer_0(rtcc_internal | rtcc_div_256);
   set_timer0(217);
      
INTCON=0b11000000;
PIE1=0b00100000;
   set_tris_b(0x00);
   set_tris_a(0x00);
   output_a(0x00); 

delay_ms(10000);

output_high(PIN_A2);

delay_ms(10000);

output_low(PIN_A2);

 for(;;){
   if(input(PIN_B0))
   {a=1;}
   }
}

serdar546

acaba siz isiste denediniz mi çalıştı mı ? ben denedim fakat çalışmıyor
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

Salih

#3
Programda kesme çalışmıyordu. Düzelttim. 10 ms bir kesme oluşuyor.
Artık 4 saat bekleyerek sen denersin. :)
Hex dosyasını yeniledim. İndirebilirsin.
Pin_A6 çıkışını osilaskopa bağlayarak kesme süresini ölçebilirsin.
Şeman dada hatalar vardı. Düzeltilmiş halini indirebilirsin.
https://dl.dropboxusercontent.com/u/20087162/Pic_Program/nem.DSN
#include <16F628a.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOMCLR //sigortalar ayarlanıyor, iç kristal kullanılacak ve mclr pullup kullanılmayacak
#use fast_io(b)  //hızlı giriş çıkış ayarı
#use fast_io(a)
#use delay(clock=4MHZ) //kristal ayarı

int i,sn,dk,saat;

int a=0;

#int_timer0

void serdar()
{
   Output_toggle(Pin_A6);
   set_timer0(217);
   
 if(a==1) {   
   i++;   
   if(i==100)
   {sn++;i=0;}
   if(sn==60)
   {dk++;sn=0;}
   if(dk==60)
   {saat++;dk=0;}
   
   if(saat<=4)
   {output_high(PIN_A7);}
   if(saat>=4)
   {output_low(PIN_A7);}
   if(saat==8)
   {saat=0;}
}
}

void main()
{   
   setup_timer_0(rtcc_internal | rtcc_div_256);
   set_timer0(217);
   enable_interrupts(global);
   enable_interrupts(int_timer0);
   set_tris_b(0xFF);
   set_tris_a(0x00);
   output_a(0x00); 

delay_ms(10000);

output_high(PIN_A2);

delay_ms(10000);

output_low(PIN_A2);

 for(;;){
   if(input(PIN_B0))
   {a=1;}
   }
}

serdar546

led i 1dk ya ayarladım butona basınca gayet sağlıklı çalışıyor. ama bir sorun var diğer butona basınca röleyi çekmiyor :)
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

Salih


serdar546

#6
nem sensörü yazdığım, birde simulasyonu çalıştırdıktan 20 sn sonra butona bastığımda kesme oluşuyor
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

Salih

Anladığım kadarıyla şöyle yaptım. Bir incele.
#include <16F628a.h>
#fuses INTRC_IO,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOCPD,NOMCLR //sigortalar ayarlanıyor, iç kristal kullanılacak ve mclr pullup kullanılmayacak
#use fast_io(b)  //hızlı giriş çıkış ayarı
#use fast_io(a)
#use delay(clock=4MHZ) //kristal ayarı
#Define m_on   output_high(Pin_A0)
#Define m_off  output_Low(Pin_A0)
#Define nem_on input(Pin_B7)


int8 i,sn,dk,saat,a=0;
int16 zr=0; //zaman rölesi değişkeni

#int_timer0
void serdar()
{
   if (zr == 0) m_off; 
   if (zr > 0)  zr--;
     
 if(a==1) {   
   i++;   
   if(i==100)
   {sn++;i=0;}
   if(sn==60)
   {dk++;sn=0;}
   if(dk==60)
   {saat++;dk=0;}
   
   if(saat<=4)
   {output_high(PIN_A7);}
   if(saat>=4)
   {output_low(PIN_A7);}
   if(saat==8)
   {saat=0;}   
}
set_timer0(217);
} 

void main()
{   
   setup_timer_0(rtcc_internal | rtcc_div_256);
   set_timer0(217);
   enable_interrupts(global);
   enable_interrupts(int_timer0);
   set_tris_b(0xFF);
   set_tris_a(0x00);
   output_a(0x00); 

 for(;;)
 {
   if(input(PIN_B0))  a=1;
   if(nem_on)  {zr=1000;m_on;}
 }
}

serdar546

abi ben sana adamın dibisin desem az mı demiş olurum :)
Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.

Salih

Alıntı yapılan: serdar546 - 04 Nisan 2014, 23:23:46
abi ben sana adamın dibisin desem az mı demiş olurum :)

Bir şey deme.
Öğrendikçe sende başkalarına yardım et.

serdar546

Çalışmak bizi şu üç şeyden kurtarır; Can sıkıntısı, kötü alışkanlıklar, yoksulluk.