Autor Tema: rutina de retardo, no trabaja??  (Leído 6639 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
rutina de retardo, no trabaja??
« en: 10 de Marzo de 2008, 03:15:07 »
Hola este es el codigo que estoy utilizando:

#include "p30f3010.h"

//Bit's de Configuracion
_FOSC(CSW_FSCM_OFF & XT_PLL8);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & BORV_27 & PWRT_16 & MCLR_EN);
_FGS(CODE_PROT_OFF);


int main(void){

   TRISE = 0x0000;
   PORTE = 0x0000;
      while(1){
         PORTE = ~PORTE;
         delay_us(1000);         
      }   
return 0;
}

//eof


Esta es la rutina de Tiempo que tome de la pagina de http://www.micropic.es/index.php?option=com_content&task=view&id=33&Itemid=58 (Micro PIC):

#define MIPS 24

/*********************************************/
/**  Función para hacer un retardo de x us  **/
/**  generada automáticamente por asistente **/
/**             www.micropic.es           **/
/**              Nocturno - 2006            **/
/**       Válida para MIPS>=16 (>32MHz)     **/
/**        Valores de x: de 0 a 65535       **/
/*********************************************/

void delay_us(unsigned int x) {
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS-16));
  while ((x--)!=1) {
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS-7));
  };
};

/*********************************************/
/**  Función para hacer un retardo de x ms  **/
/**  generada automáticamente por asistente **/
/**             www.micropic.es           **/
/**              Nocturno - 2006            **/
/**      Válida para MIPS>=0.24 (>48KHz)    **/
/**        Valores de x: de 0 a 65535       **/
/*********************************************/

void delay_ms(unsigned int x) {
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-5));
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-5));
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-6));
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-6));
  while ((x--)!=1) {
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-4));
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-3));
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-3));
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-3));
  };
}


El cristal que utilizo es de 12 Mhz, alguien sabe que estoy haciendo mal??? disculpen las preguntas tan de newbie


Gracias!

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: rutina de retardo, no trabaja??
« Respuesta #1 en: 10 de Marzo de 2008, 03:21:58 »
¿Cómo sabes que no funciona?, ¿estás mirándolo con un frecuencímetro?

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
Re: rutina de retardo, no trabaja??
« Respuesta #2 en: 10 de Marzo de 2008, 12:25:12 »
es que ya intente poniendo el retardo de 1 segundo  delay_ms(1000) [en el codigo que corro actualmente tengo esta llamada en vez de delay_us] y se alcanza a ver el cambio en el puerto E, los leds no parpadean.

que podra estar mal?

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: rutina de retardo, no trabaja??
« Respuesta #3 en: 10 de Marzo de 2008, 13:11:57 »
Pues no veo que tengas nada mal; ¿en el simulador de MPLAB se ve funcionar bien?

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
Re: rutina de retardo, no trabaja??
« Respuesta #4 en: 10 de Marzo de 2008, 13:31:43 »
Si en el Simulador del MPLAB todo funciona bien pero en el circuito ya no,  los leds se quedan prendidos

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
Re: rutina de retardo, no trabaja??
« Respuesta #5 en: 10 de Marzo de 2008, 15:24:00 »
me fije que tenia:

_FOSC(CSW_FSCM_OFF & XT_PLL8);

pero estoy usando un cristal de 12 Mhz lei que lo maximo del cristal era de 10 Mhz para este modo asi que cambie el fuse por HS2_PLL16 para dejar segun yo los mismos 24 MIPS.

Hice el cambio pero sigue igual, alguien tiene alguna otra idea de que pueda ser???

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
Re: rutina de retardo, no trabaja??
« Respuesta #6 en: 10 de Marzo de 2008, 16:21:43 »
delay_us(1000);   es muy poca cosa para que veas un parpadeo

ponle delay_ms(500);   

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
Re: rutina de retardo, no trabaja??
« Respuesta #7 en: 10 de Marzo de 2008, 16:26:25 »
Tampoco esta funcionando con delay_ms(500), parece que solo se queda en prendido, podria ser algo del hardware?

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1700
    • winpic800
