TMRO

Başlatan PROF6, 12 Aralık 2004, 17:02:01

PROF6

TMRO nasıl kullanabilirim??

ete

Bir iki gündür bakıyorum ustalardan bir cevap gelirmi diye ama herhalde çok meşguller cevap gelmedi. Bunun üzerine oturayım ben bir cevap yazayım dedim. Aslında bu konu sanki biraz daha assembly çalışanların konusu gibi geldi bana ama genelde basic kullanan birisi olarak mademki bende bu olayı biliyorum cevap vermem doğaldır diye düşündüm. Herneyse biraz laf salatası yaptık galiba.

Timer0 ana programdan bağımsız olarak daima çalışan yazılıp okunabilen sıfırlanabilen bir sayıcıdır.

İdaresi (Kullanımı) Option_Reg üzerinden yapılır.
Her şeyden önce prescaler denilen bir bölücü bir sisteme sahip olup bu sistem 1/1 - 1/2 - 1/4 - 1/8 - 1/16 - 1/32 - 1/64 - 1/128 - 1/256 oranlarında bölme yapabilir.
1/1 bölme için bölücü sistem wdt' için ayarlanmalıdır. Bu durumda gelen palslar wdt sayıcısını bölecek TMR0 bölünmeyecektir.

TMR0 ın sayması için palslara (osilatöre) ihtiyaç vardır. Bu iki kaynaktan sağlanabilir. Birincisi Pic'in içindeki dahili osilatör diğeri ise harici kaynak.
Bunun seçimi ise tabiiki yine Option_Reg den olacaktır.

Şimdi Option_Registerindeki TMR0 ile ilgili bu seçenekleri inceleyelim.

Option Register Bank-1 de $81 adresinde bulunmaktadır. 8 bitlik bir register olup bitlerin fonksiyonları aşağıdaki şekildedir.

Bit 0 - 1 - 2 : Bu bitler prescaler (Frekans Bölme sayısını ayarlar)
000 = 1/2
001 = 1/4
010 = 1/8
011 = 1/16
100 = 1/32
101 = 1/64
110 = 1/128
111 = 1/256

Bit 3 : Bu bit Frekans bölme işleminin Kime ait olacağını belirler
 Bit =0 ise Frekans Bölme TMR0 için geçerli yukarıda verilen bölme oranları geçerli olur.
 Bit= 1 ise Frekans Bölme WDT için geçerlidir. TMR0'ı bölmeden kullanmak için bu bit =1 yapılmalıdır. Tabiiki WDT'ı bir işte kullanmayacak iseniz.

Bit 4 : TMR0 Sinyal Kaynağı Kenar Seçme Bitidir. Harici frekans seçilirse   geçerlidir.
Bit=0 ise PortA.4 (TOCK1) ucundan düşen kenar tetiklemesi
Bit=1 ise POrtA.4 ucundan yükselen kenar tetiklemesi seçilmiş olur.

Bit 5 : TMR0 Sayıcı sinyal Kaynağı Seçimi için kullanılır.
Bit=0 ise Dahili komut saykılları (Pic osilatörü)
Bit=1 ise Harici Frekans kaynağı seçilir.

Bit 6 : TMR0 la iligili değildir. RB0 dan ayarlanan kesme işinde sinyalin kenar şeklini belirler. Yani;
  Bit=0 ise düşen kenarda
 Bit=1 ise yükselen kenarda kesme oluşturur.

Bit 7 : POrtB nin Pull Up larını geçerli yapmak için kullanılır TMR0 la ilgili değildir.

Son olarak TMR0 ın kullanması için adımları açıklayalım.

Önce tercihlerinizi yapmalısınız. Yani;
- Bölme sayısını  (prescaler ayarı)
- Sinyal Kaynağını  (Harici veya dahili osilatör)
- Kenar şeklini vs. belirledikten sonra;
önce Option_Reg' deki bitler gerektiği şekilde ayarlanır.
Timer0 belirli bir sayıdan başlatılması gerekiyor ise sayı TMR0 a verilir. Bu anda sayıcı saymaya başlar.
Sayıcı normal olarak 255'i geçince otomatik olarak sıfırlanır ve INTCON registerinin 2. bitinde (TOIF) bayrağını (Flag) 1 yapar. Aşma buradan kontrol edilir. Gerekirse bu bayrak üzerine bir kesme de açılabilir. Böylece her aşma olduğunda kesme rutini çalıştırılır.

Açıklamalar bu kadar umarım tatmin edicidir.

ETE
Bit 5 :
Bilgi hazinedir paylaştıkça büyür.            http://etepic.com

XNHCX

Dostum Aşağıdaki  linkte işinize yarayacaklar....

Bu konu için TMR0 SAYICISININ ÖZELLİKLERİbaşlığını da inceleyiniz.Aynı başlık altında...

PİC ASSEMBLY ÜZERİNE BAZI ÖNEMLİ NOTLAR

mmengi

Ete dostum eline klavyene sağlık.

Bende bir iki şey ekleyeyim kitaplarda yazmayan, option registerinin ilk 3 bitinde seçilen bölme sayısı görüldüğü gibi 1/2 den daha düşük olmamakta yani her saykılda 1 artış sağlanamamaktadır.Eğer bölme öndeğerini wdt ye atadığınızda ve eğer wdt yi kullnamayacaksanız programlarken sigortalardan kapatırsanız artık tmr0 1/1 olarak çalışacaktır.