Autor Tema: Ayuda con Vectores en DSPIC  (Leído 3178 veces)

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

Desconectado COAR

  • PIC10
  • *
  • Mensajes: 5
Ayuda con Vectores en DSPIC
« en: 15 de Febrero de 2006, 11:15:00 »
Que tal amigos del foro... pofa me pueden ayudar, tengo un problema con el DSpic 30F3011 necesito trabajar con datos ordenados en vectores pero cuando agrego esta subrutina al programa principal del DSpic este se resetea, sin esta subrutina el DSpic trabaja correctamente.
Porfa como lo puedo solucionar.
Saludos desde Ecuador ...

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: Ayuda con Vectores en DSPIC
« Respuesta #1 en: 15 de Febrero de 2006, 11:24:00 »
Esto ocurre cuando el vector es incorrecto .

Quizá si pegas la parte del codigo tengas mas ayuda

suerte


Desconectado COAR

  • PIC10
  • *
  • Mensajes: 5
RE: Ayuda con Vectores en DSPIC
« Respuesta #2 en: 17 de Febrero de 2006, 08:50:00 »
Gracias por su interes aqui les envio el programa es de un vehiculo movil que racoge datos de posicion en su recorrido y los almacena como una estructura, cuando queremos recupera algun dato las banderas colocadas se bajan y es como si el programa se inizializara perdiendo el resto de informacion. Espero que me puedan ayudar GRACIAS


#define    ON      1
#define   OFF      0

#define    Derecha      1
#define   Izquierda      0

#define    Back      1
#define   Forward   0

#define __dsPIC30F3013_
#include <p30f3013.h>
#include <ports.h>

/****************************************/
/*  FUSES                               */
/****************************************/

_FOSC( CSW_FSCM_OFF & XT_PLL8);
_FWDT(WDT_OFF);
_FBORPOR(PBOR_ON  & PWRT_OFF & MCLR_EN);

/****************************************/
/*  DEFINICIONES Y DECLARACIONES        */
/****************************************/

#define MIPS 78125 // 20 Cristal De 20M


/******** VARIABLES PARA SENSORES*****/
#define sensor_delantero   PORTBbits.RB0
#define ON_OFF      PORTBbits.RB3

#define Tris_sensor_delantero   TRISBbits.TRISB0
#define Tris_ON_OFF      TRISBbits.TRISB3

/******** LEDS *****************************/
#define Led_R      PORTBbits.RB7
#define Led_V      PORTBbits.RB8
#define Led_ON_OFF      PORTBbits.RB6

#define Tris_Led_R      TRISBbits.TRISB7
#define Tris_Led_V      TRISBbits.TRISB8
#define Tris_Led_ON_OFF           TRISBbits.TRISB6

/****************************************/
/*  ESTRUCTURAS                         */
/****************************************/
struct Camino{
   int Distancia;
   unsigned int Recta;
   unsigned char IDdir;
};


volatile struct Camino Matriz[30];
/****************************************/
/*  VARIABLES DE ÁMBITO GLOBAL          */
/****************************************/
unsigned int i=0;
int CuentoRecta=0X0000;
int CuentoArco=0;

unsigned char Accion_Busqueda=0;
unsigned char Accion_Curva=0;
unsigned char Accion_Freno=0;
unsigned char Accion_Normal=0;
unsigned char SensorFrontal=0;
unsigned char SensorIzquierda=0;
unsigned char SensorDerecha=0;
unsigned char ON_OFF_FLAG=0;

int CaminoNumero=0;


/****************************************/
/*  FUNCIONES                           */
/****************************************/
void LEDS(void);

/****************************************/
/* Interrupcion INT0       */
/****************************************/

void __attribute__((__interrupt__)) _INT0Interrupt(void)
{

SensorDerecha=ON;

IFS0bits.INT0IF = 0;
}

/****************************************/
/* Interrupción INT1   */
/****************************************/
void __attribute__((__interrupt__)) _INT1Interrupt(void)
{

SensorIzquierda=ON;

IFS1bits.INT1IF = 0;
}

