PIC - Program bellek tarama hızı

Başlatan Hadi, 11 Ağustos 2015, 10:01:47

Hadi

Merhaba arkadaşlar

Kafamı karıştıran bişey var sizlerden yardım alacağım.

PIC16F628A'nın Program belleğine 2048 komut yazılabildiğini biliyoruz. (Yanlışım varsa düzeltin)

4Mhz bir kristal ile saniyede (4/1'den) 1.000.000 komut işlendiğini de biliyoruz. (Yanlışım varsa düzeltin)

Şimdi 1.000.000 / 2048 yaklaşık 488 eder. Yani saniyede 488 kere Program belleğindeki komutların tamamını çalıştırır. (Program belleğindeki sadece tek çevrimlik komutlar yazılı farz edelim)

Bu da yaklaşık 488Hz eder. (Yanlışım varsa düzeltin)

Şimdi ben böyle bir program yazdım. Ama ölçtüğümde 488Hz yerine 244Hz (Yarısı) elde ediyorum.


Lütfen beni aydınlatın. ( @RaMu  hocam, siz bu konuda bana yardımcı olmuştunuz. Yine yardımınıza ihtiyacım var )

Program kodu:

LIST P=16F628A
	INCLUDE "P16F628A.INC"

	__CONFIG 3F21

	BSF STATUS, 5
	CLRF TRISB
	BCF	STATUS, 5
	
	INCF PORTB, 1
	
	END


Görüldüğü gibi her seferinde PORTB'nin değeri bir artar ve program başa döner. PORTB'nin 0. bitini ölçüyorum.


Not: daha iyi başlık bulamadım.

semihel

Bence yarısını bulması mantıklı şöleki bir komut çevriminde high diğerindede low yapıyor ise tepeden tepeye ölçen osiloskop 488 herzin yarısını yani 244 görur.  Doğru sonuc için highda kalma suresine bakmak lazım diye tahmin ediyorum.
Kolay gelsın.

Hadi

Alıntı yapılan: semihel - 11 Ağustos 2015, 11:16:48
Bence yarısını bulması mantıklı şöleki bir komut çevriminde high diğerindede low yapıyor ise tepeden tepeye ölçen osiloskop 488 herzin yarısını yani 244 görur.  Doğru sonuc için highda kalma suresine bakmak lazım diye tahmin ediyorum.
Kolay gelsın.

Nasıl yani? Anlamadım hocam. Ben 3.6V'u demiyorum frekansımdan bahs ediyorum. Biraz açıklar mısınız?

omenek

Program bu komuta her geldiğinde portb.0=1 ise 0 olur 0 ise 1 olur yani bir peryot oluşması için 2 sefer bu komutun işletilmesi gerekirki buda program belleğinin 2 sefer işletilmesi demek oluyor. Sonuçlarda sorun yok, olması gerektiği gibi.

Hadi

Alıntı yapılan: omenek - 11 Ağustos 2015, 11:50:15
Program bu komuta her geldiğinde portb.0=1 ise 0 olur 0 ise 1 olur yani bir peryot oluşması için 2 sefer bu komutun işletilmesi gerekirki buda program belleğinin 2 sefer işletilmesi demek oluyor. Sonuçlarda sorun yok, olması gerektiği gibi.

Ay allah razı olsun sizden.

omenek

 İlla 488Hz lazım ise şu kodu bir dene.   

LIST P=16F628A
    INCLUDE "P16F628A.INC"

    __CONFIG 3F21

    BSF STATUS, 5
    CLRF TRISB
    BCF   STATUS, 5   
    BCF PORTB,0
    ORG   H'3FF'
    BSF PORTB,0
    END

Hadi

Alıntı yapılan: omenek - 11 Ağustos 2015, 12:08:03
İlla 488Hz lazım ise şu kodu bir dene.   

LIST P=16F628A
    INCLUDE "P16F628A.INC"

    __CONFIG 3F21

    BSF STATUS, 5
    CLRF TRISB
    BCF   STATUS, 5   
    BCF PORTB,0
    ORG   H'3FF'
    BSF PORTB,0
    END

Hocam bana frekans lazım değil. Sadece neden hesapladığım değer ile ölçtüğüm değer farklı çıkıyor diye merak ediyordum.

Yine de teşekkürler.

Bu arada konu kapanabilir.

RaMu

Konuyu yeni gördüm, neyse  problem çözülmüş zaten.
Aynı programla üstüne birde şunu deneyebilirsin;
portb,0 ı ölçüyordun, 244Hz görüyordun,
portb,1 i ölç, 122Hz göreceksin,
hatta portb,x i ölç, 244/(2^x) Hz i göreceksin.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

Hadi

Alıntı yapılan: RaMu - 11 Ağustos 2015, 14:50:50
Konuyu yeni gördüm, neyse  problem çözülmüş zaten.
Aynı programla üstüne birde şunu deneyebilirsin;
portb,0 ı ölçüyordun, 244Hz görüyordun,
portb,1 i ölç, 122Hz göreceksin,
hatta portb,x i ölç, 244/(2^x) Hz i göreceksin.

Teşekkür ederim hocam. Evet doğrudur. Ben sadece incf komutunun bir peryot oluşturması için 2 kere çalışması gerektiğini hesaba katmamıştm.