Grafik LCD ve USB sapıtıyor sonrada pic kendini resetliyor.

Başlatan computerboy, 23 Şubat 2013, 19:32:16

computerboy

Herkese merhaba,

Arkadaşlar hobi olarak cnc kontroller yapıyorum  motorların daha stabil çalışması için timer kullanmam gerekiyor. ancak timeri kurunca pic tamamen sapıtıyor. grafik lcd siliniyor usb data iletişimi kesiliyor ve sonra pic reset atıyor. config ayarlarından denemediğim  yer kalmadı. sorun hakkında bi kaç fikir edindim usb isr kesmesi 10 ms aralıklarla olması gerekiyor timer bu periyodu bozuyor. timeri nasıl kurarsam sorun çözülür acaba ? yada config ayarlarından nereleri kontrol etmeliyim ? başka önerisi olan ?

config kod.

#define OSC_SPEED 20000000 // 20 MHz(PIC oscillator speed)

//set fuses, configuration bits???
#pragma config FOSC   = HSPLL_HS
#pragma config VREGEN = ON
#pragma config PLLDIV = 5			
#pragma config CPUDIV = OSC1_PLL2   // OSC1_PLL2 //  OSC4_PLL6
#pragma config USBDIV = 2

#pragma config MCLRE = ON 	// Enable MCLR Enable

#pragma config WDT	 = ON	// Disable Watchdog timer
#pragma config WDTPS = 32768

#pragma config CCP2MX=ON,PBADEN=OFF ,PWRT=ON
#pragma config LPT1OSC=ON,STVREN=ON,XINST=OFF,DEBUG=ON
#pragma config WRTB=OFF


#pragma config FCMEN = ON // Disable Fail-Safe Clock Monitor
#pragma config IESO = ON // Disable Oscillator Switchover mode

#pragma config BOR = ON		// Disable Brown-out reset
#pragma config BORV = 1

#pragma config LVP = OFF // Disable low voltage ICSP
#pragma config ICPRT = OFF // Disable dedicated programming port (only on 44-pin devices)
#pragma config CP0 = OFF // Disable code protection


timer kod
static void Initialize_Timer(void)
{
	OpenTimer1(TIMER_INT_ON  & T1_8BIT_RW &  T1_SOURCE_INT & T1_PS_1_1);

	WriteTimer1(0);
	INTCONbits.PEIE = 1; 
  	RCONbits.IPEN = 1;
  	INTCONbits.GIE = 1;
  	PIE1bits.TMR1IE = 1;
	INTCONbits.GIEL = 1;

}


interrup kod
// Nos ubicamos en vector 0x08 y direccionamos funcion a ejecutar:
#pragma code HIGH_INTERRUPT_VECTOR = 0x08
void High_ISR (void){
	_asm goto YourHighPriorityISRCode _endasm
}

// Nos ubicamos en vector 0x18 y direccionamos funcion a ejecutar:
#pragma code LOW_INTERRUPT_VECTOR = 0x18
void Low_ISR (void){
	_asm goto YourLowPriorityISRCode _endasm
}	

#pragma code
// ISR de interrupciones:
#pragma interrupt YourHighPriorityISRCode
void YourHighPriorityISRCode(){
if(INTCONbits.TMR0IF){ 
	#if defined(USB_INTERRUPT)
		USBDeviceTasks();
    #endif
}
if(PIR1bits.TMR1IF == 1){
	PIR1bits.TMR1IF = 0;
   }
}


#pragma interruptlow YourLowPriorityISRCode
void YourLowPriorityISRCode(){

}
#pragma code