Autor Tema: problema de comunicacion entre 3 pic(AYUDA)  (Leído 398 veces)

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

Desconectado Raydel

  • PIC10
  • *
  • Mensajes: 9
problema de comunicacion entre 3 pic(AYUDA)
« en: 25 de Septiembre de 2018, 15:06:43 »
hola.necesito saber si alguien me puede ayudar a comunicar 3 pic para un control de nivel que estoy haciendo.ya probe la comunicacion con la salida directa TTl y puedo comunicar los 3 ,pero cuando le pongo el convertidor max490E (es un convertidor full duplex y no tienes los pines de control de recepcion- trasmision) solo puedo comunicar dos y el tercero recibe la informacion que le mando desde el maestro pero no recibo la informacion que le pido .

Desconectado elreypic2

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #1 en: 25 de Septiembre de 2018, 19:43:19 »
Que tal Raydel,

El MAX490E no te va a servir para dicho propósito. Ya que necesitas los pines de control de transmisión-recepción. Esto porque no puedes tener dos transmisores habilitados al mismo tiempo, ya que esto provoca una colisión. Tienes que cambiar el MAX490E por un MAX489 o un MAX491.

elreypic.

Desconectado Raydel

  • PIC10
  • *
  • Mensajes: 9
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #2 en: 05 de Octubre de 2018, 11:11:00 »
cambie el max490E por por el ds75176 y estoy teniendo problemas para a que los esclavos les llegue la informacin que manda el maestro.
el circuito lo tengo montado en un protoboard y pienso que esto me esta haciendo falsos contacto en ocaciones .si alguien me pudiera dar algun esquema de coneccion del DS75176 para mantener el diferencial lo mas estable posible  y tambien si pudieran darme algun codigo para verificar si tengo algun problema de programacion a la hora de tratar la comunicacion.

Desconectado elreypic2

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #3 en: 05 de Octubre de 2018, 12:17:11 »
Que tal Raydel,

Lo mejor es que tú nos compartas lo que estás haciendo. Es más fácil que coloques tu esquemático y tu códico y de allí partir.

Yo creo que los posibles problemas son:

1) conexionado
2) Falta de las resistencias de terminación para el bus RS485 (2 resistencias de 120 ohms, una en cada extremo del bus)

Dale una mirada a la hoja de datos del MAX481 en la pagina 13, para que veas de lo que estoy hablando. Este es el link:
https://datasheets.maximintegrated.com/en/ds/MAX1487-MAX491.pdf

3) Algún problema en el hardware al manejar los habilitadores de transmisión recepción. Anteriormente estaba suando full duplex, pero ahora con el DS75176 tienes que usar half-duplex y eso te inclina a modificar el código en tu Master y esclavos para poder habilitar la transmision y recepción cuando sea necesario.

elreypic.
« Última modificación: 05 de Octubre de 2018, 12:27:10 por elreypic2 »

Desconectado Raydel

  • PIC10
  • *
  • Mensajes: 9
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #4 en: 09 de Octubre de 2018, 14:08:29 »
este es el programa de los esclavos(solo le cambio la direc)
include <Tanque.h>
#use standard_io (A)
#use standard_io (B)
#use standard_io (C)

int8 bandera;
int8 serie;

#INT_RDA
void  RDA_isr(void)
{
serie=getc();
bandera=1;
 
}

void main()
{
//////////////////declaracion de variables
bandera=0;
int8 direc=0;
serie=0;
bandera=0;
float tiempo=0;
//int16 nivel=0;
//int16 altura_tanque=76;
int16 distancia=0;
int8 parte_alta=0;
int8 parte_baja=0;
///////////configuracion de puertos y configuracion de la TX-RX serie
set_tris_a(0xff);            //RA0-RA5 entradas
set_tris_b(0xff);
set_tris_C(0b10000010);
 output_bit(pin_C0,0);
setup_timer_1(T1_INTERNAL|T1_DIV_BY_2);
port_B_pullups(0xFF);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);
output_low(pin_b7);
output_low(pin_C5); ///// habilitada recepcion

