Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

02/04/2012 #1


Hola, les comento un poco mi problema. Baje la librería de microchip para usar el USB del 18f4550. Usando la de "Mouse HID device" me fui a "mouse.c" para crear mi propio programa.

Configuro el timer1 para interrupir cada x segundos. La ISR hace prender un led a la vez, pero lo rota cada vez que se dispara la isr. La duda viene sobre la duracion de la misma, la cual no es pareja. O sea, al prender el 3 led apagarse y prender el 4, el tiempo transcurrido es notoramiente superior al resto..

adjunto el codigo.
Código:
#pragma interrupt YourHighPriorityISRCode
	void YourHighPriorityISRCode()
	{
		//Check which interrupt flag caused the interrupt.
		//Service the interrupt
		//Clear the interrupt flag
		//Etc.
        if (PIR1bits.TMR1IF == 1)
        {
            CloseTimer1();
            if (counter == 10)   // no me da el tiempo del timer1 para lograr el tiempo q necesito. Agrego una
// variable auxiliar.
{ if (action == 0) //0 - moveUP hay 5 acciones. { mLED_3_On(); mLED_7_Off(); BuzzerOn(); Delay1KTCYx (35000); BuzzerOff(); buffer[0] = 0; buffer[1] = 0; buffer[2] = -1; } if (action == 1) //1 - moveLEFT { mLED_4_On(); mLED_3_Off(); BuzzerOn(); Delay1KTCYx (35000); BuzzerOff(); buffer[0] = 0; buffer[1] = 1; buffer[2] = 0; } if (action == 2) //1 - moveDOWN { mLED_5_On(); mLED_4_Off(); BuzzerOn(); Delay1KTCYx (35000); BuzzerOff(); buffer[0] = 0; buffer[1] = 0; buffer[2] = 1; } if (action == 4) //1 - moveDOWN { mLED_6_On(); mLED_5_Off(); BuzzerOn(); Delay1KTCYx (35000); BuzzerOff(); buffer[0] = 0; buffer[1] = -1; buffer[2] = 0; } if (action == 5) //5 - leftClic { mLED_7_On(); mLED_6_Off(); BuzzerOn(); Delay1KTCYx (35000); BuzzerOff(); buffer[0] = 0b00000001; buffer[1] = 0; buffer[2] = 0; } if (action > 5) action = 0; else action ++; } counter ++; //Clear the interrupt flag PIR1bits.TMR1IF = 0; //Clear the interrupt flag OpenTimer1(TIMER_INT_ON & T1_16BIT_RW & T1_SOURCE_INT & T1_PS_1_1 & T1_OSC1EN_OFF &T1_SYNC_EXT_OFF); WriteTimer1(15625); } #if defined(USB_INTERRUPT) USBDeviceTasks(); #endif }
el open timer1 supongo que sobra.
afuera de la isr se configura el timer y se escribe el valor deaseado.

El main. es un while(1)

---------- Actualizado después de 27 minutos ----------

Se puede cerrar el tema. Eran multiples errores.
Fataba poner:
1) counter = 0
2) me comi el action = 3
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.