Welcome, Ziyaretçi

Gönderen Konu: PIC32MX320F128H Timer Kullanımı  (Okunma sayısı 2855 defa)

0 Üye ve 1 Ziyaretçi konuyu incelemekte.

tahtaco

  • Teğmen
  • ***
  • İleti: 179
  • Teşekkür: 41
PIC32MX320F128H Timer Kullanımı
« : 21 Ağustos 2016, 14:08:15 »
Merhaba  PIC32MX320F128H işlemci ile Ide olarak  MPLAB X IDE v3.35  Language Tool  v1.00 (WIN) (03/22/12) kulanılmıştır.Saygılar
Timer 3 PR3 = 1 seçilirse 640 nano saniyede interrupt fonksiyonu çalışıyor.

Kodlar:
Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
#include <p32xxxx.h>
#include <plib.h>

#define GetSystemClock() (80000000L)

#define GetPeripheralClock() (GetSystemClock()/(1 << OSCCONbits.PBDIV))
#define GetInstructionClock() (GetSystemClock())

// *****************************************************************************
// *****************************************************************************
// Section: Configuration bits
// SYSCLK = 80 MHz (8MHz Crystal/ FPLLIDIV * FPLLMUL / FPLLODIV)
// PBCLK = 40 MHz
// Primary Osc w/PLL (XT+,HS+,EC+PLL)
// WDT OFF
// Other options are don't care
// *****************************************************************************
// *****************************************************************************
#pragma config FPLLMUL = MUL_20, FPLLIDIV = DIV_2, FPLLODIV = DIV_1, FWDTEN = OFF
#pragma config POSCMOD = HS, FNOSC = PRIPLL, FPBDIV = DIV_1
 //80MHZ  1/80 = 12.5 ns 1 cycle 12.5ns

// *****************************************************************************
//Functions and Variables with Global Scope:
// *****************************************************************************



 // Timer1 interrupt fonksiyonu
void __ISR(4, ipl2) T1Handler(void)
{
    mT1ClearIntFlag(); // kesme bayrağını  temizle
    LATEbits.LATE0 ^= 1; // RE0  pini 1 ise 0 yap yada   0 ise 1 yap
}

// Timer2 interrupt fonksiyonu
void __ISR(8, ipl2) T2Handler(void)
{
    mT2ClearIntFlag();
    LATEbits.LATE1 ^= 1;
}


static unsigned int sayac = 0;
 // Timer3 interrupt fonksiyonu
void __ISR(12,ipl2)T3Handler(void)
{
     sayac++;
    switch(sayac)
    {
       case 16: //
      {
         LATEbits.LATE2 = 1; //16 us RE2 Pini on
      }
      break;
     
      case 32:
      {
        LATEbits.LATE2 = 0; //16 us RE2 Pini off
        sayac = 0;
       
      }
      break;

      default:
           mT3ClearIntFlag();
      break;
    }

}
     
   
  // Timer45  interrupt fonksiyonu
void __ISR(20, ipl2)T45Handler(void)
{
    mT45ClearIntFlag();
    LATEbits.LATE3 ^= 1;
}


int main(void)
{
    SYSTEMConfigPerformance(8000000);
    SYSTEMConfig(GetSystemClock(), SYS_CFG_WAIT_STATES | SYS_CFG_PCACHE);
   
    TRISEbits.TRISE0 = 0; //RE0 pini çıkış
    TRISEbits.TRISE1 = 0; //RE1 pini çıkış
    TRISEbits.TRISE2 = 0; //RE2 pini çıkış
    TRISEbits.TRISE3 = 0; //RE3 pini çıkış
   
    // timer hesabı 12.5ns x 256 prescaler oran x 15624+1 = 50ms yapar.
    OpenTimer1(T1_ON | T1_SOURCE_INT | T1_PS_1_256, 15624); //50ms //16 bit modu ***TİMER 1 KURULUMU
    OpenTimer2(T2_ON | T2_SOURCE_INT | T2_PS_1_256, 31249); //100ms ***TİMER 2 KURULUMU
    OpenTimer3(T3_ON | T3_SOURCE_INT | T3_PS_1_1, 78); //1us   **** ***TİMER 3 KURULUMU
    OpenTimer45(T45_ON | T45_SOURCE_INT | T45_PS_1_256, 312499); //1sec //TİMER 45  32BİT TİMER  KURULUMU
   
    ConfigIntTimer1(T1_INT_ON | T1_INT_PRIOR_2);
    ConfigIntTimer2(T2_INT_ON | T2_INT_PRIOR_2);
    ConfigIntTimer3(T3_INT_ON | T3_INT_PRIOR_2);
    ConfigIntTimer45(T45_INT_ON |T45_INT_PRIOR_2);
    INTEnableSystemMultiVectoredInt();//KESMELERIN HEPSİ AKTİF
   
    while(1)
    {
       
    }   
       
    }

Uykusuz

  • Administrator
  • Yarbay
  • ******
  • İleti: 2599
  • Teşekkür: 207
  • while(heart_rate>0){work();}
Ynt: PIC32MX320F128H Timer Kullanımı
« Yanıtla #1 : 21 Ağustos 2016, 14:42:04 »
Paylaşım için teşekkürler hocam.  :)
Projelerimiz için tıklayın Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
Sipariş ve Bilgi için satis@lugatek.com ile irtibata geçiniz.
Lütfen teknik sorularınızı forumda sorunuz özel mesaj göndermeyiniz

tahtaco

  • Teğmen
  • ***
  • İleti: 179
  • Teşekkür: 41
Ynt: PIC32MX320F128H Timer Kullanımı
« Yanıtla #2 : 05 Eylül 2016, 15:37:22 »
Bit düzeyinde timer1 kurulumu bu şekilde
Kod: Üye Olmadan Linkleri Göremezsiniz. Üye Olun veya Giriş Yapın
#include <plib.h>



//Timer1 vector no :4
//Timer2 vector no :8
//Timer3 vector no :12
//Timer4 vector no :16
//Timer5 vector no :20
void __ISR(4, ipl7) T1Interrupt  (void)
{
    IFS0bits.T1IF=0;//interrupt kesme bayragını temizle
    LATEbits.LATE0 ^= 1;
   
}

int main(void){
   
    TRISEbits.TRISE0 = 0; //RE0 PIN CIKIS
    T1CON = 0;
    T1CON = 0b00000000000000001000000000000000; // prescaler 1/1,  16Bit-Mode
  //T2CON = 0b00000000000000001000000001100000; // prescaler 1/64,16Bit-Mode 
  //T2CON = 0b00000000000000001000000001110000; // prescaler 1/256,16Bit-Mode 
   
    //T1CON = 3 BİT 1 ise 32bit mod 0 ise 16bit timer modunda çalışıyor.
    //T1C0N = 15 BİT 1 İSE TİMER ON
    TMR1 = 0;
    PR1 = 0xFFFF;
    IFS0bits.T1IF = 0; //interrupt kesme bayrak temizle
    IEC0bits.T1IE = 1; //T1 interrupt fonksiyon acik
    IPC1bits.T1IP = 7; //T1 interrupt prior (0-7 arası secilebilir ipl7yi interrupt fonksiyonda ona göre degistermek gerekiyor)
    IPC1bits.T1IS = 0; //Interrupt sub-priority (0 ile 4 arası secilebilir)
    INTEnableSystemMultiVectoredInt(); // kesmeler aktif
   
     
    while(1)
    {
       
       
    }
}