Timer1 harici clock/osilatör yardımm

Başlatan calyon, 05 Ocak 2013, 04:07:56

calyon

merhaba arkadaşlar benim projemde timer kesmesi ile frkens üretiyorum 2 tane ayrı şekill portb0 ve portb1 den 2 adet butonlada frekansları artırıp azaltıyorum ayrıca lcd de frekans ve sıcaklık gösteriyorum  programda tek sorunum timer1 için harici osilatörü çalıştırmak araştırmalarıma göre

setup_timer_1(t1_external|t1_div_by_1|t1_clk_out); bu komut ile oluyormuş ancak bi türlü çalışmadı ne proteusta nede gerçek te fakat aynı satırı

setup_timer_1(t1_internal|t1_div_by_1);

yapınca devre çalısıyor ama istediğim hızlara çıkamıyorum ve belli seviyeden sonra çıkışım bozulmaya başlıyor bu yüzden timer1 için harici osilatör kullanmak istedim (benim istediğim frekans 10khz-20khz arası) eğer bu konu hakkında bilgisi olan ve yardım edebilecekler için şimdiden teşekkürler. devrenin proteus dosyasını ve kodları da yolluyorum.

#include <18f4620.h>     // Kullanılacak denetleyicinin başlık dosyası tanıtılıyor.
#device ADC=10  // 10 bitlik ADC kullanılacağı .

#fuses XT,NOWDT,NOPROTECT,NOBROWNOUT,NOLVP,NOPUT,NOWRT,NODEBUG,NOCPD
#use delay (clock=20000000) // Gecikme fonksiyonu için kullanılacak osilatör frekansı belirtiliyor.
#use fast_io(a) //Port yönlendirme komutları A portu için geçerli
#use fast_io(b) //Port yönlendirme komutları B portu için geçerli
#use fast_io(c) //Port yönlendirme komutları C portu için geçerli
#use fast_io(d) //Port yönlendirme komutları D portu için geçerli
#define use_portd_lcd TRUE
#include <lcd.c>
#define OSC_32MHZ    8


int i=0;
unsigned long int a,b,c,d; // Tamsayı tipinde değişken tanımlanıyor
int dijital;
float sicaklik,Mvolt,frekans;

#int_timer1  // Timer1 kesmesi
void  timer1_kesme ()   // Kesme fonksiyonu ismi
{ 

  
  if(i==3){
  output_high(PIN_b0);
  set_timer1(65536-(b));
  i=0;
  }else  if(i==2){
  output_low(PIN_b1);
  set_timer1(65536-(d));
  i++;
  }else if(i==1){
  output_high(PIN_b1);
  set_timer1(65536-(c));
  i++;
  }  
   else if(i==0){
  output_low(PIN_b0);
  set_timer1(65536-(d));
  i++;
  }






}



/********* ANA PROGRAM FONKSİYONU********/

void main ( )
{
   setup_psp(PSP_DISABLED);        // PSP birimi devre dışı
   setup_timer_2(T2_DISABLED,0,1); // T2 zamanlayıcısı devre dışı
     

   setup_CCP1(CCP_OFF);            // CCP1 birimi devre dışı
   setup_CCP2(CCP_OFF);            // CCP2 birimi devre dışı


   set_tris_c(0xff); //ra0 aktif
   set_tris_a(0xff); //ra0 aktif
   setup_adc(adc_clock_div_32);
   setup_adc_ports(AN0);
   lcd_init();
   set_adc_channel(0);
   delay_us(50);
   printf(lcd_putc,"\fSicaklik=");





   set_tris_b(0x00);   // B portu komple çıkış
   output_b(0x01);    
   setup_oscillator(OSC_32MHZ | OSC_TIMER1);
   clear_interrupt(int_timer1);

   setup_timer_1(t1_external|t1_div_by_1|t1_clk_out);
   set_timer1(65536-(b));   // TMR1 değeri belirleniyor
   enable_interrupts(int_timer1);
   enable_interrupts(global);
   
      

     a=150;
    
   while(1){
 

   
    
   

   dijital=read_adc();  
   Mvolt=(0.0048828412*dijital)*1000;
   sicaklik=(Mvolt/10)+2;
   frekans=a;
   lcd_gotoxy(10,1);
   printf(lcd_putc,"%f%cC",sicaklik,223);
   lcd_gotoxy(1,2);
   printf(lcd_putc,"Frekans=%f",frekans);
 

        if(input(pin_a1)){
            while(input(pin_a1));
              delay_ms(10);
              a=a-100;
         }
       if(input(pin_a2)==1){
      
         while(input(pin_a2)==1);
           delay_ms(10);
           a=a+100;  
      }
     
     
              b=(a/2);
              c=30*(a/100);
              d=10*(a/100);
  
   
   } 

 }


http://s2.dosya.tc/server24/n5Sxel/frekans_reteciiiii.rar.html proteus dosyası

ziyaretci

RC0 ve RC1 e harici osilatör bağladın mı? 32kHz

calyon

Alıntı yapılan: erkantr67 - 05 Ocak 2013, 13:18:32
RC0 ve RC1 e harici osilatör bağladın mı? 32kHz
evet bağladım ama bir türlü çalışmadı

Okan AKÇA


calyon

Alıntı yapılan: cyclone - 05 Ocak 2013, 15:53:07
rtc mü yapmaya çalısıyorsunuz
rtc den bişey anlamadım sadece timer1 e harici osilatör bağlayıp çalıştırmak istiyorum t1oso ve t1osi bacaklarına

ziyaretci

Alıntı yapılan: calyon - 05 Ocak 2013, 15:41:37
evet bağladım ama bir türlü çalışmadı

20 MHz için Osilatör konfigirasyonu için HS kullanman gerekiyor.

Sayfa 24
http://ww1.microchip.com/downloads/en/devicedoc/39626b.pdf 

sadogan

32khz kiristalin uclari ile gnd arasına 15pf kapasitor koymuşmuydun.?

calyon

kapasitör koydum XT yerine HS de yaptım ama hala dışardan clock ile çalışmıyor timer1 anlamadım gitti herşeyi deneiyorum bi türlü olmuyor kesin kücük birşey onu kaçırıyorum hadi hayırlısı  :'(

ziyaretci