timer0 ayarlayamıyorum

isoment01

Üye
Katılım
26 Haz 2016
Mesajlar
197
Puanları
1
Yaş
32
merhaba, pic 18f4680 de timer0 kullanarak ledi 0.5 sn acık 0.5 sn kapalı tutan bır kod yazdım fakat kodum calısmıyor. timer0(60) hesapladım fakat ledim tam 2dk47sn açık 2dk247 sn kapalı kalıyor. degerlerı degıstırmem de bır etkı etmıyor. bunun sebebı ne olabılır yazdıgım kodlar da burada yardımcı olabılır mısınız ?
hesabım da söyle : 10 e6 x256x(256-x)=0.05 x burdan 60 cıkıyor. pic im 10 bitlik bir pic

#device PIC18F4680
#include <18f4680.h>
#fuses xt,nowdt,noprotect, nobrownout, nolvp, noput, nowrt, nocpd
#use delay (clock=4000000)
int i=0;
#int_timer0
void timer0_kesme()
{
set_timer0(60);
i++;
if(i==10)
output_high(pin_b0);
if(i==20)
{
output_low(pin_b0);
i=0;
}
}
void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
output_b(0x00);


setup_timer_0( RTCC_INTERNAL | RTCC_DIV_256 );
set_timer0(60);
enable_interrupts(INT_timer0);
enable_interrupts(GLOBAL);
while(1);

}
 
merhaba, pic 18f4680 de timer0 kullanarak ledi 0.5 sn acık 0.5 sn kapalı tutan bır kod yazdım fakat kodum calısmıyor. timer0(60) hesapladım fakat ledim tam 2dk47sn açık 2dk247 sn kapalı kalıyor. degerlerı degıstırmem de bır etkı etmıyor. bunun sebebı ne olabılır yazdıgım kodlar da burada yardımcı olabılır mısınız ?
hesabım da söyle : 10 e6 x256x(256-x)=0.05 x burdan 60 cıkıyor. pic im 10 bitlik bir pic

#device PIC18F4680
#include <18f4680.h>
#fuses xt,nowdt,noprotect, nobrownout, nolvp, noput, nowrt, nocpd
#use delay (clock=4000000)
int i=0;
#int_timer0
void timer0_kesme()
{
set_timer0(60);
i++;
if(i==10)
output_high(pin_b0);
if(i==20)
{
output_low(pin_b0);
i=0;
}
}
void main()
{
setup_psp(PSP_DISABLED);
setup_timer_1(T1_DISABLED);
setup_timer_2(T2_DISABLED,0,1);
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
setup_CCP1(CCP_OFF);
setup_CCP2(CCP_OFF);
set_tris_b(0x00);
output_b(0x00);


setup_timer_0( RTCC_INTERNAL | RTCC_DIV_256 );
set_timer0(60);
enable_interrupts(INT_timer0);
enable_interrupts(GLOBAL);
while(1);

}
Bunlar c dilinde yazilmis kodlarmi
 
ccs c de yazdım
 
yok ustte bır hesaplama yaptım ordan cıkan hesaba gore yazmanız lazım artı ınteger tıpı bır deger gırılmesı gerek 0 -255 arası.
 
üçüncü sınıfta mikroişlemciler dersinde görmüştüm bu konuyu da unutmuşum, pic 10 bit'lik ise 255 değil de 2^10 - 1 den 1023 e kadar değer girmen gerekmez mi, yani 1024 pals da bir kesme oluşturman lazım ona göre yeni bir hesap çıkartmalısın bence.
 
üçüncü sınıfta mikroişlemciler dersinde görmüştüm bu konuyu da unutmuşum, pic 10 bit'lik ise 255 değil de 2^10 - 1 den 1023 e kadar değer girmen gerekmez mi, yani 1024 pals da bir kesme oluşturman lazım ona göre yeni bir hesap çıkartmalısın bence.
ama timer0 8 bitlik ve 00 ile ff arasında deger alıyor. o yuzden bu degerler arasında kullanıyoruz. o nokta da aklımı karıstırıyor mesela tımer1 var o da 16 bıtlık . bızım pıckımız 10 bıtlıkken tımer1 nasıl 16 bıtlık deger alıyor :/
 
anlamadıgım bir nokta da şu tımer a ne deger verırsem vereyim lambam hep 2dk47 sn yanıp 2dk47 sanıye sonuk kalıyor :S
 

Forum istatistikleri

Konular
129,845
Mesajlar
930,720
Kullanıcılar
452,698
Son üye
uguraydemir

Yeni konular

Geri
Üst