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.
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.
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?
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.
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.
İ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
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.
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.
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.