/****************************************/
/* Interrupción INT2       */
/****************************************/
void __attribute__((__interrupt__)) _INT2Interrupt(void)
{

CuentoRecta++;

IFS1bits.INT2IF = 0;
}

/****************************************/
/* Configuracion Interrupcion INT0   INT1    */
/****************************************/

void interConfig(void)
{

int config0;
int config1;
int config2;

config0 = FALLING_EDGE_INT &
         EXT_INT_PRI_5;
ConfigINT0(config0);

config1 = FALLING_EDGE_INT &
         EXT_INT_PRI_6;

ConfigINT1(config1);

config2 = RISING_EDGE_INT &
         EXT_INT_PRI_7;

ConfigINT2(config2);

EnableINT0;
EnableINT1;
EnableINT2;

}



/****************************************/
/* Configuracion ENTRADAS SALIDAS       */
/****************************************/

int portb_config()
   {

   ADPCFG = 0XFFFF; // Configura el puerto B como I/O digital


/******** ENTRADAS *****/
   Tris_sensor_delantero=1;
   Tris_ON_OFF=1;

     TRISDbits.TRISD8=1;
     TRISDbits.TRISD9=1;
     TRISFbits.TRISF6=1;

/******** SALIDAS *****/

   Tris_Led_ON_OFF=0;
   Tris_Led_R=0;
   Tris_Led_V=0;
   }

/****************************************/
/* Realiza una pausa de v microsegundos (1us) */
/****************************************/

