TIMER1 nasil kullanılır

Başlatan loves_oi, 15 Nisan 2014, 21:20:28

loves_oi

Merhabalar , şu an timer0 ile çalışabiliyorum. TOIE ile enable ediliyor her cycle'da 1 artıyor ve 256 olunca TOIF biti set ediliyor. Buraya kadar anladım. Prescaler olarak 1/256 yapıyorum OPTION_REG  registerındaki prescalerları 1 1 1 yaparak. Bunun haricinde extra bir bilgiye henüz sahip değilim ve Timer1 i anlamaya çalışıyorum ve açıkçası çok zorlanıyorum

Ancak Timer1 ı tam kavrayamadım. Timer1 enable ve flag bitleri biliyorum. PIE1 register'ının 0.biti TIMER1 enable biti.ve PIR1 register'ının 0. biti TIMER1 flag biti. Kodun en başında enable ediyorum sonra isr routine içinde  TMR1IF set edilmiş mi diye bakıyorum ve TMR1H clear edip TMR1L clear edip retfie ediyorum. Buraya kadar ki mantık timer0 ile çok benziyor. Ancak yeterli gelmiyor. Sanırım T1CON register'ını anlamam lazım. T1CONun 0.biti Timer1On biti . Bu da Timer1 i enable etmek içinmiş. NEDEN TIMER1 icin iki tane enable bit var?

Timer0 daki prescaler gibi , Timer1 de de prescaler yok mu T1CON'daki 4. ve 5.bit'ler prescaler'a mı denk geliyor ? Eğer öyleyse neden Timer0'da 3 tane prescaler bit var da Timer1'de 2 tane prescaler bit var?

Timer1 de iki tane mod varmış bunlar Counter Mod ve Timer mod'muş. Bu mod'lara neye göre geçiş yapılıyor. Yani ben şu kodda timer1 kullanıyorum ancak çalışmıyor kod. Burada Timer1 hangi mod'da şu an bunu belirleyen bit vs. varsa nedir?

PEIE biti ne işe yarar?Timer1 kullanabilmek için bunu set mi etmeliyim , ya da alakası yok mu?
internal clock ve external clock gibi şeylerden bahsediliyor bunlar nedir? Örnek verebilir misiniz?
Sevgili arkadaşlar ve hocalarım lütfen bana bu konuda bilmediğim bir şeyler öğretin.
Teşekkürler

selimkoc


RaMu

#2
Eğer başka interrupt kullanmıyorsan
interrupt rutini içinde timer1 interrupt flag (pir1,0) setmi diye bakmana gerek yok,
zaten kesme timer1 den kaynaklanmış demektir,
gerekli işlemi yapar interrupt bayrağını temizler kesmeden çıkarsın.

Timer1 için 2 tane enable bit yok,
t1con timerı başlatmak için,
PIE1 peripheral interrupt enable (modül kesmeleri aktifleştirme) timer1 kesme yapsınmı aktifleştireyimmi
yoksa timer1 saysın ama kesme oluştursun istemiyorum karışma ayarı için.

Prescaler varsa t1con da yazar, datasheete bakmak lazım,
2 bit 3 bit olayı donanımsal birşey
timer0 (000>111) 8e kadar, timer1 (00>11) 3e kadar önbölücüye izin veriyor benim donanımım bu kadar demektir,
bunu üreticiye sormak lazım niye diye.

Timer modda iken timerX mikrodenetleyiciye bağladığın kristal ve prescaler postscaler değerlerine ve kurulduğu değere göre sayma yapar,
misal her komut çevriminde timerX 1 saysın gibi,

Counter modda ise belirli bir pinden (misal 16f877a da timer0 RA4 pininden) gelen kare dalgayı sayar.

Yani biri içerden biri dışardan gelen bilgiyle sayar,
timer modda belli bir zaman birimi elde eder ve zamanlayıcı yapmış olursun,
misal saat için saniye bilgisi üretebilirsin,
counter modda butona kaç defa basıldı gibi bir bilgi sayabilirsin,
misal ikisini birden kullanıp,
bir timer ile timer modda 1 saniye tespit etsen üretsen
ve bu 1 saniye içinde harici pinden gelen kare dalgayı saysan
frekansmetre yapmış olursun.

Bu modları option register belirler (16f877a option_reg,T0CS [timer0 clock source> timer0 kaynağı ne]

PEIE (INTCON,6)daha öncede söylediğim gibi modül (timer i2c spi uart gibi) lerin
kesme oluşturması aktif veya pasif durumunu kontrol eder.

Internal external clock
timer1 md de belirlenmiş pine bağlanacak
misal 32768 Hz lik bir kare dalga  ile saydırıp neredeyse tam 1 sn elde edebilmeni sağlar,
yada başta anlattığım gibi bu belirli pinden gelen kare dalgayı sayar kısaca,
T1CON,T1CS ile kontrol edilir.

Datasheet i iyice kurcalamalısın,
ayrıca bu konularda epey anlatım var ama yinede gaza geldim yazdım birşeyler,
sormadan önce araştırın.


RaMu timer .
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html