4 Ext kesmesi olan 18F6620 de RB0 Dış Kaynak Kesmesi Ayarları

Başlatan dyonizos, 12 Nisan 2012, 13:47:52

dyonizos

Arkadaşlar 16f877 ile yaptığım ve tıkır tıkır çalışan RB0 donanımsal kesmem pic i değiştirince sapıttı doğal olarak ve bende işin içinden çıkamadım. Yardımınıza ihtiyacım var.

18F6620 64 pin ve 4 Dış kaynak kesmesi olan bir pic te Sadece RB0 kesmesini nasıl aktif edebilirim. 16f877 de kullandığım kodlar aslında kesme olarak çalışıyor gibi ama bir yerde sorun var kısa süre sonunda pic resetleniyor kesme geldiğinde.

bu 16f877 de kullandığım kodlar
On_Hardware_Interrupt GoTo PulseCount 'Hardware Gnterrupt OluGunca INT ye git            
        Symbol INTF = INTCON.1      'RB0 KESME BARAĞI
        Symbol INTE = INTCON.4      'RB0 KESME YETKG
        Symbol GIE = INTCON.7       'GLOBAL INT. YETKI
        GIE=0                       'tüm kesmeler kapalı
        INTE=1                      'RB0 Kesmesi aktif
        GIE=1                       'Aktif O an Tüm kesmelere Yetki ver 

bunlarda şimdiki pic için yazdıklarım
    Symbol INT1IP  = INTCON3.6  'External Interrupt Priority Bit
    Symbol INT0IP  = INTCON3.6  'External Interrupt Priority Bit
    Symbol INTEDG0 = INTCON2.6  'External Interrupt Edge selection Rise
    Symbol INT0IE  = INTCON.4   'External Interrupt Enable Bit
    Symbol INT0IF  = INTCON.1   'External Interrupt Flag  
    Symbol IPEN    = RCON.7     'IPEN: Interrupt Priority Enable bit
    Symbol GIEH    = INTCON.7   'GIE/GIEH: High Priority Interrupt Enable bit

        IPEN=0                  
        INT0IE=1                   
        IPEN=1         

pic in datasheetini çözemedim. Yardımcı olabilirmisiniz?

nette bir arkadaş şu kodları paylaşmış ancak oradan aldığım yerlerde bir hata yapmış olabilirim yada bu kodlar bendeki pice uygun değil.
'INTERRUPT DECLARES
    Symbol IPEN    = RCON.7     'IPEN: Interrupt Priority Enable bit
    Symbol GIEH    = INTCON.7   'GIE/GIEH: High Priority Interrupt Enable bit
    Symbol GIEL    = INTCON.6   'PEIE/GIEL: Low Priority Interrupt Enable bit
'TIMER 0 DECLARES - WHEEL SPEED
    Symbol TMR0IP  = INTCON2.2  'TMR0 Overflow Interrupt Priority bit
    Symbol TMR0IE  = INTCON.5   'TMR0 Overflow Interrupt Enable bit
    Symbol TMR0IF  = INTCON.2   'TMR0 Overflow Interrupt Flag bit
    Symbol TMR0ON  = T0CON.7    'Timer0 On bit
    Symbol T08BIT  = T0CON.6    'Timer0 8/16 bit Control Bit
    Symbol TMR0CS  = T0CON.5    'Timer 0 Clock Source Select
    Symbol PSA     = T0CON.3    'Timer0 Prescale ON/OFF
    Dim TIMER0 As TMR0L.Word
    T08BIT  = 0                 '(1 - 8BIT 0 - 16BIT)
    TMR0CS  = 0                 '(1 = Transition on T0CKI 0 - CLK0)
    PSA     = 0                 'Enable Timer0 Prescaler(1 - Off 0 - On)    
    T0CON.2 = 0                 '111 = 1:256 Prescale value
    T0CON.1 = 1                 '110 = 1:128 Prescale value
    T0CON.0 = 0                 '101 = 1:64 Prescale value
                                '100 = 1:32 Prescale value
                                '011 = 1:16 Prescale value
                                '010 = 1:8 Prescale value
                                '001 = 1:4 Prescale value
                                '000 = 1:2 Prescale value
'TIMER1 DELCARES - HR
    Symbol TMR1IP  = IPR1.0     'TMR1 Overflow Interrupt Priority bit
    Symbol TMR1IE  = PIE1.0     'TMR1 Overflow Interrupt Enable bit
    Symbol TMR1IF  = PIR1.0     'TMR1 Overflow Interrupt Flag bit
    Symbol TMR1ON  = T1CON.0    'Timer1 On bit
    Symbol TMR1CS  = T1CON.1    'Timer1 Clock Source (Internal)
    Dim TIMER1 As TMR1L.Word
    TMR1CS  = 0                 '(1 - External Clock 0 - Internal Clock)
    T1CON.5 = 1                 '|11 = 1:8 Prescale value
    T1CON.4 = 1                 '|10 = 1:4 Prescale value
                                '|01 = 1:2 Prescale value
                                '|00 = 1:1 Prescale value 
'TIMER3 DELCARES - Cadence
    Symbol TMR3IP  = IPR2.1     'TMR3 Overflow Interrupt Priority bit
    Symbol TMR3IE  = PIE2.1     'TMR3 Overflow Interrupt Enable bit
    Symbol TMR3IF  = PIR2.1     'TMR3 Overflow Interrupt Flag bit
    Symbol TMR3ON  = T3CON.0    'Timer3 On bit
    Symbol TMR3CS  = T3CON.1    'Timer3 Clock Source (TMR1)
    Dim TIMER3 As TMR3L.Word
    TMR3CS  = 0                 '(1 - External Clock 0 - Internal Clock)    
    T3CON.5 = 1                 '|11 = 1:8 Prescale value
    T3CON.4 = 1                 '|10 = 1:4 Prescale value
                                '|01 = 1:2 Prescale value
                                '|00 = 1:1 Prescale value
