avatar_Mucit23

TMR0 Kesmesi Bölücü ayarları

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

Mucit23

Merhabalar Hocam. Diğer konuyu kirletmek istemiyorum.
Problemim devam ediyor.
Dediğiniz gibi orayı burayı karıştırırıp bölücü oranlarıyla oynarken Tekrar TMR0L registerini sıfırlamıştım. Kesmeden çıkarken ilk değerinin yüklenmesi gerekiyor.
Ben onu düzelttip denediğimde Portc.0 dan aldığım frekans 2Khz ye çıktı. Yani kesme Frekası 4KHz olmuş oluyor. Ben iyice şaşırdım. Hesap kitaba uymuyor.
Ya ben bölücü ayarlarını ayarladığım halde ayarlanmıyor Düşük bölücü oranlarında kalıyor. Yada Bu işlemci 160Mhz gibi bi hızlarda çalışıyor. 

Kodun tamamı budur.
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : FERHAT YOL                                        *
'*  Notice  : Copyright (c) 2012 KULUÇKA KONTROL CİHAZI         *
'*          : All Rights Reserved                               *
'*  Date    : 19.03.2012                                        *
'*  Version : 1.0                                               *
'*  Notes   :                                                   *
'*          :                                                   *
'****************************************************************
Device 18F4620
Xtal = 10      ;10Mhz OSC+PLL
Config_Start
   OSC = HSPLL ; 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
;**********************************LCD Tanımlamaları**************************************************
;    LCD_DTPin = PORTB.4       
;    LCD_RSPin = PORTB.2
;    LCD_ENPin = PORTB.3
;    LCD_Interface 4
;    LCD_Lines 4
;    LCD_CommandUs 250
;    LCD_DataUs 200
;    LCD_Type = ALPHA
;********************************Mcu Configüration****************************************************   
;    Warnings = OFF
;    Reminders = OFF
    PLL_Req = On     ;4XPLL_Aktif
;    Optimiser_Level = 3
;    Dead_Code_Remove = On
;    Unsigned_Dwords = On
;    Float_Display_Type = LARGE
;**********************************ADC Configüration**************************************************
;    Adin_Res 10       ;Çözünürlük 10 Bit
;    Adin_Tad 32_FOSC
;    Adin_Stime 100 
;    ADCON0=%00000001  ; ADC module enabled,
;    ADCON1=%00001110  ; An0 Analog input, +vref=VDD, -Vref=Vss
;    ADCON2=%10101010  ; ADC Clock FOSC/32, ADC_TAD 12
;**********************************Timer Configüration************************************************
    INTCON=%10100000  ;Global Kesmeler aktif, TMR0 Kesmesi aktif
    T0CON=%11000101 ;TMR0 moduleenabled, 1/64 Prescaller (TMR0 Frekansı 1Khz)
    On Interrupt GoTo INT
    Symbol T0ON=T0CON.5    ;Timer0 Enable Bit
    Symbol T0IF=INTCON.2   ;Timer0 İnterrupt Flag.
    TMR0L=100              ;TMR0 ön Değeri 1Khz Kesme frekansı için gerekli ön değer.
;****************************************Değişkenler***************************************************
Dim Pi       As Float         ;Pi Sayısı 3.141592654
Dim OMEGA    As Float
Dim SINA     As Float
Dim KosA     As Float
Dim Katsayı  As Float
Dim Q1       As Float
Dim Q2       As Float
Dim Q3       As Float
Dim i        As Word 
Dim N        As Word
Dim FREQ     As Word 
Dim SAMPLE   As Word
Dim SAMPLES[100] As Word
Dim SYC      As Byte
Dim X        As Bit
;**********************************Katsayılar Belirleniyor**********************************************
;Pi=3.141592654
;DelayMS 200
;Cls
BASLA:
DelayMS 1
GoTo BASLA

Disable
INT:
   PORTC.0=1-PORTC.0
;  SAMPLES[0]=ADIn 0
    INTCON.2=0
    TMR0L=100
Resume
Enable
End


Yapmak istediğim şeyi anlatayım.
Goertzel algooritması kullanarak Ses şimdilik 8 Banda bölüp Spektrum analyser yapacağım. Yazılımda Birçok float virgüllü ve 32 bit işlemler gerektiği için Proton kullandım. Başka bir öneriniz varmı hocam. Eğer bu tür sıkıntıları aşarsam Ben böyle bir proje gerçekleştireceğim.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

#1
BASLA:
DelayMS 1
GoTo BASLA

Yazılım kesmesi kullandığına göre Delay 1ms bile sonucu etkileyebilir.
Oraya delayus 10 koy bakalım ne olacak.

Ete

Mucit23

Hocam Farketmiyor. Hiç delay koymasam ile aynı kesme frekansı değişmiyor.

Hocam bu tür virgüllü işlemleri basicde yapabilirmiyiz. Mesela Goertzel rutininde pi sayısına birçok yerde lazım oluyor. Protonda Float türü değişkenlerle bu tür işlemleri rahatlıkla yapıyoruz.
Bi ara PBP de 32 bit değişkenlerin tanımlanabildiğini duymuştum. X Var LONG şeklinde.
Siz ne diyorsunuz bu konuda.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

ete

Virgüllü işlem PBP da mümkün değil maalesef. Yalnızca sayıları virgülden kurtararak bu tür işlemleri yapmak mümkün olabiliyor.
18F serisinde 32 bit değişken kullanılabiliyor. tanımlamada ;
SAYI VAR LONG  şeklinde tanımlama yapmak gerekiyor. Derleme esnasında da Compile&Program options seçeneğinde PBPL kutusu seçili olması gerekiyor.

Ete

Mucit23

Anladım hocam.
Kesme frekansı işine gelince anlam veremiyorum. Farklı bölücü oranlarıyla deneme yapacağım. Belkide simülasyon azizliğidir.
Bir ulusu yok etmenin En iyi yolu o ulusun dilini yok etmektir.

www.arectron.com/

Powered by EzPortal