Haberler:

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

Ana Menü

timer1 harici kristal bağlama

Başlatan gokhangokcen, 26 Aralık 2011, 22:42:59

gokhangokcen

cümleten hayırlı akşamlar dilerim;

konuyu araştırdım ama sanırım araştırmayı beceremedim yada böyle bir sıkıntı ile karşılaşan olmadı bir kaç yanıt buldum ama sorunuma çare bulamadım..
sorunuma gelince ccs c derleyicisi ile bir saat yapmayı planlıyorum saatin çok önemi yok araç üzerine küçük bir saat yapılacak.yer çok küçük olduğu için rtc kullanma şansım yok zaten gerekte yok.Yazdığım kod şu;

#include "16f628a.h"
#use delay(clock=4m)

#include "1wire.c"
#fuses intrc_io,nolvp,nowdt,nomclr,protect



#define led pin_b7

const int digit[10]={0x9F,0x06,0x5B,0x4F,0xC6,0xCD,0xDD,0x07,0xDF,0xCF};

int saniye,dakika,saat,i,derece,k;
long z; 
 
#int_timer1
void saat_arttir()
{
output_toggle(pin_b5);
set_timer1(32768);
if(++dakika==60)
{
dakika=0;
saat+=1;
}
if(saat==24)
{
saat=0;
}
}
 
 


  
  

void main(void)
{
setup_timer_1(t1_external|t1_div_by_1);
set_timer1(32768);
enable_interrupts(int_timer1);
enable_interrupts(global);


//setup_comparator(nc_nc_nc_nc);

i=4;
saat=12;
dakika=34;
for(;;)
{

output_a(digit[saat/10]);
output_high(pin_b0);
delay_ms(i);
output_low(pin_b0);

output_a(digit[saat%10]);
output_high(pin_b1);
delay_ms(i);
output_low(pin_b1);


output_a(digit[dakika/10]);
output_high(pin_b2);
delay_ms(i);
output_low(pin_b2);


output_a(digit[dakika%10]);
output_high(pin_b3);
delay_ms(i);
output_low(pin_b3);



}

}


devreyi bord üzerine kurdum fakat dakika bir türlü ilerlemiyor.timer1 osc bacaklarına 32,768khz kristali bağladım devrem normal olarak tarama yapıyor ve ilk anda yüklediğim 12:34 değerini gösteriyor fakat hiç ilerleme yapmıyor.Osc bacaklarına ölçü aletini deyirdiğim anda başlıyor saymaya olması gerektiği gibi çalışıyor pic'in parazitten etkilenecek hiç bir durumu yok bütün bağlantılarım sağlam acaba programda atladığım bir yer mi var?
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

mozkan87

32,768 KHz krıstalin bacaklarını 15-22 pf arası kapasitör ile toprağa bağlayın. Krıstal osilasyona başlamıyordur.

gokhangokcen

kondansatör bağlı hocam yazıma eklemeyi unutmuşum yanıtınız için teşekkür ederim
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

mozkan87

Hocam krıstale dokununca sorunsuz çalıştığına göre mutlaka devrenin o bölümünde sıkıntı var. Kapasitör değerlerini değiştirin, krıstali değiştirin bread board üzerinde ise yerini değiştirin. Ben daha önce bu şekilde bir sistemi çalıştırdım, hitech c ile yapmıştım. 7 saate 2-3 saniye gibi sapıyordu. ccs bilmediğim için birşey diyemeyeceğim ama sorun büyük ihtimalle devrenizde.

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

gokhangokcen

iç osilatör ayarları derken neden bahsettiniz @justice_for_all hocam birazdaha açabilir misiniz acaba
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

justice_for_all

config ayarlarinda internal osilator secmissiniz ama hangi modun kullanilacaginiz yazmamissiniz.internal osilatorun birden fazla modu var.

ccs yardim da bkz: setup_oscillator(mode, finetune);

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

gokhangokcen

yardımdan baktım ama çok iyi ingilizcem olmadığı için pek birşey anlayamadım birde sanırım orada normal kullanılan osc ile ilgili ayarlar var eğer yanlış anlamadıysam ben ise timer1 için harici clock girişlerine bağlı kristali çalıştıramadım
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

justice_for_all

INTERNAL RC
// Constants used in setup_oscillator() are:
#define OSC_48KHZ   0
#define OSC_4MHZ    8

asagidaki kodu yazip tekrar denermisiniz..
setup_oscillator( OSC_4MHZ );






Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

gokhangokcen

devre şu anda yanımda olmadığı için daha önceden kurduğum isis dosyasında denedim fakat bir ilerleme yok yarın reeldede deneyeceğim ama pek umudum yok isistede çalışmadı hocam
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

justice_for_all

isis dosyasini gonderebilirmisin bide ben deneyeyim
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

gokhangokcen

Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

gokhangokcen

hocam devre ile ilgili bir hata görebildiniz mi acaba
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.

gokhangokcen

arkadaşlar sorunu çözdüm problem timer1 kesmesini kurarken t1_clk_out komutunu yazmadığım için çalışmıyormuş.ilgileriniz için teşekkür ederim çalışan kodu tekrar ekliyorum belki faydamız dokunur başka arkadaşlarada iyi günler dilerim..

#include "16f628a.h"
#use delay(clock=4m)
#include "1wire.c"
#fuses intrc_io,nolvp,nowdt,nomclr,protect
#use standard_io(a)
#use fast_io(b)




const int digit[10]={0x9F,0x06,0x5B,0x4F,0xC6,0xCD,0xDD,0x07,0xDF,0xCF};

int saniye,dakika,saat,i,derece,k;
long z;

union
 {
  int isi_byte[2];
  int16 derece;
 }isi;
 
 
#int_timer1
void saat_arttir()
{
output_toggle(pin_b5);
set_timer1(32768);
if(++dakika==60)
{
dakika=0;
saat+=1;
}
if(saat==24)
{
saat=0;
}
}
 
 




  
  

void main(void)
{
clear_interrupt(int_timer1);
set_tris_b(0x00);
setup_timer_1(t1_external|t1_div_by_1|t1_clk_out);
set_timer1(32768);
enable_interrupts(int_timer1);
enable_interrupts(global);




//setup_comparator(nc_nc_nc_nc);

i=4;
saat=12;
dakika=34;
for(;;)
{

output_a(digit[saat/10]);
output_high(pin_b0);
delay_ms(i);
output_low(pin_b0);

output_a(digit[saat%10]);
output_high(pin_b1);
delay_ms(i);
output_low(pin_b1);


output_a(digit[dakika/10]);
output_high(pin_b2);
delay_ms(i);
output_low(pin_b2);


output_a(digit[dakika%10]);
output_high(pin_b3);
delay_ms(i);
output_low(pin_b3);



}

}
Bildiğini paylaşmak, Allah'ın verdiği öğrenme yeteneğinin zekatıdır.