Picproje Elektronik Sitesi

DERLEYİCİLER => PIC Assembly => Konuyu başlatan: Hadi - 11 Ağustos 2015, 10:01:47

Başlık: PIC - Program bellek tarama hızı
Gönderen: Hadi - 11 Ağustos 2015, 10:01:47
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.

(http://i.hizliresim.com/oZ7z32.jpg)

Lütfen beni aydınlatın. ( @RaMu  hocam, siz bu (https://www.picproje.org/index.php/topic,58392.0.html) 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.
Başlık: Ynt: PIC - Program bellek tarama hızı
Gönderen: 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.
Başlık: Ynt: PIC - Program bellek tarama hızı
Gönderen: Hadi - 11 Ağustos 2015, 11:31:41
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?
Başlık: Ynt: PIC - Program bellek tarama hızı
Gönderen: 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.
Başlık: Ynt: PIC - Program bellek tarama hızı
Gönderen: Hadi - 11 Ağustos 2015, 11:57:19
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.
Başlık: Ynt: PIC - Program bellek tarama hızı
Gönderen: 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
Başlık: Ynt: PIC - Program bellek tarama hızı
Gönderen: Hadi - 11 Ağustos 2015, 12:15:52
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.
Başlık: Ynt: PIC - Program bellek tarama hızı
Gönderen: 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.
Başlık: Ynt: PIC - Program bellek tarama hızı
Gönderen: Hadi - 11 Ağustos 2015, 15:27:13
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.