Merhaba, arkadaşlar pic18f4550 kullanıyorum. usb aktif iken timeri hiçbir şekilde ayarlayamıyorum nasıl yaparız bilen varmı ?
usb devre dışı iken sorun yok ama timer aktif olduğu anda aygıt tanınmıyor diye yazıyor. bir yolu olmalı diye düşünüyorum bilenler yardım ederse sevinirim.
usb kesmesini araştırdım 10 ms aralıklarla çalışıyor belki işşime yarar dedim TMR1 diye bir sayaç tanımladım 200 e gelince ledi yak dedim hiç bir tıkyok malesef.
örnek kod:
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode(){
if (INTCONbits.TMR0IF) {
TMR1++;
if ( TMR1 == 200 )
mLED_2_On();
}
}
ayar yapayım diye timer2 ile çalışayım dedim onuda ekleyince usb tamamen duruyor - eski arabalar gibi istop ediyor :)
static void Initialize_System(void)
{
//ADCON1 |= 0x0F; // Default all pins to digital
UserInit();
USBDeviceInit(); //usb_device.c. Initializes USB module SFRs and firmware
OpenTimer2(TIMER_INT_ON & T2_PS_1_16 & T2_POST_1_16);
PR2 = 250;
RCONbits.IPEN = 1;
INTCONbits.GIE = 1;
PIE1bits.TMR2IE = 1;
}
arkadaşlar deneme yapıyorum timer0 low öncelikli interruptları algılasın diye aşağıdaki kodu initilaized kısmına yazdım ama olmuyor nasıl yaparız fikri olan ?
INTCON2bits.TMR0IP = 0; // timer0 low periyodu yakala
INTCONbits.TMR0IF = 0; // Timer0 temzile
INTCONbits.TMR0IE = 1; // timer0 aktifleştir.
buda interrupt kodu.
unsigned long sayac;
#pragma code
// ISR de interrupciones:
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode(){
if(INTCONbits.TMR0IF){
}
#if defined(USB_INTERRUPT)
USBDeviceTasks();
#endif
}
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode(){
Usb_Interrup_Test();
}
#pragma code
void Usb_Interrup_Test(void)
{
LATBbits.LATB6=1;
if (INTCONbits.TMR0IF)
{
INTCONbits.TMR0IF = 0;
sayac ++;
if ( sayac == 150 ) {
//sayac = 0;
LATBbits.LATB7=1;
}
}
}
arkadaşlar stack taşmasından dolayı resetleniyormuş 18f4550.lkr dosyasında ve kodda örnekte verdiğim düzenlemeleri yapıp timeride low modda iken çalıştırıyorum. ayrıca grafik lcd vb. donanımlarıda kullanırken kesme bayrağını sıfırlamak gerekiyor.
18f4550.lkr
LIBPATH .
FILES c018i.o
FILES clib.lib
FILES p18f4550.lib
CODEPAGE NAME=bootloader START=0x0 END=0xFFF PROTECTED
CODEPAGE NAME=vectors START=0x1000 END=0x1029 PROTECTED
CODEPAGE NAME=page START=0x102A END=0x7FFF
CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED
CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED
CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
CODEPAGE NAME=eedata START=0xF00000 END=0xF000FF PROTECTED
ACCESSBANK NAME=accessram START=0x0 END=0x5F
DATABANK NAME=gpr0 START=0x60 END=0xFF
DATABANK NAME=gpr1 START=0x100 END=0x1FF
DATABANK NAME=gpr2 START=0x200 END=0x2FF
DATABANK NAME=gpr3 START=0x300 END=0x3FF
DATABANK NAME=usb4 START=0x400 END=0x4FF PROTECTED
DATABANK NAME=usb5 START=0x500 END=0x5FF PROTECTED
DATABANK NAME=usb6 START=0x600 END=0x6FF PROTECTED
DATABANK NAME=usb7 START=0x700 END=0x7FF PROTECTED
ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED
SECTION NAME=CONFIG ROM=config
STACK SIZE=0x100 RAM=gpr3
SECTION NAME=USB_VARS RAM=usb4
// ISR de interrupciones:
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode(){
if(INTCONbits.TMR0IF){}
#if defined(USB_INTERRUPT)
PIR1bits.TMR1IF = 0;
USBDeviceTasks();
#endif
}
#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode(){
if(PIR1bits.TMR1IF == 1){
PIR1bits.TMR1IF = 0;
interrupt_flag=0;
}
}
#pragma code
timer init kod:
static void Initialize_Timer(void)
{
OpenTimer1( TIMER_INT_ON & // Turn on TMR1
T1_8BIT_RW & // 16 bit timer
T1_SOURCE_INT & // Internal clock source
T1_PS_1_8 & // 1:1 prescale
T1_OSC1EN_OFF & // Disable oscillator
T1_SYNC_EXT_OFF ); // Disable sync of external clock
RCONbits.IPEN = 0; // Enable interrupt prioritizing
INTCONbits.GIEH = 1; // Enable high priority interrupts
IPR1bits.TMR1IP = 1; // Set TMR1 interrupt priority
PIE1bits.TMR1IE = 1; // Enable TMR1 interrupts
PIR1bits.TMR1IF = 0; // Clear TMR1 interrupt flag
TMR1H = 0x85; //Timer Reload to count 1s
TMR1L = 0xEE;
INTCONbits.GIEL = 1; // Enable low priority interrupts
}
güzel bir konu olmus elınıze saglık