1 saniyelik gecikme!!

Başlatan shark27, 20 Ocak 2008, 18:49:56

shark27

selamlar Cahiliğime verin 4 mhz kristalle beslenen pic16f877 de pause 1000 satırınin  zaman gecikmesi nasıl hesaplanır?Yada osilatör frekansı 1 mhz olursa aralarındaki fark ne olur?Teşekkürler..

erkan06

Öncelikle 4 Mhz kristal kullanmışsan esas alınacak pic frekansı 4/4=1 Mhz dir. Sebebi ise PIC'in osilatör mimarisi ile böyledir. PIC'te durum böyle.
Yani 1 saniyede pic 1,000,000 işlem yapar ya da bir işlemini 1 uS'da icra eder.  
1 Mhz kristal kullanırsan yine 4 te 1 i o da 250 kHz olur.
Şimdi programını C'de yazmışsan direk olarak DelayMs(1000); gibi bir komutla gereken bir saniyelik gecikmeyi bu alt programı çağırmak suretiyle sağlarsın.

Eğer assembly de yapacaksan bir altprogram oluşturabilirsin...Nette bu konuda çok bilgi var ancak senin için şöyle bir giriş olabilir.

GECİKTİRME ALGORİTMASI
Gecikme algoritması; mikroişlemci uygulamalarında işlemciyi belirli bir süre bekletmek çok sık ihtiyaç duyulan bir algoritmadır. Geciktirme işlemleri genel olarak
Klavye taramalarında meydana gelen tuş sekme olayının fıltrelenmesinde, zamanlama işlemlerinde, display taramalarında vs. işlemlerde çok sık olarak kullanılmaktadır. Geciktirme temel olarak işlemciye belli sayıda komutu işleterek yapılmaktadır. Ancak uzun süreli gecikmelerde komutların sıralı olarak işletilmesi yerine işlemci belli sayıda bir döngü bloğuna sokularak gecikme işlemi sağlanır. Örnek olarak 4 MHz frekansında çalışan bir mikroişlemci her bir komutu 250 ns gibi bir zamanda işletecektir. Eğer bir saniyelik bir gecikme istenirse gecikme için 4 * 250 ns = l s olduğuna göre 4 adet NOP komutu kullanılarak bu gecikme sağlanabilir. Ancak yaklaşık l ms' lik bir gecikme için yaklaşık 4000 adet saat çevrimine ihtiyaç vardır. 4000 adet saat çevriminin sıralı komutlarla yapılması hem programlama hem de işletim için mantıklı bir yöntem olmaz. Bunun için döngü blokları ile yapılan bir gecikme algoritmasına ihtiyaç duyulur. Aşağıda bunun bir örneği verilmiştir. Örnekte 3 adet sayıcı registeri kullanılmıştır. Bunlara değer verilerek iç içe 3 adet döngü devreye sokulmakta ve döngü içindeki NOP komutları ile gecikme süresi azaltılmaktadır. Geciktirme süresi sayıcı 3 registerine ms cinsinden yerleştirilerek döngü başlatılır. Örnek, bir alt program olarak yazılmış olup, işletilmesi için CALL çağrısı ile kendi programınızdan çağırmanız gerekmektedir.
NOT: CALL çağrısından önce sayıcı 3 registerine değer konularak alt program biraz daha modüler hale getirilmiş olur.

gecik
    movlw 0x14; geciktirilecek süre (ms)
    movwf sayıcıS
ara1
    movlw 0x02
    movwf sayıcı2
ara2
     movlw OxOff
     movwf sayıcı1
ara3
    nop
    nop
    nop
    nop
    nop
    decfsz sayıcı 1,1
    goto ara3
    decfsz sayıcı 2,1
    goto ara2
   decfsz sayıcı 3,1
   goto ara1

Anladığım kadarıyla PIC'le yeni tanışan bir arkadaşımızsın. Bence iyi bir kaynaktan temelini tam olarak öğrenirsen daha iyi olur.
İyi çalışmalar...
Ne mutlu Türküm diyene!