Elektrotekno.com Ana Sayfa || Programlanabilir Cihaz ve Elemanlar || Microchip Pic Serisi


Timer0 ve Capture kesmesi Yardım

Kayıt: 08 Tem 2008
Mesajlar: 239

Offline
lapry
Tarih: 28 05 2009 12:22

Merhaba arkadaşlar.Sizlerden bir konuda yardım istiyorum.
Şimdi yapmak istediğin çalışmayı tanımlayım.

Pic olarak 16f877A kullanıyorum.
Yazılım Olarak CCS S.

Yapmak istediğim şey ise her 15sn'lik döngü içersinde ki puls sayısını yakalayıp saymak.diğer 15sn'lik süreye gecildiginde ise yeniden pulslari yakalayip saymak.
kullanmak istediğim kesmeler ise CCP'den capture ve timer0 kesmeleri

Şimdi timer0 kullanarak saniye saydirma işlemini tutuyorum CCP'nin capture kesmesini kullanarak pine gelen her yükselen kenarları saydırıyorum.Fakat bu dediklerim ayrı ayrı mükemmel çalışıyor ama birleştirince program sapıtıyor

Örnek kod Aşağıda;
#include <16f877A.h>
#device *=16

#FUSES HS,NOWDT, PUT, NOPROTECT, NODEBUG, BROWNOUT, NOLVP, NOCPD, NOWRT
#use delay(clock=16000000) //16Mhz OSC kullanılacak

#use fast_io(a)
#use fast_io(c)

#define use_portd_lcd true //LCD B protuna bagli oldugu belirtiliyor
#include <lcd.c>

int16 timer_sayac=0; //15sn yani 6000lik kesme icin 16bitlik degisken tanimlaniyor
int capture_sayac=0;


//*************************** CCP-1 Kesmesi**************
#int_ccp1
void yakala1()
{
capture_sayac++;
}


//*********************** TMR-0 Kesmesi*********************
#int_timer0

void timer0_kesme()
{
set_timer0(6); //her 1 kesme için 250bit*1us=250us sonra timeri artir
timer_sayac++;
if(timer_sayac==60000) // 250us * 6000 =15 sn eder
{
lcd_init();
lcd_gotoxy(2,2);
printf(lcd_putc," %d ",capture_sayac); //15.saniyedeki na_sayac'i lcd'de göster
timer_sayac=0; //timer_sayac'i 0'la
capture_sayac=0; //na_sayac'i 0'la
}

}
//***************************************************************

void main()
{
set_tris_c(0b00000111); //C portu RC2/CCP1 icin giriş

setup_psp(psp_disabled);
setup_timer_0(rtcc_internal | rtcc_div_16); // 16mhz/16=1 Mhz oda T=1us periyot
setup_ccp1(ccp_capture_re); // CCP1 yükselen kenarlarda yakala
setup_ccp2(ccp_off);
setup_spi(spi_ss_disabled);
setup_timer_1(t1_disabled);
setup_timer_2(t2_disabled,0,1);
setup_adc_ports(no_analogs);
setup_adc(adc_off);

enable_interrupts(int_timer0); //timer0 kesmesi aktif
enable_interrupts(int_ccp1); //capture kesmesi aktif
enable_interrupts(GLOBAL); // Aktif edilen kesmelere izin ver
set_timer0(6);
/* lcd_init();
printf(lcd_putc," Deger"); */
while(1);

}

Yardım ederseniz sevinirim.nerde hata oldugunu anlamiyorum ayrıca
/* lcd_init();
printf(lcd_putc," Deger"); */
aktif ettigimde program warning veriyor!!!!!

2 kesmeyi birlikte kullanmak bu kadar zor olmamali


Reklamlar
Kayıt: 27 Şub 2008
Mesajlar: 12

Offline
bulentperktas
Tarih: 19 06 2009 02:07

Selam lapry,, geç kaldım mı bilmiyorum,, yazdıklarını yeni okuyorum,, kodunun içinde,,

setup_timer_1(t1_disabled);

satırını gördüm,, timer1 zamanlayıcın kapalı olduğu sürece capture modunu kullanamazsın,, timer1 modunu açarak denemeni tavsiye ediyorum,,

kolay gelsin,,
Başa dön
Kayıt: 09 Ağu 2006
Mesajlar: 485
Konum: giresun
Offline
fractal
Tarih: 19 06 2009 13:29

timer0 kesmesi içinde ekrana yazı göndermişsin.kesme programlarını mümkün olduğu kadar kısa tutman gerekir.kesme içinde bir değişken kullan örneğin kesmem=0 dersin kesme aktif olunca 1 yaparsın.ana döngünde onu kontrol edersin.cünkü ekrana yazı yazma 10ms filan sürüyodu sanırsam.bu ise kesmende sorun yaşatır sana.bir de yakala modu ayarlarına iyi bak.ve donanımsal olarak da kontrol et.aslında düşen kenar yakalaması yapman daha mantıklı olur.pull up kullan .
Başa dön
Kayıt: 28 Arl 2007
Mesajlar: 77