'INTERRUPT 0 DECLARES - Wheel Speed
    Symbol INT0IP  = INTCON3.6  'External Interrupt Priority Bit
    Symbol INTEDG0 = INTCON2.6  'External Interrupt Edge selection Rise
    Symbol INT0IE  = INTCON.4   'External Interrupt Enable Bit
    Symbol INT0IF  = INTCON.1   'External Interrupt Flag   
'INTERRUPT 1 DECLARES - HR
    Symbol INT1IP  = INTCON3.6  'External Interrupt Priority Bit
    Symbol INTEDG1 = INTCON2.5  'External Interrupt Edge selection Rise
    Symbol INT1IE  = INTCON3.3  'External Interupt Enable Bit    
    Symbol INT1IF  = INTCON3.0  'External Interrupt Flag   
'INTERRUPT 2 DECLARES - Crank
    Symbol INT2IP  = INTCON3.7  'External Interrupt Priority Bit
    Symbol INTEDG2 = INTCON2.4  'External Interrupt Edge selection Rise
    Symbol INT2IE  = INTCON3.4  'External Interupt Enable Bit    
    Symbol INT2IF  = INTCON3.1  'External Interrupt Flag
'SET DECLARE VARIABLES
    TRISB   = %0000111 'Set RB2 RB1 RB0 to inputs
'Interrupt Priority - Global
    IPEN    = 1 'Enable priority interrupts.
    GIEH    = 0 'Disable High Priority Interrupts
    GIEL    = 0 'Disable Low Priority Interrupts
'Interrupt Edge
    INTEDG0 = 1 'Set External Interrupt Edge to rising edge
    INTEDG1 = 1 'Set External Interrupt Edge to rising edge
    INTEDG2 = 1 'Set External Interrupt Edge to rising edge
'Interrupt Priority - Local
    INT0IP  = 1 'Set INT0 - RB0 as a High priority interrupt
    INT1IP  = 1 'Set INT1 - RB1 as a High priority Interrupt
    INT2IP  = 1 'Set INT2 - RB2 as a High priority Interrupt
'Clear Interrupt Flag
    INT0IF  = 0 'Clear RB0 INT Flag
    INT1IF  = 0 'Clear RB1 INT Flag
    INT2IF  = 0 'Clear RB2 INT Flag
'Enable External Interrupt
    INT0IE  = 1 'Enable External RB0 Interrupt
    INT1IE  = 0 'Enable External RB1 Interrupt
    INT2IE  = 0 'Enable External RB2 Interrupt 
'Timer Interrupt Priority Low
    TMR0IP  = 0 'Set Timer0 as a low priority interrupt source
    TMR1IP  = 0 'Set Timer1 as a low priority interrupt source
    TMR3IP  = 0 'Set Timer3 as a low priority interrupt source    
'Clear Timer Interrupt Flag    
    TMR0IF  = 0 'Clear the Timer0 interrupt flag
    TMR1IF  = 0 'Clear the Timer1 interrupt flag
    TMR3IF  = 0 'Clear the Timer3 interrupt flag    
'Enable Timer Interrupts
    TMR0IE  = 1 'Enable Timer0 interrupts
    TMR1IE  = 0 'Enable Timer1 interrupts
    TMR3IE  = 0 'Enable Timer3 interrupts
'Clear Timers
    TIMER0  = 0 'Clear Timer0
    TIMER1  = 0 'Clear Timer1
    TIMER3  = 0 'Clear Timer3
'Ensure Timers are OFF
    TMR0ON = 0  'Timer0 OFF      
    TMR1ON = 0  'Timer1 OFF            
    TMR3ON = 0  'Timer3 OFF
'Timer1 and Timer 3                 
'*******************************************************************************
On_Interrupt     INTSR 'RB0/1/2 INTERRUPT SERVICE ROUTINE
On_Low_Interrupt TMRSR 'TIMER0/1/3 Overflow Interrupt


Datasheet : http://pdf1.alldatasheet.com/datasheet-pdf/view/105946/MICROCHIP/PIC18F6620-E/PT.html             

dyonizos

Bir fikri olan yokmu. :(
Deli olucam ya. Bu kesme isi neden bu kadar zor.

Maxim

int priority kullanmıyorsanız yani hig-low interrupt
IPEN gibi seçenekleri işin içine sokmanız gerekmez onları kaldırın

GIEH değil sadece GIE kullanın

birde devamı nedir ? belki kesme içinde takılıyor ?

dyonizos

teşekkürler maxim hocam. Kesme kısmındaki sorunumu hallettim.
Şimdide 2 Dış kaynak kesmesinde takıldım
Kesmede RB0 kesme oluştuğunda suraya git diyoruz ve gidiyor :)
Peki bu picteki diğer dış kaynak kesmelerinide kullanmak istersek. Atıyorum RB0 daki kesmede suraya git RB1 kesmesinde buraya git gibi nasıl yönlendirebiliriz. Birde bu ikiside donanımsal kesme olarak çalışsa bile hızlı gelen pulse lerde 2 kesme aynı anda pulse kaçırmadan çalışabilirmi?