frekans ve kesme

Başlatan teknikelektronikci, 12 Eylül 2006, 20:36:46

teknikelektronikci

arkadaşlar üstadlar bu aykı bilim ve teknik dergisinin bir makalesinde aşağıdaki kodları vermişler bir uygulama için sanırım timer kavramının basit hali yani  benim gibi yeni başlayanlar için.benim bir kaç takıldığım yer var eğer cevaplar iseniz sevinirim teşekürler.

option_reg=%10000100 ;timer0 açık,1:32 bölme 

saniye var byte
dakika var byte
saat var byte
clear 
low portb.0

ana:
if intcon.2=1 then 
intcon.2=0
saniye=saniye+1
if saniye=60 then 
saniye=0
dakika=dakika+1
if dakika=60 then
dakika=0
saat=saat+1
if saat=24 then 
saat=0
high portb.0
pause 41  5 saniye motor çalışma 
low portb.0
saniye=saniye+5
endif
endif
endif
endif
goto ana
end

sorularım
1-) üstadlar bu pause 41 in 5 saniye gecikme olması neye bağlı yani ben bunu 41 mili saniye gecikme diye biliorum ama burda açıklamada 5 saniye olmuş bunu kristal ile alakası varmı ? burdaki kristal 32762 hz saat kristali eğer alakası var ise bunun hesabı nasıl oluyor acaba?

2-)
if intcon.2=1 then
intcon.2=0

üstadlar bu intcon sorgulamasını nereden yapıyor yani mesela
if portb.2=0 dedikmi portb.0 ı sorguluyor 0 mı diye peki bu intcon.2 dedimi nereye bakıyor ben bunu kesme ile ilgili diye biliom bu intconu ama bu kesme nerede oluşuyor bu programda onuda anlamıyom. acaba bu 16f628 dahili 4mhz lik rc osilatör ile çalışıp bu kesmeyi 32768 hz lik kristal denmi alıyor

yardımlarınız için şimdiden tesekkür ederim bu kesme hakında bilgi sahibi değilim ve dersaneye başladığımdan dolayı pc de az vakit bulabiliom bu yüzden fazla araştıramadım kusura bakmayın. teşekürler saygılar
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

ibrsel

Alıntı Yap
2-)
if intcon.2=1 then
intcon.2=0

intcon registerinin 2 biti TMR0 kesmesini olup olmadığını bildirir..TMR0 kesmesini kullandığında, TMR0 her 256 saydığında bir kesme oluşturur ve bu durumda intcon registerinin 2 biti 1 olur.Bu sayede bizde kesme oluştuğunu anlarız,ve buna yapacağın işlemleri yönlendirirsin.Kesme işlemi sonucu dallandığın alt programdan çıkarken de bu biti (intcon.2 ) sıfırlarsın,bir sonraki kesmelere hazır hale gelmek için..Sitede çok daha ayrıntılı açıklamalar var..Bir göz atıp link verebilirim..

ibrsel

http://picproje.com/index.php/topic,8852

buraya bir göz at istersen..interrupt ile ilgili daha ayrıntılı bilgiler var..

teknikelektronikci

@ibrsel üstadım cevabınız için öncelikle teşekür ederim dediklerinizi çok iyi anladım ama bir soru takıldı aklıma 256 olduğunda 2. biti 1 olur demişiniz peki bu programda bunu 256 ne yapıyor? yani nasıl 256 nasıl oluşuyor cevabınız için teşekür ederim saygılar


ben bu verdiğiniz linki tamamıyla unutmuşum o günden sonra hiç bakamadım unutum :-) birde interup ın kesme ile aynı olduğunu bilmiordum teşekürler
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

ibrsel

TMR0 1 byte lik bir sayıcıdır.1 Byte ile en fazla 256 sayısını elde  edebiliriz. Dolayısı ile TMR0 sayacı pice osc den gelen her palste (bölme oranına göre) sayaç değerini 1 artırır.En fazlada 256 ya kadar sayabileceğine göre;256 olduğunda bir taşma olur ve bu durumda intcon.2 =1 olur..Buradanda biz TMR0 ın 256 olduğunu tespit etmiş oluruz...

ibrsel

Birde burayı incele..Belki biraz daha ayrıntı yakalayabilirsin..Takıldığın yerde yine yardımcı olmaya çalışırız..İyi çalışmalar..
http://picproje.com/index.php/topic,11620

teknikelektronikci

sayın üstadım cevabınız için teşekür ederim artık bu timer olayında bir şeyler anlamaya başladım :-)

hocam birde bu bölme toblosundaki wdt  ile tmr0 arasındaki fark nedir
kusura bakmayın çok soru sordum ama bu olayı iyice öğrenmek istiorum
Bitler TMR0 WDT
000 1/2 1/1
001 1/4 1/2
010 1/8 1/4
011 1/16 1/8
100 1/32 1/16
101 1/64 1/32
110 1/128 1/64
111 1/256 1/128

verdiğiniz link için teşekür ederim bayağı işimi görecek
saygılar
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

ibrsel