output_low(pin_C6);
while(TRUE)
   {
   while(bandera==0);
   
   bandera=0;
   direc=serie;
   
         if(direc==1)
 
         {
         
         output_high(pin_C5); /////habilita la trasmicion
         output_toggle(PIN_B7);
         putc(1);
         delay_ms(20);
         direc=0;
         output_bit(pin_C0,1); // pulso de 15us para  que el sensor mida
         delay_us(15); 
         output_bit(pin_C0,0);
         while(input(pin_C1)==0);
         set_timer1(0);
         while(input(pin_C1)==1);//espero que el triguer baje para capturar el tiempo
         tiempo=get_timer1();// recojo el tiempo
         distancia=tiempo/58;//formula para medir distancia
         //nivel=altura_tanque - distancia; // formula para medir nivel
         parte_alta=(distancia & 0xFF00)>>8; //trasmito primero la parte alta
         putc(parte_alta);
         delay_ms(20);
         parte_baja=distancia;//trasmito la parte baja
         putc(parte_baja);
         delay_ms(20);
         output_low(pin_C5); ///// habilitada recepcion
         
         }
 
   }

}
este es el programa del maestro
#include <master.h>
#use standard_io (A)
#use standard_io (B)
#use standard_io (C)
#include <lcd2.c>   //Incluir funciones de manejo del LCd
int8 serie_high;
int8 serie_low;
int8 direc;
int8 bandera;
int8 cont_rcepcion;
/* En la interrupcion de la recepcion por puerto serie primero se recibe  la direc despues la parte alta del dato
y finalmente la parte baja y posteriormente se activa la bandera*/
#INT_RDA
void  RDA_isr(void)
{
   if(cont_rcepcion==0)
   {
   delay_ms(20);
   direc=getc();
   cont_rcepcion++;
   
   }
   else if(cont_rcepcion==1)
   {
   delay_ms(20);
   serie_high=getc();
   cont_rcepcion++;
   }
   else
   {
   delay_ms(20);
   cont_rcepcion=0;
   serie_low=getc();
   bandera=1;
 
   }
}

void main()
{
//////////declaracion de variables
direc=0;
serie_low=0;
serie_high=0;
cont_rcepcion=0;
bandera=0;
int16 distancia_CIS=0;
int16 distancia_TAN=0;

///////////configuracion de puertos y configuracion de la TX-RX serie
port_B_pullups(0xFF);
set_tris_a(0x00);           
set_tris_b(0x00);
set_tris_C(0b10000000);
enable_interrupts(INT_RDA);
enable_interrupts(GLOBAL);

////////Configuracion e inicializacion de la LCD
lcd_init();   // Comandos de inicialización del LCD.
printf(lcd_putc,"\finiciando.");
delay_ms(500);
printf(lcd_putc,"\finiciando..");
delay_ms(500);
printf(lcd_putc,"\finiciando...");
delay_ms(500);
printf(lcd_putc,"\f");
output_low(pin_C0);////////////led para visualizar si hubo una comunicacin
output_high(pin_C5); ///// habilitada trasmicion
putc(1); //mando la direccion
delay_ms(20);
output_low(pin_C5); ///// habilito recepcion

   while(TRUE)
   {   
       if(bandera==1)
       {
         
         output_toggle(pin_C0);////////////led para visualizar si hubo una comunicacin
         output_high(pin_C5); ///// habilitada trasmicion
       
         switch(direc)
         {
       // Almacenamiento de la parte alta del dato
            case 1:
            distancia_TAN=serie_high;
            distancia_TAN=distancia_TAN<<8;
            distancia_TAN=(distancia_TAN & 0xff00 )|serie_low;
            bandera=0;
            direc=0;
            putc(2);//mando la direccion
            delay_ms(20);
            output_low(pin_C5); ///// habilito recepcion
            break;
           
      //Almacenamiento de la parte baja del dato y muestreo del nivel en Tanque y Cisterna
            case 2:
            distancia_CIS=serie_high;
            distancia_CIS=distancia_CIS<<8;
            distancia_CIS=(distancia_CIS & 0xff00 )|serie_low;
            lcd_gotoxy(1,1);
            printf(lcd_putc,"Dist_CIS=%Lu ",distancia_CIS);//Visualiza mensaje
            lcd_gotoxy(1,2);
            printf(lcd_putc,"Dist_TAN=%Lu ",distancia_TAN);//Visualiza mensaje
            putc(1); //mando la direccion
            delay_ms(20);
            output_low(pin_C5); ///// habilito recepcion
            bandera=0;
            direc=0;
            break;
        }
     
      }
    }   
 }

Desconectado elreypic2

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #5 en: 10 de Octubre de 2018, 12:11:01 »
Raydel

Podrías compartir el esquemático para revisar las conexciones que estas haciendo. Es muy dificil auyudarte con informacion parcial. Al igual necesitaría que adjuntaras los archivos Tanque.h y Master.h

Gracias,

elreypic.

Desconectado Raydel

  • PIC10
  • *
  • Mensajes: 9
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #6 en: 11 de Octubre de 2018, 15:29:20 »
 hola elreypic2 como puedo hacer para hacerte llegar la carpeta donde lo tengo todo.tienes algun gmail a donde te lo pueda mandar.no te lo he podido mandar por aqui porque la carpeta se lleva 1.21Mb.
Saludos

Desconectado elreypic2

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 908
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #7 en: 11 de Octubre de 2018, 16:05:30 »
hola elreypic2 como puedo hacer para hacerte llegar la carpeta donde lo tengo todo.tienes algun gmail a donde te lo pueda mandar.no te lo he podido mandar por aqui porque la carpeta se lleva 1.21Mb.
Saludos

Te he enviado un mensaje privado con mi email.

elreypic.

Desconectado Raydel

  • PIC10
  • *
  • Mensajes: 9
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #8 en: 22 de Octubre de 2018, 13:55:42 »
ya resolvi elreypic2,gracias por tu ayuda.sdaludos