timer_1 le başım dertte

Başlatan modernherakles, 02 Nisan 2008, 15:52:17

modernherakles

arkadaşlar aşagıda yazdığım programa göre led in 1sn.yanıp bir saniye sonuk kalması gerekiyor.
kesme süresi=(fosc/4)8*(65536-63036)=0.02sn formulune göre
kullandığım osilatör 4mhz

fakat proteuste çalıstırdığımda;
yaklaşık 30sn. yanık kalıp yine aynı 30sn sonra sönüyor çok basit bir problem olmasına ragmen sebebini bulamadım sizce problem nerden kaynaklanıyor??
Program:

#include "C:\Documents and Settings\bilgisayarım\Desktop\ultra_high\timer_kesmesi\timer0.h"
#include delay(4000000)
#use fast_io(b)
int i=0;
#int_timer1
void timer1_kesme()
{
  set_timer0(65036);
  i++;
  if(i==50)
     output_high(pin_b0);
  if(i==100)
     {
     output_low(pin_b0);
     i=0;
     }
}
void main()          //ana program
{

  setup_adc_ports(NO_ANALOGS);
  setup_adc(ADC_OFF);
  setup_psp(PSP_DISABLED);
  setup_spi(FALSE);
  setup_wdt(WDT_OFF);
  setup_timer_0(RTCC_INTERNAL);
  setup_timer_2(T2_DISABLED,0,1);
  setup_oscillator(False);

  // TODO: USER CODE!!
set_tris_b(0x00);
output_b(0x00);
setup_timer_1(T1_INTERNAL | T1_DIV_BY_8);
set_timer0(65036);
enable_interrupts(INT_timer1);
enable_interrupts(GLOBAL)  ;
while(1);
}
If we hear, we forget; if we see, we remember; if we do, we understand – Confucius

XX_CİHAN_XX

Alıntı yapılan: "modernherakles"
..........
fakat proteuste çalıstırdığımda;
yaklaşık 30sn. yanık kalıp yine aynı 30sn sonra sönüyor çok basit bir problem olmasına ragmen sebebini bulamadım sizce problem nerden kaynaklanıyor??
..........

Proteustan  :P
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

mihri

Timer 1 kesme alt programında  set_timer0(65036);  yazmışın ondan olabilir mi?  set_timer1(65036);  olması gerekir heralde.
"Eppur si muove!"

promete1

xx cihan xx proteusten demiş
yani bundan bşka açıklaması yok mu?
Asıl kodun dogru olması benim için gercekten önemli  ancak proteusten olmasın asıl sebebi ne?
gerçektenbağlasam düzgün bir şekilde çalısırmı yani sizce?

promete1

değistirip durduğum için eski hali kalmış heralde farkettiğin için teşekkürler
nasıl göremedim bunu:)eve gidince denyecegim hemen ancak;
bu hala 30s. ye ayarlı olmasını acıklamıyor dimi?

mihri

Elbette açıklıyor timer1 set edilmediği için 0-65535 arasında sayıp kesme oluşturuyo bu yüzden olabilir.
"Eppur si muove!"

aliveli

program şuanki haliyle led yaklaşık 26.2 saniyede bir durum değiştirir
ama genede proteusa güvenip iş yapma derim

XX_CİHAN_XX

Alıntı yapılan: "promete1"xx cihan xx proteusten demiş
yani bundan bşka açıklaması yok mu?
Asıl kodun dogru olması benim için gercekten önemli  ancak proteusten olmasın asıl sebebi ne?
gerçektenbağlasam düzgün bir şekilde çalısırmı yani sizce?
Programını incelemedim çünkü benim kullandığım dil assembly.Ancak programın tam olarak 1 saniyelik bir gecikme bile yapsa isiste bu asla  tam 1 saniye olmaz demek istediğim budur.Elbette hesabına göre 1 saniye olması gerekirkende 30 saniye kadar olmaz.(Gerçi kullandığın pc nin hızını bilmiyorum ama okadarda yavaş değildir herhalde :) )
Yani isisteki programının çalışma hızı doğrudan pc nin hızı ile alakalıdır.Bu nedenle atıyorum sen pratikte 1 saniyelik gecikme yapıyorsundur ama isiste daha fazla gecikme görüyorsundur.Bu çok normal...
Gerçek gecikmeyi ancak hesap yaparak yada deniyerek öğrenebilirsin isisle öğrenemezsin malesef.
Yirmi yaşındaki bir insan, dünyayı değiştirmek ister . Yetmiş yaşına gelince , yine dünyayı değiştirmek ister, ama yapamayacağını bilir.

iyonosfer

@modernherakles
Bir kaç arkadaşında dediği gibi, interrupt rutininde timer1 yerine timer0'a değer atıyorsun sorun ordan kaynaklanıyor.
Blog Sayfam: www.teknobakis.com

modernherakles

evettamda dediğiniz gibi timerları değişltirnce sorunsuz çalıştı teşekkür ederim arkadaşlar cok kolay bişey ama işte program yazmak görünmiyince görülmüyor ve mihri arkadaşın dediği doğru deger girilmediği için 65536ya kadar sayıyor bu da 26.5 sn edior.tüm ilgili arkadaşlar sağol un.
If we hear, we forget; if we see, we remember; if we do, we understand – Confucius