pll yapınca Delay_ms ve diğer timer ayarlarıda etkilenirm

Başlatan fractal, 19 Ocak 2009, 15:17:37

fractal

arkadaşlar 10mhz ile pll yapıp 40mhz kullanıyorum.ama sanırım zanalarda bir sorun var gibi.delay_ms(1000) yazınca ccs c kullanıyorum.bu 1 saniyemidri.yoksa 0.25 saniyemi?

birde örnek timer 1 100ms kurduğum zaman pll olunca yine 100ms dir kesme süresi yoksa değişir?
Restantum cogniscutur Quantum deligutur

ahmet2004

#use delay(clock=40M, oscillator=10M)



Yukarda yapılan ayarlar ile osilaskop ekranında alınan görüntüsü.

delay_ms(1000) ile 1saniyelik çıkış veriyor.

#include <18F452.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES WDT128                   //Watch Dog Timer uses 1:128 Postscale
#FUSES H4                       //High speed osc with HW enabled 4X PLL
#FUSES NOPROTECT                //Code not protected from reading
#FUSES NOOSCSEN                 //Oscillator switching is disabled, main oscillator is source
#FUSES NOBROWNOUT                 //Reset when brownout detected
#FUSES BORV20                   //Brownout reset at 2.0V
#FUSES NOPUT                    //No Power Up Timer
#FUSES STVREN                   //Stack full/underflow will cause reset
#FUSES NODEBUG                  //No Debug mode for ICD
#FUSES NOLVP                      //Low Voltage Programming on B3(PIC16) or B5(PIC18)
#FUSES NOWRT                    //Program memory not write protected
#FUSES NOWRTD                   //Data EEPROM not write protected
#FUSES NOWRTB                   //Boot block not write protected
#FUSES NOWRTC                   //configuration not registers write protected
#FUSES NOCPD                    //No EE protection
#FUSES NOCPB                    //No Boot Block code protection
#FUSES NOEBTR                   //Memory not protected from table reads
#FUSES NOEBTRB                  //Boot block not protected from table reads

#use delay(clock=40M, oscillator=10M)

void main()
{

   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   setup_psp(PSP_DISABLED);
   setup_spi(SPI_SS_DISABLED);
   setup_wdt(WDT_OFF);
   setup_timer_0(RTCC_INTERNAL);
   setup_timer_1(T1_DISABLED);
   setup_timer_2(T2_DISABLED,0,1);
   setup_timer_3(T3_DISABLED|T3_DIV_BY_1);

   while(1)
   {
      delay_ms(1000);
      output_toggle(PIN_B4);
   }

}

fractal

cevap için teşekkürler.ozaman kesme süreleride değişmiyor.tabi..proteus da işlemcinin frekansıda 10mhz kalıyor.program kendi pll yapınca calışıyor.proteusta bir sorun var sanırım..
Restantum cogniscutur Quantum deligutur

ahmet2004

Timer1 40Mhz PLL kullanıldığında 100nS min. süre ile kesme yaratır.

Başka sorun olursa yaz.




fractal

cevaplar için sağolasın.şimdi takıldığım nokta şu.ben pll yapınca 40mhz çalışıyorum.güvenilir olarak  1u sn kesme üretebilirmiyiz.ccs c menüsünden 1 us gözüküyor orda.
bir arkadaşım abana ccs c de timer lar iyi çalışmıyor.dedi .sorun veriyormuş.
birde bizdeki bu osilatörler stabil değilmiş.40mhz yaptıkya komut işleme süresi 100ns de sabit değilmiş.belki 200ns de cıkabilirmiş.ozaman zamnlar ve kesmeler değişmezmi.

birde kesmlerim cok kücük olursa mesela 1 us .ozaman program akışında bir sorun olurmu.çok sık işlemciyi kullanmış olmayızmı?..

birde kesmeye dallandığımızda kesmede işlem yapma zamanı ne olabilir.bana mümkün olduğunda kesmedeki işlemleri az tutu dediler...

bu sorularıma cevap verisen sevinirim..

teşekkürler..
Restantum cogniscutur Quantum deligutur

ahmet2004

Yazdıkların hepsi doğru.

Peki sen ne yapmak istiyorsun yapmak istediğin birşey varsa

kodları şemanı ekle daha sağlıklı yardım edebiliriz.

Varsayımlarla nereye kadar değilmi?

fractal

aslında cok temel birşey ile uğraşıyorum.ben step sürücü yapmaya çalışıyorum.uğraştığım nokta şu.pwm modunu kullanıyorum.çünkü işlemci ile pwm sinyali üretmek dışındada bir çok şey kullanıyorum.grafik ekran var 4x4 key pad var.giriş çıkış birimleri var.keypad ile glcdeden menüler yardımı ile rampa değrleri hız değerleri adım değerleri giriliyor....
burda uğraştığım nokta.rampala kısmı.şimdi ben 45 rmpden başlıyorum ekrandan girdiğim max.hıza yine ekradan girdiğim accel. ile örneğin 100ms bu hıza cıkmaya çalışıyorum.sonra sabit hızda gidiyorum sonra deccel. ile duruyorum.burda bu rampa iki noktası belli bir doğru denklemi olmuş oluyor.pic bu dorğu denklemini hesaplattırıyorum.sonra 100 ms kaç adımda çıkaçaksan kesmeyi ona göre kuruyorum mesela 1ms de bu formüle giderek frekansı hesaplıyor.frekans değerinden pr2 değerini çekip yerine koyuyorum...işte böyle. bir uygulama....bir çok sorun var...
1 msde kesme yapmak benim programımı etkilermi bunuda bilmiyorum.birde birsürü kesme var.öncelik atadım.bunlardan pwm cözünürlüğüm etkilenirmi.birde benim pwm high zamanım 5us altında olmalı.step sürücümden kaynaklanıyor.....
Restantum cogniscutur Quantum deligutur