TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: rroque en 10 de Mayo de 2010, 15:13:54

Título: El puerto de comunicaciones que conecto al pic se cuelga
Publicado por: rroque en 10 de Mayo de 2010, 15:13:54
ola q tal?
Bueno nuevamente recurro a toda la gente del foro para que me puedan guiar en un problema que tengo, primero para empezar el modulo que utilizo para conectar del pic a la pc es ft232r (serial a usb) lo pueden ver en la pagina de sparkfun, bueno lo que mi pic hace es simplemente activar y desactivar contactores por lo que a todas las entradas y saludas q utilizo estan con opto-acopladores, por ese lado no entra ningún ruido pero cuando empiezo probar esto desde la pc por unos momento envia y recibe datos de manera excelente pero de ahi colapsa el puerto de comunicaciones y no entiendo el poque les anexo el programa para ver que esta sucediendo, me olvida tamb la parte de comunicación al pic esta opto-acoplada.

Gracias ojalas me ayuden ver mi error :(

//******************************************************************************
#include <16F877A.h>
#fuses XT,NOWDT,PROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,parity=N, bits=8, stream=RS232)
#use standard_io(a)
#use standard_io(b)
#use standard_io(d)
#byte port_a = 0x05
#byte port_b = 0x06
#byte port_d = 0x08
//******************************************************************************
//Variables
//******************************************************************************
void procesa(void);

int1  flagA0=0;
int1  flagA1=0;
int1  flagA2=0;
int1  flagA3=0;
int1  flagB0=0;
int1  flagB1=0;
int1  flagB2=0;
int1  flagB3=0;
int1  flagB4=0;
int1  flagB5=0;
int1  flagB6=0;
int1  flagB7=0;
int1  flagD0=0;
int1  flagD1=0;
int1  flagD2=0;
int1  flagD3=0;


char P0;
char P1;
char P2;
char Pilot;
//******************************************************************************
//INTERRUPCIONES
//******************************************************************************
/*#INT_RDA                         //Dato serie recibido
void intrda(void)
{
if(is_run == 0)
{
 is_run = 1;
 Pilot = getc ();
 if(Pilot == 13)
  {
   procesa();
  }
 else
  {
   P2 = P1;
   P1 = P0;
   P0 = Pilot;
  }
  is_run = 0;
 }
}
*/
void procesa(void)
{
if(P0==80 && P1==76 && P2==72)
{
 printf("Ayuda\r\n");
 printf("Comandos\r\nSTA  Estatus de las entradas y salidas del sistema\r\n");
 printf("Rxy  Cambia el estado del relay x por estado y\r\n");
}
else if(P0==65 && P1==84 && P2==83)
{
 printf("OK: ");
 flagA0 = input(PIN_A0);
 flagA1 = input(PIN_A1);
 flagA2 = input(PIN_A2);
 flagA3 = input(PIN_A3);
 flagD0 = input(PIN_D0);
 flagD1 = input(PIN_D1);
 flagD2 = input(PIN_D2);
 flagD3 = input(PIN_D3);

 printf("<%u%u%u%u%u%u%u%u|%u%u%u%u%u%u%u%u>\r\n",flagA0,flagA1,flagA2,flagA3,flagD0,flagD1,flagD2,flagD3,flagB0,flagB1,flagB2,flagB3,flagB4,flagB5,flagB6,flagB7);
   delay_cycles(2);
}
else if (P2 == 82 && (P0 == 48 || P0 == 49))
{
 //printf("Procesando Cambio Estado en Relay\r\n");
 switch(P1)
 {
  case 65:
   if(P0==49)
    {
     printf("OK: RA->1\r\n");
     output_bit(PIN_B0,1);
      flagB0 = 1;
    }
   else
    {
     printf("OK: RA->0\r\n");
     output_bit(PIN_B0,0);
      flagB0 = 0;
    }
    break;

  case 66:
   if(P0==49)
    {
     printf("OK: RB->1\r\n");
     output_bit(PIN_B1,1);
      flagB1 = 1;
    }
   else
    {
     printf("OK: RB->0\r\n");
     output_bit(PIN_B1,0);
      flagB1 = 0;
    }
 break;

  case 67:
   if(P0==49)
    {
     printf("OK: RC->1\r\n");
     output_bit(PIN_B2,1);
      flagB2 = 1;
    }
   else
    {
     printf("OK: RC->0\r\n");
     output_bit(PIN_B2,0);
      flagB2 = 0;
    }
 break;

  case 68:
   if(P0==49)
    {
     printf("OK: RD->1\r\n");
     output_bit(PIN_B3,1);
      flagB3 = 1;
    }
   else
    {
     printf("OK: RD->0\r\n");
     output_bit(PIN_B3,0);
      flagB3 = 0;
    }
 break;

  case 69:
   if(P0==49)
    {
     printf("OK: RE->1\r\n");
     output_bit(PIN_B4,1);
      flagB4 = 1;
    }
   else
    {
     printf("OK: RE->0\r\n");
     output_bit(PIN_B4,0);
      flagB4 = 0;
    }
 break;

  case 70:
   if(P0==49)
    {
     printf("OK: RF->1\r\n");
     output_bit(PIN_B5,1);
      flagB5 = 1;
    }
   else
    {
     printf("OK: RF->0\r\n");
     output_bit(PIN_B5,0);
      flagB5 = 0;
    }
 break;

  case 71:
   if(P0==49)
    {
     printf("OK: RG->1\r\n");
     output_bit(PIN_B6,1);
      flagB6 = 1;
    }
   else
    {
     printf("OK: RG->0\r\n");
     output_bit(PIN_B6,0);
      flagB6 = 0;
    }
 break;

  case 72:
   if(P0==49)
    {
     printf("OK: RH->1\r\n");
     output_bit(PIN_B7,1);
      flagB7 = 1;
    }
   else
    {
     printf("OK: RH->0\r\n");
     output_bit(PIN_B7,0);
      flagB7 = 0;
    }
 break;
 
  default:
   printf("FAIL: Relay No existe\r\n");
   break;
 }
}
else
{
 printf("FAIL: Teclee HLP para ayuda\r\n");
}

}


void main(void)
{
   setup_adc_ports(NO_ANALOGS);
   setup_adc(ADC_OFF);
   enable_interrupts (INT_RDA) ;
   enable_interrupts (GLOBAL); //activadas interrupciones
   set_tris_b (0xFF);

//*********************************************************************************
//Definir estado de las entraras de los sensores a la bomba
//*********************************************************************************
//Puerto A:
   input_state(PIN_A0);
   input_state(PIN_A1);
   input_state(PIN_A2);
   input_state(PIN_A3);
//Puerto D:
   input_state(PIN_D0);
   input_state(PIN_D1);
   input_state(PIN_D2);
   input_state(PIN_D3);
//*********************************************************************************
//Definir estado de inicio de las bombas
//*********************************************************************************
   output_bit (PIN_B0, 0) ;   
   output_bit (PIN_B1, 0) ; 
   output_bit (PIN_B2, 0) ;   
   output_bit (PIN_B3, 0) ;
   output_bit (PIN_B4, 0) ;
   output_bit (PIN_B5, 0) ;
   output_bit (PIN_B6, 0) ;
   output_bit (PIN_B7, 0) ;
//********************************************************************************
//Programa para detectar el estado de las bombas
//********************************************************************************

 printf("OK: EDDAS Interface de Bombas:\n\r");
 while (1)
 {
delay_ms(150);
Pilot = getc ();
 if(Pilot == 13)
  {
   procesa();
  }
 else
  {
   P2 = P1;
   P1 = P0;
   P0 = Pilot;
  }
 }
}

Título: Re: El puerto de comunicaciones que conecto al pic se cuelga
Publicado por: rroque en 11 de Mayo de 2010, 13:13:39
bueno supongo q la gente forera abra estado ocupada ... pero buscando por el foro y viendo que ya hice todas las recomendaciones... me di contra una pared cuando le puse un capacitor ceramico 103/400V al contactor y este dejo de meter ruido
a veces la solucion mas simple es la mejor.... doy gracias al q posteo eso no recuerdo quien pero igual le doy las gracias