Autor Tema: problema de comunicacion entre 3 pic(AYUDA)  (Leído 2665 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
  • PIC24H
  • *****
  • Mensajes: 1295
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
  • PIC24H
  • *****
  • Mensajes: 1295
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
  • PIC24H
  • *****
  • Mensajes: 1295
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
  • PIC24H
  • *****
  • Mensajes: 1295
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

Desconectado Nachogn

  • PIC10
  • *
  • Mensajes: 4
problema en comunicacion serie
« Respuesta #9 en: 19 de Julio de 2023, 10:07:41 »
Hola a todos, estoy teniendo problemas para conectar dos pic 16f877a de forma inalambrica a traves del puerto serie (TX y RX) usando modulos de RF 433MHz, FUNCIONA PERFECTAMENTE hasta que pongo un retardo en el codigo, es decir estoy haciendo un equipo controlado por un teclado inalambrico, y necesito que espere 500mS desde que toma el primer pulso en el bit de entrada antes de volver a leerlo asi no me toma doble la orden, pero al poner el delay_ms en el codigo, deja de funcionar, es más, si activo un boton que por programa no tiene retardo funciona, pero cuando activo el que si tiene ahi se detiene todo...



#include <16f877a.h>
#fuses HS,NOWDT,NOPROTECT,NOPUT,NOLVP,NOBROWNOUT
#use delay(clock=8M)
#use RS232(BAUD=4800, BITS=8, PARITY=N, XMIT=PIN_C6, RCV=PIN_C7, STREAM=SPIC)
#use standard_io(D)
#include <stdio.h>

#define boton_1 PIN_D0                                                     // Pines de los pulsadores
#define boton_2 PIN_D1
#define boton_3 PIN_D2
#define boton_4 PIN_D3

int s_bt[4];                                                               // Almacena los estados de los pulsadores
void main()
{
   while(true)
   {
      if (input(pin_D0)==1){
         delay_ms(500);
         s_bt[0] = 1;
         
      }
     
     
     
      s_bt[1] = input_state(boton_2);
      s_bt[2] = input_state(boton_3);
      s_bt[3] = input_state(boton_4);
     
     
      fprintf(SPIC, "%u%u%u%u\r\n", s_bt[0],s_bt[1],s_bt[2],s_bt[3]);      // Envia los datos al receptor por RF
     s_bt[0] = 0;
   }
}

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1890
    • Sicoy
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #10 en: 19 de Julio de 2023, 10:18:32 »
¿Qué pasa si pones el delay al último?

Algo así:

Código: C
  1. void main()
  2. {
  3.    while(true)
  4.    {
  5.       if (input(pin_D0)==1)
  6.       {
  7.          s_bt[0] = 1;
  8.       }
  9.      
  10.      
  11.      
  12.       s_bt[1] = input_state(boton_2);
  13.       s_bt[2] = input_state(boton_3);
  14.       s_bt[3] = input_state(boton_4);
  15.      
  16.      
  17.       fprintf(SPIC, "%u%u%u%u\r\n", s_bt[0],s_bt[1],s_bt[2],s_bt[3]);      // Envia los datos al receptor por RF
  18.       s_bt[0] = 0;
  19.       delay_ms(500);
  20.    }
  21. }
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Nachogn

  • PIC10
  • *
  • Mensajes: 4
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #11 en: 19 de Julio de 2023, 10:38:01 »
No funciona nada, si lo pongo asi como estaba solo con 1 pulsador, solo falla al apretar ese pulsador, pero si lo pongo al final me fallan todos los pulsadores

Desconectado DominusDRR

  • PIC24H
  • ******
  • Mensajes: 1890
    • Sicoy
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #12 en: 19 de Julio de 2023, 10:56:00 »
No funciona nada, si lo pongo asi como estaba solo con 1 pulsador, solo falla al apretar ese pulsador, pero si lo pongo al final me fallan todos los pulsadores

Lo que entendería es que cuando se ejecuta el delay_ms, bloquean las interrupciones hasta finalizar dicho retardo, interrupciones que son necesarias para transmitir la información, pero yo sabía que los delays de CCS ya no producían ese problema.

Eduardo2.0 posiblemente te de una mejor explicación de lo que podría pasar, él es experto en ese compilador.

También, deberías intentar depurar el código para ver donde falla.
Tengo una idea algo difusa sobre MPLAB Harmony, XC32 con PIC32

Desconectado Nachogn

  • PIC10
  • *
  • Mensajes: 4
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #13 en: 19 de Julio de 2023, 11:04:35 »
Yo uso pic c compiller, voy a probar descargar CCS

Desconectado Eduardo2

  • PIC24F
  • *****
  • Mensajes: 947
Re:problema de comunicacion entre 3 pic(AYUDA)
« Respuesta #14 en: 19 de Julio de 2023, 11:15:59 »
Yo uso pic c compiller, voy a probar descargar CCS
Es lo mismo, a lo sumo cambiá de versión.

Yo tengo la 5.112 y cuando lo simulo en Proteus funciona lo mas bien.