Re: rutina de retardo, no trabaja??
« Respuesta #8 en: 10 de Marzo de 2008, 17:05:14 »
    while(1){
         PORTE = 0xFFFF;
         delay_ms(500);         

         PORTE = 0x0000;
         delay_ms(500);       
      }   

y asi

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
Re: rutina de retardo, no trabaja??
« Respuesta #9 en: 10 de Marzo de 2008, 17:31:04 »
No no funciona, asi es como luce actualmente el codigo



#include "p30f3010.h"
#define MIPS 24

//Bit's de Configuracion
_FOSC(CSW_FSCM_OFF & HS2_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & BORV_27 & PWRT_16 & MCLR_EN);
_FGS(CODE_PROT_OFF);

void delay_ms(unsigned int x);

int main(void){

   TRISE = 0x0000;
   PORTE = 0x0000;
      while(1){
         PORTE = 0x0000;
         delay_ms(500);
         PORTE = 0xFFFF;
         delay_ms(500);
      }   
return 0;
}


void delay_ms(unsigned int x) {
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-5));
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-5));
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-6));
  asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-6));
  while ((x--)!=1) {
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-4));
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-3));
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-3));
    asm ("REPEAT #%0\n NOP" :: "i" (MIPS*250-3));
  }
}
//eof

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: rutina de retardo, no trabaja??
« Respuesta #10 en: 10 de Marzo de 2008, 18:09:42 »
El puerto E se comparte con el periférico que genera PWM en ese micro.
¿Será que tienes activo el generador de PWM?.

Prueba a poner esto antes del TRIS:
PTCONbits.PTEN=0;

Si no funciona así, la única opción que se me ocurre es que escribas en LAT en vez de en PORT

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
Re: rutina de retardo, no trabaja??
« Respuesta #11 en: 10 de Marzo de 2008, 18:51:34 »
Hola ya realice PTCONbits.PTEN=0; pero sigue igual y tambien escribiendo en las LAT, si le mando un solo dato como :

PORTE = 0x0010;

o

PORTE = 0x000F;

Funciona correctamente

estoy utilizando el dsPIC 30F3010 con las siguentes conexiones:

PIN

8        GND
9        XT(12 MHZ) C1 (15 pf)
10      XT(12 MHZ) C2 (15 pf)
13      5v

19      GND
20      5v

21 ... 26  LED con resistencia 330 ohms

Algo de eso podra estar mal??

Gracias

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
Re: rutina de retardo, no trabaja??
« Respuesta #12 en: 11 de Marzo de 2008, 12:52:01 »
Pues no lo pude hacer funcionar mas que con un timer, me gustaria saber por que no funciona de la otra manera por que ni siquiera con __delay32 lo pude hacer trabajar, bueno por aqui les dejo el codigo de como lo deje trabajando:


#include "p30f3010.h"

//Bit's de Configuracion
_FOSC(CSW_FSCM_OFF & XT_PLL16);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_OFF & BORV_27 & PWRT_16 & MCLR_EN);
_FGS(CODE_PROT_OFF);

#define FCY 32000000

int main(void){

   PTCONbits.PTEN=0;
   //LATE = 0xffff;
   TRISE = 0xfff0;
   PORTE = 0x0000;
   T1CON = 0;
   TMR1 = 0;
   PR1 = FCY/256/5;
   T1CON = 0x8030;
      while(1){
         while(!IFS0bits.T1IF){}
            IFS0bits.T1IF = 0;
            PORTE = ~PORTE;
      }   
return 0;
}


//eof

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18310
    • MicroPIC
Re: rutina de retardo, no trabaja??
« Respuesta #13 en: 11 de Marzo de 2008, 13:50:31 »
La verdad es que no lo sé. Yo ahora mismo ando liado con un proyecto con 30F6014 y utilizo las rutinas de retardo tal y como tú has pegado.

Desconectado ashmx

  • PIC10
  • *
  • Mensajes: 17
Re: rutina de retardo, no trabaja??
« Respuesta #14 en: 12 de Marzo de 2008, 00:58:50 »
Bueno tratare de averiguar que paso, muchas gracias por su ayuda y encuanto sepa algo del por que se los hare saber!!

Gracias


 

anything