Haberler:

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

Ana Menü

timer kullanımı

Başlatan conductor, 24 Şubat 2007, 17:53:59

conductor

Arkadaşlar öncelikle merhaba,
ccs pic c ile timer kullanımı hakkında bir sıkıntım var  şöyle ki
yazdığım kod şu şekilde;
void main()
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //524ms
   setup_timer_2(T2_DISABLED,0,1);
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL);
set_tris_b(0x00);
output_b(0x00);
set_timer1(0);
while(true){
output_low(Pin_B1);
 }
}
#int_TIMER1
void TIMER1_isr()
{
output_high(Pin_B1);
delay_ms(1000);
}

Ve çıkıştan aldığım sinyal ise şu şekilde;
[IMG]http://www.resimlik.net/img/ad1657ca98fd1f7ce3af026e5d65454b/timer_1.bmp[/IMG]
resim koymayı beceremedim kuusra bakmayın.

Timer1 in
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8);

değerine ayarlanmasıyla birlikte her 524 ms de interrupt üretmesi gerekmez mi ?
Bu konuda yardımcı olabilecek arkadaş var mı?
Teşekkür ederim

zafzaf82

kaç mhz'lik kristal kullandın? Bide kesme altprogramında 1 sn bekliyon. ilginç bi program yazmızşın.
Mikroişlemci bi araçtır, amaç değil.....

conductor

Kristali unutmuşun pardon 4Mhz lik bir kristal kullandım.Beklemenin sebebi proteusta logic 1 seviyesini daha rahat görebilmek için.Benim kafama takılan soru da bu zaten ben 1 s lik gecikme koyduğum halde -graifik ten de bakarsanız - bu 1 saniyenin sonuna gelinince hemen logic 0 a düşme oluyor ancak belirli bir süre daha geçdikten sonra pin_b1  logic 0 seviyesine düşüyor
birde ben 1 sn lik gecikme koyduğum halde bir sonraki gecikmeye girme süresi ile önceki arasında 4.20 s var
bunu anlayamıyorum.

zafzaf82

aşagıdaki kodlarla denedim sorunsuz çalışıyo

#include <16F877A.h>
#device *=16
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES XT                       //Crystal osc <= 4mhz
#FUSES NOPUT                    //No Power Up Timer
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected

#use delay(clock=4000000,RESTART_WDT)

int a=0;

#int_TIMER1
void TIMER1_isr()
{
   if(a==0)
   {
   a=1;
   output_low(PIN_B1);
   }
   else
   {
   a=0;
   output_high(PIN_B1);
   }
   
} 

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(FALSE);
   setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
   setup_timer_1(T1_INTERNAL|T1_DIV_BY_8); //524ms 
   setup_timer_2(T2_DISABLED,0,1);
   enable_interrupts(INT_TIMER1);
   enable_interrupts(GLOBAL); 
   a=0;   
   while(1)
   {
   }

}


Mikroişlemci bi araçtır, amaç değil.....

conductor

zafzaf82 arkadaşım bende olmadı aynı kodlarla çok ilginç.

zafzaf82

conductor, ben tekrar denedim gayet güzel çalışıyor. Devre şemasını ve kodları yolluyorum. Umarım sende de çalışır.

http://rapidshare.com/files/18300528/denemee.rar
Mikroişlemci bi araçtır, amaç değil.....

MURSEL

setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);  burda  en sondaki 1 bölücüyü gösteriyor timer0 presclar degeri 000=2 olur yani ön bölücü degeri timer0 en az 2 olur WDT presclar degeri en az 1 olur  sizde  timer0 kullandıgınıza göre 2 olması gerekiyor sanırım yanılmış olabilirim