Option registerinin son 3 biti osilatörden gelen pals de hangi oranda bölme oluşturacağını ayarlar..Dikkat edersen TMR0 1/2 oranında bölme yapabiliyor..Buda 2 pals geldiğinde TMR0 içerisindeki sayacı bir arttır demek..Ama bu durum bazen istenmez.Örneğin,dışardan RA4 ucuna bağladığın bir butona her bastığında sayaç içerisindeki değerin 1 artmasını istiyorsun.Bu gibi durumda TMR0 bölme oranını kullanamazsın.TMR0 da 1/1 bölme oranı yok.Yani her palste say diyemiyorsun.Dikkat edersen WDT de 1/1 oranında bölme yapabiliyorsun.Dışardan gelen her palste sayma işlemi yapmak istersen o zaman WDT bölme oranını aktif yaparsın.Option registerini inceler isen 3. bit WDT yi aktif yapar.Böyleliklede her palste bir saydırma yaparsın..

 Biraz uzunca ve karışık bir açıklama oldu galiba..Kusura bakmayın umarım yardımcı olabilmişimdir..Bununla ilgili bir örnek dosya hazırlayıp linkte vereyim isterseniz..incelerseniz daha kalıcı bir bilgi elde edersiniz..

ibrsel

http://www.hemenpaylas.com/download/1551804/tmro.rar.html

Proteus dosyasını çalıştırın..Dikkat ederseniz ön planda bir sayma işlemi yapılıp LCD ekranda gösteriliyor.Herhangi bir anda RA4 ucundan bir kesme geldiğinde işlemci bunu değerlendirip "kesme" alt programında verdiğiniz emirleride yerine getiriyor..

teknikelektronikci

hocam ilginiz için çok teşekür ederim kusura bakmayın sizin değerli vaktinizi aldım bana çok yardımcı oldunuz bütün sorular kafamda çözümlendi sağolun

hocam verdiğiniz kodaki 2500 ne işe yarıyor acaba ? yani 2500 e kadar saymasının sebebi ne teşekürler saygılar
bekle:
   for i=0 to 2500
       nop
   next i
return
Ey Türk istikbalinin evlâdı! İşte, bu ahval ve şerâit içinde dahi, vazifen; Türk İstiklâl ve Cumhuriyetini kurtarmaktır! Muhtaç olduğun kudret, damarlarındaki asil kanda mevcuttur!

ibrsel

eğer interrupt kullanıyorsan progrmında pause (bekleme) komutunu kullanır isen ve bu esnada kesme oluşur ise micro denetleyicin bu kesmeyi algılamaz.Dolayısı ile benim yazdığım programda LCD ye yazılan değerlerin görünebilmesi için birazcık bekleme yaptırmalıydım..bunuda bir döngü içerisinde boş bir işlem yaptırarak yaptırayım dedim..

Alıntı Yap
'-----------------------------------------------------------------
@ DEVICE pic16F628a,mclr_off,lvp_off,pwrt_off,protect_on,intrc_osc,wdt_off
'-----------------------------------------------------------------
DEFINE LCD_DREG PORTB
DEFINE LCD_DBIT 4
DEFINE LCD_RSREG PORTB
DEFINE LCD_RSBIT 0
DEFINE LCD_EREG PORTB
DEFINE LCD_EBIT 1
DEFINE LCD_BITS 4
'-------------------------------------------------------------------------
cmcon=7
trisa=%00000000:porta=0

ON INTERRUPT GoTo KESME   'kesme oluşursa KESME adlı etikete git.
OPTION_REG=%10101000     'Pull up dirençleri İPTAL- RA4 ten tetik alınacak ..Bölme oranı wdt ye gore
INTCON=%10100000         'Kesmeler aktif ve TMR0 kesmesi aktif
TMR0=0    
i var word
'----------------------------------------------------------------------------
SAYAC   VAR   word  
'-----------------------------------------------------------------------------
CLEAR  'tüm değişkenler sıfırlandı
PAUSE 750
LCDOUT $FE,1

'-----------------------------------------------------------------------------
BASLA:
lcdout $fe,128,"sayac=",#sayac,"       "
lcdout $fe,192,"TMR0=",#tmr0,"         "
   sayac=sayac+1
   gosub bekle
GOTO BASLA

bekle:
   for i=0 to 2500
       nop
   next i
return

DISABLE
KESME:
     pause 5             
     INTCON.2=0        'TMR0 Kesme bayrağı sıfırlanıyor
RESUME
ENABLE
goto basla        

'-----------------------------------------------------------------------------------

kodları birazcık düzelttim..Bu şekliylede kullanabilirsin

Veli B.

Picbasic pro kullanan arkadaşların, en azından protona geçmesi bu tip sorunları(kesme kaçırmamak için kısa çevrimli döngüler kurmak gibi) aşmasını sağlar.Kod optimizasyonu açısından da, donanımsal interruptları desteklemesi açısından da.

ibrsel

Sevgili Katana hocam;
     söylediklerine katılıyorum.Ama eski alışkanlıkları terketmek birz zor gibi geliyor..Bir ara Micro Basic' e geçmeye çalıştım,fakat yeteri kadar türkçe kaynak bulamayınca vazgeçtim...Şimdi de en kısa yol,en iyi bildiğin yoldur mantığı ile ilk göz ağrımız Pic Basic Pro ya devam ediyoruz..

Veli B.

Protonu incelediniz mi?
Eğer incelemeden bu yorumda bulundu iseniz, emin olun incelediğinizde bu vakte değin incelemediğinize pişman olacaksınız.
Pic basic pro' yu kullanan bir arkadaşın, protona geçmesi ve adapte olması, en kötü ihtimalle 3 saatlik bir çalışma ile mümkün.Komutların ve yapının formatları %80 birebir.Sizin çözmeniz gereken %20 ki emin olun bunların bir çoğu kısa vadede hemen kullanmayacağınız komutlar olabilir.
Bunun karşılığında getirdiği faydalar fazlası ile bu zamanı ayırmaya değer.

ibrsel

Tavsiyeniz için çok teşekkürler..En kısa zamanda protonu kurup bir kaç basit program ile olaya başlamaya çalışalım bakalım..