void DelayUs(unsigned int v)   // 20 MIPS
 {
   while(v != 0){
   asm("nop"Giño;asm("nop"Giño;
   asm("nop"Giño;asm("nop"Giño;
   asm("nop"Giño;asm("nop"Giño;
   asm("nop"Giño;asm("nop"Giño;

   asm("nop"Giño;asm("nop"Giño;
   asm("nop"Giño;asm("nop"Giño;
   asm("nop"Giño;asm("nop"Giño;
   asm("nop"Giño;asm("nop"Giño;
      v--;
   }
 }

/****************************************/
/* Realiza una pausa de v milisegundos (1ms)  */
/****************************************/

void DelayMs(unsigned int v)
 {
   while (v != 0 ){
      DelayUs(1000);
      v--;
   }
 }

/************************************************/
void Inicializacion(void)
/************************************************/
{

portb_config();
interConfig();

LEDS();

}

/****************************************/
void Guardo_Info (Distancia,Recta, IDdir)
/****************************************/
{
   Matriz[CaminoNumero].Distancia=Distancia;
   Matriz[CaminoNumero].Recta=Recta;
   Matriz[CaminoNumero].IDdir=IDdir;
   CaminoNumero++;
}

/****************************************/
void LEDS(void)
/****************************************/
{
if (SensorDerecha)
   {
   Led_R = ON;
   }
else
   {
   Led_R = OFF;
   }

if (SensorIzquierda)
   {
   Led_V = ON;
   }
else
   {
   Led_V = OFF;
   }

Led_ON_OFF = ON_OFF_FLAG;
;
}
/****************************************/
/* PROGRAMA PRINCIPAL      */
/****************************************/

int main()
{

Inicializacion();
LEDS();

PP:
if (!ON_OFF_FLAG & !ON_OFF>0)
   {

   DelayMs(1500);

   ON_OFF_FLAG=ON;
   LEDS();
   }
else if (ON_OFF_FLAG & !ON_OFF>0)
   {

   DelayMs(1000);
   ON_OFF_FLAG=OFF;
   LEDS();
   }

else if (Accion_Normal & sensor_delantero != 0)
   {

   Accion_Busqueda= !Accion_Busqueda;   
   LEDS();
   }

else if(SensorDerecha & !Accion_Busqueda & !Accion_Curva){

   Guardo_Info (CuentoRecta,0,Derecha);
   LEDS();
   SensorDerecha =OFF;
   }
else if(SensorIzquierda & !Accion_Busqueda & !Accion_Curva){

   Guardo_Info (CuentoRecta,0,Izquierda);
   LEDS();
   SensorIzquierda=OFF;
   }

else
   {
   }

goto PP;
}

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: Ayuda con Vectores en DSPIC
« Respuesta #3 en: 17 de Febrero de 2006, 10:12:00 »
Si .... , pero ayudanos a encontrar el sitio en donde falla .

Desconectado COAR

  • PIC10
  • *
  • Mensajes: 5
RE: Ayuda con Vectores en DSPIC
« Respuesta #4 en: 20 de Febrero de 2006, 11:10:00 »
En el programa principal "main ()"

despues que se a dado int0 o int1 las siguientes instrucciones que seguirían

son:

***************************************************
else if(SensorDerecha & !Accion_Busqueda & !Accion_Curva){ //para int0

Guardo_Info (CuentoRecta,0,Derecha);
LEDS();
SensorDerecha =OFF;
}
else if(SensorIzquierda & !Accion_Busqueda & !Accion_Curva){  //para int1

Guardo_Info (CuentoRecta,0,Izquierda);
LEDS();
SensorIzquierda=OFF;
}
**************************************************

al simular en el MPLAB todo parece estar bien, pero al programar el micro, todo parece estar correcto hasta que damos un pulso ya sea en int0 o int1 que son las que me indican que debe pasar a la subrutina "Guardo_Info"

/****************************************/
void Guardo_Info (Distancia,Recta, IDdir)
/****************************************/
{
Matriz[CaminoNumero].Distancia=Distancia;
Matriz[CaminoNumero].Recta=Recta;
Matriz[CaminoNumero].IDdir=IDdir;
CaminoNumero++;
}

donde guardo los datos. Pero a la vez se pierden los valores de las banderas

unsigned char Accion_Busqueda=0;
unsigned char Accion_Curva=0;
unsigned char Accion_Freno=0;
unsigned char Accion_Normal=0;
unsigned char SensorFrontal=0;
unsigned char SensorIzquierda=0;
unsigned char SensorDerecha=0;
unsigned char ON_OFF_FLAG=0;

porqué pasa esto?
que puedo hacer para solucionar este problema?

por fa ayudenme..!! gracias

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: Ayuda con Vectores en DSPIC
« Respuesta #5 en: 20 de Febrero de 2006, 13:18:00 »


Pienso que puede ser devido a que has declarado
volatile struct Camino Matriz[30]; .. cosa muy correcta

pero si "CaminoNumero" se incrementa mas de 29 se jode la marrana y puede venir el cuelge , eso puede ser devido a los rebotes de algun pulsador  .



Codigo:

/****************************************/
void Guardo_Info (Distancia,Recta, IDdir)
/****************************************/
{
Matriz[CaminoNumero].Distancia=Distancia;
Matriz[CaminoNumero].Recta=Recta;
Matriz[CaminoNumero].IDdir=IDdir;
if (CaminoNumero < 29 ) CaminoNumero++;  // Obcional para poder ver si es el problema .
}



suerte

Desconectado COAR

  • PIC10
  • *
  • Mensajes: 5
RE: Ayuda con Vectores en DSPIC
« Respuesta #6 en: 22 de Febrero de 2006, 10:57:00 »
Muchas gracias voy a considerar tu consejo.
El problema es que en la primera interrupcion (al guardar el primer dato ) ya se me da el problema.
!GRACIAS Sispic!

Desconectado Sispic

  • Moderador Local
  • PIC24H
  • *****
  • Mensajes: 1685
    • winpic800
RE: Ayuda con Vectores en DSPIC
« Respuesta #7 en: 22 de Febrero de 2006, 11:01:00 »
si es posible , sin algo antirrebotes no es dificil llegar a 30 con una pulsación

Codigo:

struct Camino{
int Distancia;
unsigned int Recta;
unsigned char IDdir;
}Matriz[30];



Asi tambien seria correcto no ?

Desconectado COAR

  • PIC10
  • *
  • Mensajes: 5
RE: Ayuda con Vectores en DSPIC
« Respuesta #8 en: 02 de Marzo de 2006, 14:44:00 »
Gracias Sispic sigo probando el programa parece que ya se soluciono este problema aunque estoy todavia aumentado el resto de subrutinas espero que al hacer esto el programa siga funcionando si se me presenta algun otro problema yo les consulto MUCHAS GRACIAS! Giño


 

anything