Offline
tmcone
Tarih: 19 06 2009 16:15

Programı iki yolla yapabilirsin:

*Birincisi sadece ccp1 kesmesi kullanarak 15 saniye bekleyip sayacın değerini yazdırarak.Örneğin;
while(True)
{
//sadece ccp1 kesmesi ile
delay_ms(15000);
printf(lcd_putc,"\n%lu ", capture_sayac );
capture_sayac=0;
}

*Diğer yol ise hem timer1 hem de ccp1 kesmesi kullanmak.Ekteki dosyada proteus simulasyonu ve kod mevcut bu yontem için.
Hata oranlarını ele alırsak ilk yöntem için hata 1 KHz de %3 civarında.Diğeri içinse %0.5 den az.
Başa dön
Kayıt: 08 Tem 2008
Mesajlar: 239

Offline
lapry
Tarih: 21 06 2009 15:26

Sorunu çoktan çözmüştüm arkadaşlar genede cvplar için sağolun.Uzun süre kimse cevap vermeyince bende kendim araştırdım
Başa dön
Kayıt: 12 Nis 2008
Mesajlar: 901

Offline
esb72
Tarih: 21 06 2009 16:51

#priority


selam lapry,
interuptlar konusunda bir önemli konuda önceliktir. açık olan interuptlardan birkaçının aynı anda oluşması durumunda kararsızlık oluşmaması için #priority deyimi ile interuptları önem derecesini belirtmek gereklidir.
Kolay gelsin
Başa dön
Kayıt: 09 Ağu 2006
Mesajlar: 485
Konum: giresun
Offline
fractal
Tarih: 22 06 2009 09:26

donanımsal olarak zaten bir önecelik hiyerarşisi var sanırım.prioriity ile bi bunu kendi isteğimize göre ayarlıyoruz.ben böyle biliyorum.
Başa dön
Kayıt: 08 Tem 2008
Mesajlar: 239

Offline
lapry
Tarih: 22 06 2009 16:44

Re: #priority


esb72 yazmış
selam lapry,
interuptlar konusunda bir önemli konuda önceliktir. açık olan interuptlardan birkaçının aynı anda oluşması durumunda kararsızlık oluşmaması için #priority deyimi ile interuptları önem derecesini belirtmek gereklidir.
Kolay gelsin


Tşk ederim esb72 ustam. Ustam diyorum çünkü sen bu sitedeki en eski ve en tecrübeli üyelerden birisin. yaptığın programlar paylaştığın projeler gerçekten herkese çok yardımcı oluyor.
Kolay gelsin iyi çalışmalar
Başa dön
Kayıt: 12 Nis 2008
Mesajlar: 901

Offline
esb72
Tarih: 26 06 2009 23:22

Selam @lapry,
Konu yerini kodla ilgili soruların sorulduğu http://www.elektrotekno.com/forum-3.html kısmına taşıyorum. Yanıtları o bölümden takip edebilirsin.
Kolay gelsin.
Başa dön



Timer0 ve Capture kesmesi Yardım


Benzer Konular
- Kou Statik anahtarlama Sınav Soruları Yardım!!
- Assembly- TMR0 kesmesi ile ilgili yardım
- Asansör Fotosel, Boy Fotosel PCB yardım

- proje yardım

- Arkadaşlar çok acil yardım lütfen !!!
- HVDC' - acil yardım
- mono bass anfisi hakkında yardım
- Yardım isteği - SCADA kaydetme sorunu
- PIC18F886 timer0 dönüşü değeler uçuyor

- autocad 2010 elektrik tesisat projesi keşif ozeti icin yardım

- Autocad tesisat çizimi yardım!

Sitemize üyelik ve içeriğin indirilmesi tamamen ücretsizdir. Sitemizde paylaşılan tüm dokümanlar (Tezler, makaleler, ders notları, sınav soru cevaplar, projeler) paylaşımcıların bireysel çalışmaları olup telif hakları kendilerine aittir ya da açık bir şekilde kamusal alana yerleştirilmiş dokümanların birer kopyalarıdır. Kişilerin bireysel çalışmalarını sitemizde yüklemesinde, sitemizde paylaşıma teşvik eden puanlama sisteminin de etkisi büyüktür. Bunlara rağmen hala size ait olan ve burada bulunmasına izin vermediğiniz dokümanlar varsa iletişim bölümünden yöneticilere bildirmeniz durumunda derhal silineceklerdir.
Powered by phpBB | Translated by phpBB Turkiye | Ads by Google Adsense | Design by Crazy Bat based