Haberler:

Eposta uyarılarını yanıtlamayınız ( ! ) https://bit.ly/2J7yi0d

Ana Menü

timer2 hakkında

Başlatan Extreme, 03 Şubat 2013, 12:38:28

Extreme

Merhaba Picproje üyeleri,

timer2 hakkında yardımlarınızı bekliyorum.

sadogan

Merhaba,
2 karedalgayı girdigin pinlerde comparator var.
comparator interrupt unu kurarak yapabilirsin ama
tek comparator interrupt u oldugundan hangi pinin high
oldugunu tesbit etmek için interrupt a girdiginde pinleri
kontrol etmen gerekiyor A0 pini ise tmr0 clear  edip
A1 pini ise tmr0 bir değişkene aktarmak gerececek
ama neden A0 ve A1 pinlerini kullanmak istiyorsun
B4 ...B7 pinlerinde port değişim kesmesi var işin daha
kolay .
Ama en hızlı en güzel yontem 18F452 gibi bir işlemci kullanıp
B0 ve B1 pinlerini kullanıp

bu cod la kesmeleri kurup
   ext_int_edge(  L_TO_H ); 
   ext_int_edge(1,L_TO_H );
   enable_interrupts(INT_EXT);
   enable_interrupts(INT_EXT1);
   enable_interrupts(GLOBAL);



bu cod lada tmr0 la farkı ölçersin
#int_ext
void harici_kesme()
{
   disable_interrupts(INT_EXT);
   set_timer0(0);
   enable_interrupts(INT_EXT);
}
#int_ext1
void harici_kesme1()
{
        
      disable_interrupts(INT_EXT1);
      fark=get_timer0();
      enable_interrupts(INT_EXT1);

}

hepsi bu
cod cok sade ve çok hızlı olur

Extreme

#2
Yardımlarınız için teşekkür ederim.

sadogan

#3
2 kesme kulanabilmek için 18F452 gibi bir  mcu kullnmalısın.

Extreme

#4
Yardımlarınız için teşekkür ederim.


sadogan

Tmr0 yapılanması nasıl
2 kare dalga arasındaki geçikme ne kadar
yazdıgın programı görmeden anlamak zor.

omereliusuk

#6
#int_EXT
void  EXT_isr(void) 
{

enable_interrupts(int_timer0);//pinin birisi b0 olacak

}

void main()
{
while(true)
{
 timeri "0" la;
     while(! input(istediğin pin));//diğer pin yazılacak
    timer0 ın değerini öğren.

}}


veya comparator pinleri ile yapabilirsin. bu sefer 3 pin olacak. ilk iki pin comparator girişi senin giriş pinlerin yalnız komparatorun çıkışına izin vermen gerekecek. eşitlendiği anda çıkış 0   olacak bu da ext?_int_edge(h_to_l) olacak. bu da b0 pinini tetikleyecek. timer 0 değerini oradan öğreneceksin. ve timer0 ı set edeceksin. bu da diğer yöntem.  tabi ilgilenirsen

aliveli

#7
kullandığın krisal ne?
şu ana kadar yazdığın program nerde?
ölçeceğin sinyalin frekansı ne?

Extreme

#8
Yardımlarınız için teşekkürler.

Extreme

Yardımlarınız için teşekkürler.

sadogan

#include <18f452.h> 
#device *=16
#device adc=10
#fuses NOWDT,PUT,PROTECT,HS, noBROWNOUT
#use delay(clock=20000000) 

#include "FLEX_LCD.c"
#int_ext
void harici_kesme()
{
   disable_interrupts(INT_EXT);
   set_timer0(0);

   output_toggle(pin_d0);
   enable_interrupts(INT_EXT);
}
#int_ext1
void harici_kesme1()
{
        
      disable_interrupts(INT_EXT1);
      fark=get_timer0();
      
      enable_interrupts(INT_EXT1);

}
void McuInit(void)
{
 
   setup_spi(SPI_SS_DISABLED); 
      setup_spi(FALSE); 

  
   setup_adc_ports(NO_ANALOGS);    
   setup_adc(ADC_OFF);            
    set_tris_a(0b00000001);
   set_tris_b(0b00000011);
   set_tris_c(0b00111111);

//tmr0---------------------------
   setup_timer_0(T0_INTERNAL|RTCC_DIV_2);
   
//tmr0---------------------------     
 
   port_b_pullups (false);
}

void main()
{ 
    McuInit();
    lcd_init();  
    unsigned int16 darbe_suresi;
                 lcd_gotoxy( 1,  1); 
          //    0123456789ABCDEF
      lcd_putc("FAZ FARKI OLCUMU");
      
      lcd_gotoxy( 1,  2); 
         //     0123456789ABCDEF 
      lcd_putc("FAZ FARKI OLCUMU");
      delay_ms(1000); 
    enable_interrupts(INT_EXT);
   enable_interrupts(INT_EXT1);
   enable_interrupts(GLOBAL);
   set_timer0(0);
while(1)
{
      darbe_suresi=(float)(fark/2.5);
      lcd_gotoxy( 1,  1); 
      printf(lcd_putc "T0:%05lu  ",fark);       
      lcd_gotoxy( 1,  2); 
      printf(lcd_putc "S :%04lu Us  "darbe_suresi); 
     
      }

}

tmr0 icerigini ve mikro saniye cinsinden suresini ekrana yazar

ipek

bu işlerdem anlamam fakat net'ten bulduğum bir arkadaş'ımızın yapmış olduğu çalışan örnek .
belki bazı kısımları size yol gösterebilir..

http://www.dosya.tc/server/BEMxGe/16F84PhaseRatio.rar.html

Extreme

Alıntı yapılan: ipek - 06 Şubat 2013, 13:32:42
bu işlerdem anlamam fakat net'ten bulduğum bir arkadaş'ımızın yapmış olduğu çalışan örnek .
belki bazı kısımları size yol gösterebilir..

http://www.dosya.tc/server/BEMxGe/16F84PhaseRatio.rar.html

teşekkür ederim eksik olmayın asm dilinde yazılmış.referans olur kullanılır.