Haberler:

Foruma Resim Yükleme ve Boyut Sınırlaması ( ! )  https://bit.ly/2GMFb8H

Ana Menü

comparator interrup sorunu

Başlatan MURSEL, 05 Ocak 2008, 19:58:15

MURSEL

#include <16f628.h>
#use delay(clock=4000000)
int a=0;
#INT_COMP
void kesme(void) 
{
output_toggle(pin_b2);
delay_ms(10);

}
main()
{
setup_comparator(A0_A3_A1_A2);

enable_interrupts(INT_COMP);
enable_interrupts(global);
while(1)
{
while(input(pin_b1));
++a;
delay_ms(20);
while(!input(pin_b1));
if(a==24)a=0;
}

}




merhaba arkaşlar her hafta yeni bi soruyla yine ben :) soruna geleyim  pic interrupa 1 kez girdiginde  
#INT_COMP
void kesme(void)
{
while(1)
{
output_toggle(pin_b2);
delay_ms(10);
}
}

sürekli döngünün  içinde  gibi işlem yapıyor  ana programa dönemiyorum gibi bişey sanırım yada  dönüyor tekrar interuba giriyor  

giriş uclarındaki gerilimleri  ve interrup durumunu belirten bi çizelge  yapmaya calışıcam
GİRİŞ   ******        İNTERUP DURUMU

an2 >an0  ****YOK   1 ADIM
AN2=AN0  ****VAR  2 ADIM
AN2<AN0   *** VAR    3 ADIM
AN2>AN0    ***VAR     4 ADIM

SONUÇ OALRAK 4. ADIMDAN SONRA  SÜREKLİ İNTERRUP VAR her koşulda..pici resetleyese kadar:) yanlış yaptıgım nokta nedir  bulamadım...
forumdada araştırma yaptım  comparatorler üzüerinde fazla calışma yok ccs 1 kaçtane  konu var ..

ete

Koparatör interrupt flag'ı olan PIR1 registerinin 6. bitini şayet kesme bölümünde sıfırlamaz isen parogam sürekli kesme pozisyonunda kalır.
Bu nedenle kesme kısmında PIR1.6 biti sıfırlanmalıdır.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

MURSEL

@ete hocam  ccs derleyicisi kendisi yapmıyormu  
PIR1 registerinin 6. bitini
sıfrlamayı  diger interruplarda hiç bi sorun yaşamadım  sadece
#INT_COMP  sorun cıkardı  sadece

.................... enable_interrupts(INT_COMP);
0069:  BSF    03.5    
006A:  BSF    0C.6


.................... void kesme(void)  
.................... {
.................... output_toggle(pin_b2);
*
004A:  BSF    03.5
004B:  BCF    06.2
004C:  MOVLW  04
004D:  BCF    03.5    
004E:  XORWF  06,F


programın oluşturdugu kodlar bunlar.. asm  ye uzagım ama

004D:  BCF    03.5   bukomut ile disable ediliyor sanırm

// buda 5 .ci biti ilgilendiren bi durm gibi?

ete

CCS nin bu biti sıfırlaması lazım ancak anlattıkların sıfırlanmadığını gösteriyor gibi geliyor bana.  O nedenle hatırlatayım  demiştim.

Ete
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

ahmet2004

Şöyle dene...

#include <16f628A.h> 
#use delay(clock=4000000)

int a=0; 

#INT_COMP 
void kesme(void) 
{
   C1OUT = 0;
   output_toggle(pin_b2); 
   delay_ms(10);
}



main() 
{ 
 setup_comparator(A0_A3_A1_A2);
 enable_interrupts(INT_COMP);
 enable_interrupts(global);
 
 while(1)
 {
   while(input(pin_b1));
   ++a;
   delay_ms(20);
   while(!input(pin_b1));
   if(a==24)a=0;
 }
}

MURSEL

cevablarınız için teşekkürler arkadaşlar

sadece kesme programını yazıyorum

#INT_COMP
void kesme(void)
{
  C1OUT = 0;
  output_toggle(pin_b2);
  delay_ms(1000);
   C1OUT = 0;
}
 bu şekilde yapınca sorun cözüldü neden böle oldfuguna gelince bilgim yok :S  

@ahmet 2004

#INT_COMP
void kesme(void)
{
  C1OUT = 0;
  output_toggle(pin_b2);
  delay_ms(10);
}
 

bu şekilde yazınca tam olarak düzenli calışamadı  içerigini bilen arkaşlar  varsa acıklarsa sevinirim ;)

ahmet2004

MURSEL:

Alıntı Yapbu şekilde yazınca tam olarak düzenli calışamadı içerigini bilen arkaşlar varsa acıklarsa sevinirim

CCS programınız hangi versiyon.

Bir'de düzenli çalışmadığını nasıl anladınız...

MURSEL

versiyon 4.058

gözlemledigimde
başlangıç degişken =0
a0<a2 ****inter var****  degişken  1
a0>a2****int yok****   degişken 0
a0<a2 ****inter var****  degişken  1
a0>a2****int yok****   degişken 0
a0<a2 ****inter var****  degişken  1
a0>a2****int yok****   degişken 0


böyle bi durum sergiliyor

#INT_COMP
void kesme(void)
{
C1OUT = 0;
output_toggle(pin_b2);
delay_ms(1000);
}  
eger araya 1 sn lik süreyi koymassam olmuyor 500ms750 ms koyuyorum :S olmuyor 1 sn koyunca düzeliyor  ve ahmet 2004 tek C1OUT = 0;  yazmam yeterliymiş ama delay_ms(1000) olayını çözemedim
donanımın toparlanamsı için gerekli süremidir nedir anlamadım

rree

   Aynı  kesmede takıldı kendi form sitesinde bu şekilde bir öneri var
http://www.ccsinfo.com/forum/viewtopic.php?t=44190&start=4
#byte CMCON = getenv("SFR:CMCON")

#INT_COMP
void  COMP_isr(void) 
{
   int8 Temp;
   Temp=CMCON;
}