For Next ve Pause/Pauseus

Başlatan Kaldirim_Teknikeri, 12 Aralık 2009, 02:22:00

Kaldirim_Teknikeri

For döngüsüyle 245mS(pause 245) lik bir gecikme yapmak istiyorum.

Benim hesaplamama göre:

Bir basic komutu 200nS işleniyorsa, 4 basic komutu...(For,to,next,pauseus)

200nS*4=800nS=0,8mS - 187*0,8mS=149,6mS

Yani 149,6mS, pauseus 500 komutunu yazmadan geçen süre. Aşağıdaki kod.

for x=0 to 186
next x


187/2=93,5mS - 149,6mS+93,5mS=243,1mS

for x=0 to 186
pauseus 500
next x


Yukarıdaki kod ile 243,1mS lik bir gecikme yapmış oluyorum. ÖYLE Mİ? :roll:

Yada en basit nasıl hesaplarım?

For döngüsü ile yapılan gecikmeler pause komutuna göre yapılan gecikmelerden daha hassas ve daha mı iyi oluyor?

Ruzgarbey

aslında gecikme komutlarının hassaslığı gorecelidir.pause veya dongu ileyapılan gecikmeler kullanım açısındandır.şöyle örneklemek gerekirse programında kesme kullanıyorsan pause komutunu kullanman iyi sonuç vermeyecektir.çünkü pic pause komutu işlerken bir kesme oluşsa dahi kesmeyi icra etmez.onun için kesmeli programlarda dongülü gecikme uygulanır.saygılarımla..
Hayatta En Hakiki Mürşid İlimdir. M.K. ATATÜRK

Kaldirim_Teknikeri

Alıntı yapılan: "Ruzgarbey"aslında gecikme komutlarının hassaslığı gorecelidir.pause veya dongu ileyapılan gecikmeler kullanım açısındandır.şöyle örneklemek gerekirse programında kesme kullanıyorsan pause komutunu kullanman iyi sonuç vermeyecektir.çünkü pic pause komutu işlerken bir kesme oluşsa dahi kesmeyi icra etmez.onun için kesmeli programlarda dongülü gecikme uygulanır.saygılarımla..
Mesajınızdan sadece interrupt kullandığımda for döngüsü kullanacağımı anladım. Ve interrupt olmayan uygulamalarda ise pause/pauseus kullanılabilir gibi.

Fakat benim sorduğum for döngüsüyle yaptığım bir döngünün süresini ayarlamak yani bu işi standart koyup her defasında pic'i programlayıcıdan söküp takmak istemiyorum. Ne kadarlık bir süreye ihtiyacım varsa hesabını yapıp süreleri eklemek istiyorum.

Yukarıdaki küçük hesaplamamda ufak bir yanlış yapmışım sanırım. Yukarıdaki kod ile gerçek süre 108,1ms olabilir.

muhittin_kaplan

PBP da yada diğer üst seviye dillerde bir komutun 200ns olduğunu nereden biliyorsunuz ?
eğer cevabınız
20mhz/4 =5mhz
1/5000000 =200Ns
ise hesabınız baştan yanlış
çünki üst seviyeli dillerde her bir komut 1 Makina saykılına Eşit değildir. Çünki her bir Üst seviyeli dille yazılan komut bir assembly komutuna denk gelmez.

Assembly de genelde her komut 1 makina saykılıdır.

Kaldirim_Teknikeri

Herhangi bir hesap yapmadım. Orhan Altınbaşak'ın Pic Basic Pro adlı kitabında okumuştum. Tekrar bir okuyayım dedim ama kitaptan bulamadım okuduğum yeri bende merak etmeye başladım. Boş bir anda tekrar bakar kitapta yazanı aktarırım.