PIC18F886 timer0 dönüşü değeler uçuyor

Başlatan CeMiL_mktrnk, 28 Kasım 2013, 10:31:31

CeMiL_mktrnk

Merhabalar,

Şu an yapmakta bulunduğum bir projede timerla ilgili sıkıntı çekiyorum. Timer0 da saydırdığım herhangi bir değişkenin değeri timer0dan çıktığım an anlamsız bir biçimde kayboluyor. Örneğin  20 saniye boyunca adcden bir eşik değerinin üstünde gerilim okursam "switchfault" değişkenini 1 yapmak istiyorum. Her timer0 kesmesinde "counter_switch" değişkenini 1  arttırıyorum, bu kısmı test ettim bu kısım çalışıyor. Fakat timer0 dan döndükten sonra "counter_switch" değişkeni 200 oldu mu diye kontrol ediyorum fakat yok, timer0 dan dönerken her ne oluyorsa değişkenin değerleri uçuyor ve sinirim bozulmaya başladı ilk defa böyle bir şeyle karşılaşıyorum. Bu duruma sebep olacak herhangi bir konfigürasyon ayarı, herhangi bir tanımlama ya da etkileyecek modül vs vs var mı?
Mekatronik Mühendisi/Mechatronic Engineer

JKramer

counter_switch değişkenini nerede, nasıl tanımladınız?

CeMiL_mktrnk

int16 türünde ve en başta tanımladım, yani global
Mekatronik Mühendisi/Mechatronic Engineer

JKramer


CeMiL_mktrnk

Dediğiniz yöntemi denemiştim fakat o da çare etmedi. Başka bir yaklaşımınız var mı?
Mekatronik Mühendisi/Mechatronic Engineer

Tagli

Gökçe Tağlıoğlu

CeMiL_mktrnk

ticari ürün olduğu için kod paylaşımı yapamıyorum :(
Mekatronik Mühendisi/Mechatronic Engineer

serhat1990

Hocam sadece timer ve değişken değerini kontrol ettiğiniz bölümleri aktif  , diğer yerleri pasif ederek deneyebilirsiniz . Çok yoğun programlarda bazen bu tür şeyler gözden kaçabiliyor . Kodda ticari değer teşkil eden bölümleri çıkararak buraya ekleyebilirseniz inceleyebiliriz .

İyi çalışmalar , saygılarımla ...

sadogan

Bari sistem kristali kaç mhz tmr0 interrupt süresi nedir.
Tmr0 için önbölücü varmı vs gibi bilgileri verseydiniz.

CeMiL_mktrnk

Patent için hazırlık var, biraz sıkıntılı şu an durumlar, o yüzden hiç birşey paylaşamıyorum ;D Şimdi kendi kendine düzeldi, ama yarını Allah'a emanet ;D  serhat1990 kardeşim, onu her projemde yapıyorum zaten.
8 Mhz kristal var. 
setup_spi(SPI_SS_DISABLED);
  setup_timer_0(RTCC_INTERNAL | RTCC_DIV_256);
  setup_timer_1( T1_INTERNAL | T1_DIV_BY_8);
  setup_adc_ports( sAN8 |sAN9 | sAN10 | sAN12 | VSS_VDD);
  setup_adc(ADC_CLOCK_DIV_2);         
  setup_ccp1(CCP_PWM);       
  setup_timer_2(T2_DIV_BY_4,249,1);    
  enable_interrupts(INT_timer0);
  disable_interrupts(INT_timer1);
  disable_interrupts(INT_timer2);
  enable_interrupts(GLOBAL);


Bu  da bazı ayarlar
Mekatronik Mühendisi/Mechatronic Engineer

picusta


CeMiL_mktrnk

tam anlayamadım neyi kasteddiğinizi, biraz daha açıklar mısınız
Mekatronik Mühendisi/Mechatronic Engineer

Kabil ATICI

counter_switch değişkenini eşitlik olarak değil de;

counter_switch==200 şeklinde değilde

counter_switch>199 şeklinde değerlendirebilirsiniz. Böylece  herhangi bir sebepten 200 eşiği aşılırsa bir şekilde tepki verilmesi sağlanabilir.
ambar7

CeMiL_mktrnk

onlara dikkat ediyorum dediğiniz şekilde kullanıyorum ama yine de yok yok ???
Mekatronik Mühendisi/Mechatronic Engineer

Kabil ATICI

counter_switch  başka bir yerde kullanmıyorsanız,
bir bayrak bit veya 8 bitlik sabit sayı ataması kullanarak timer0 kesmesi içinde deneyebilirsiniz.


Bayrak =0  ;  //başlangıç değeri olmak üzere

counter_switch gerekli şartı sağladığında
Bayrak=1; ile sabit sayı ataması yapılabilir.

programın counter_switch gerekli şartını kontrol edildiği bölümde
Bayrak==1 olup olmadığı bakılabilir.

Bu derleyici ile ilgili veya işlemci ile ilgili bir sıkıntı da olabilir.
ambar7