18f4620 TMR0 kesme ayarları(kesme Frekansı)

Başlatan Mucit23, 22 Mart 2012, 15:18:24

Mucit23

Arkadaşlar Timer0 kesmesini 1Khz ye ayarlamam gerekiyor. Yaptığım Hesaplara göre 20MHz osc , 1/32 prescaller oranı ve TMR0L registerine ilk başta 100 değereni yüklersem tam 1Khz frekansa ulaşmış olmam gerekiyor. Ama ilginç bir durumki hiç kesme 40Hz den yukarı çıkmıyor. 40Hz dediğim yani 1 saniyede 40 kere kesme oluşuyor. Ben bu sayıyı 1000'e çıkarmam gerekiyor.
Prescaller oranını felan değiştirmem kar etmiyor. Kesme Frekansını görmek için şöyle bir program yazdım.
Device 18F4620 
Xtal = 20     
Config_Start
   OSC = HS ; HS
   FCMEN = OFF ; Disabled
   PWRT = On ; Enabled
   WDT = OFF ; Disabled
   MCLRE = OFF ; Disabled
Config_End

TRISA=%00000001
TRISB=%00000000
TRISC=%00000000
TRISD=%00000000
PORTA=0:PORTB=0
PORTC=0:PORTD=0

;**********************************Timer Configüration************************************************
    INTCON=%10100000  ;Global Kesmeler aktif, TMR0 Kesmesi aktif
    T0CON=%10001100   ; 8 Bit Mode
    On Interrupt GoTo INT
    Symbol T0ON=T0CON.5    ;Timer0 Enable Bit
    Symbol T0IF=INTCON.2   ;Timer0 İnterrupt Flag.
    TMR0L=100       
DelayMS 200
Cls
BASLA:
  DelayMS 1
GoTo BASLA 

Disable
INT:
PORTC.0=1-PORTC.0
    INTCON.2=0
    TMR0L=100
Resume
Enable
End


Sorun neden kaynaklanabilir.

Mucit23

Kimsenin bi fikri yokmu? Aklıma hiçbirşey gelmiyor..

justice_for_all

Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

camby

#3
16 bit timer0 kullan , calısma sırasında tmr0L ıcerıgını degıstırme , TMR0H ıcerıgını degıstır sadece. On boluculerı ona gore ayarla.

Calısmakta olan tımer0 ın low byte ı degıstırılemıyor olabılır , hatırlamıyorum tam. Ben bu tarz tımer ıslerımde hep hıgh byte ı degıstırıyorum.

Yada.

Tımer0 kullanma , PR regısterına sahıp tımerlar bu ıs ıcın daha uygun. Baslangıcta 100 degerını vermek yerıne PR regısterını yanı tasma degerını belırlıyorsun. Pwm de bu sekılde olusturuluyor.

Not: yazını da tam okuyamamısım , o yuzden gereksız bılgı vermıs de olabılırım. Buyuk ıhtımalle 16 bıt 8 bıt sorunu vardır.

justice_for_all

Alıntı yapılan: Mucit23 - 22 Mart 2012, 15:18:24

    T0CON=%10001100   ; 8 Bit Mode
   


zaten resime gore sizin yaptiginiz T0 ayari 16 bit calisiyor ama siz TMR0L degerine 100 sayisini yukluyosunuz bu yuzden timer yavas calisiyor.

[IMG]http://www.resimyukle.com.tr/thumb/25427/Capture.JPG[/img]
Deneyip de başaramayanları değil, yalnızca denemeye bile kalkışmayanları yargıla.   Gökhan Arslanbay

Mucit23

Benim aklım timer 1 de kalmış . Bu işlemcide Tim0 ında 8/16 olarak ayarlanabileceğini unutmuşum. Açıkçası defalarca T0CON u inceledim. Bazen Görünmüyor gözüme. 8 bit olarak yapınca direk 1Khz frekansda çalışmaya başladı.