Autor Tema: Problema con red rs485  (Leído 11784 veces)

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

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problema con red rs485
« Respuesta #15 en: 14 de Mayo de 2014, 14:21:16 »
Debes dejar de manejar el enable por programa y dejar que lo haga desde el puerto.
Lee bien en Use_rs232() como habilitar el pin enable del 485...
Creo que por ahi viene la gansa...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado don_shaggy

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con red rs485
« Respuesta #16 en: 15 de Mayo de 2014, 14:39:25 »
Debes dejar de manejar el enable por programa y dejar que lo haga desde el puerto.
Lee bien en Use_rs232() como habilitar el pin enable del 485...
Creo que por ahi viene la gansa...
Hola todos, MGLSOFT te cuento que hice lo del pin enable, eso represento una buena mejora de performance para mi programa, sin embargo no genero efecto sobre el problema que he venido exponiendo, los módulos independientes se comunican pero cuando los uno, no se comunican.

también intente cambiando el cristal de 4M a 20M y el resultado fue peor, ni siquiera se comunicaban de forma individual, les vole las resistencias de 120 ohm de la linea de transmisión y las que están entre los pines A y B de cada MAX485 y nada, se comunican pero no al unirlos.

Leí algo en internet, donde decía que un error muy común era unir los módulos directamente por 2 cables, esto genera mucho EMI o algo si (Interferencia Electromagnética), justamente lo que estoy haciendo es eso... los conecto entre si con un cable trenzado directamente. el problema es que la pagina no dice como deben conectarse de forma correcta y a demás, un circuito tan pequeño no creo que se vea afectado por tal magnitud de EMI y menos cuando el cable que los conecta mide escasos 5 cm a lo mucho.

También le cambie bit de 8 a 7 y el resultado es el mismo, solo me funciona con paridad par, intente hacerlo con paridad ninguna y no me funciono.

En este momento (15/05/2014 a las 12:02 del medio dia) esta cargando un vídeo donde explico mas detalladamente el funcionamiento del sistema, el link es el siguiente pero puede ser visto hasta dentro de una hora, se me corto antes de tiempo la grabación pero alcanzo a mostrar lo que quería mostrarles, por favor vean en link y me comentan... de preferencia manejemos los comentarios en este foro y no en youtube para no tener que chequear dos lugares.

El link es el siguiente.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problema con red rs485
« Respuesta #17 en: 15 de Mayo de 2014, 14:47:57 »
Aun no se cargo...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado don_shaggy

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con red rs485
« Respuesta #18 en: 15 de Mayo de 2014, 14:52:48 »
Aun no se cargo...
si, ya se cargo jejeje verifica por favor.

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problema con red rs485
« Respuesta #19 en: 15 de Mayo de 2014, 15:04:27 »
Porque no pones el código que tienes en cada PIC ?

Si es posible usa Geshi > C para ponerlo, así se puede leer mejor...
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado don_shaggy

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con red rs485
« Respuesta #20 en: 15 de Mayo de 2014, 15:20:20 »
Porque no pones el código que tienes en cada PIC ?

Si es posible usa Geshi > C para ponerlo, así se puede leer mejor...

Código: CSS
  1. #include <16F876a.h>
  2. #FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, WDT
  3. #use delay(clock=4M)
  4. #USE rs232(baud=9600, xmit= pin_c6, rcv=pin_c7, bits=7, parity=E, enable=pin_c0)
  5. char rx;
  6. #int_rda

Hola, el código es este, lo había puesto mas arriba pero igual aquí lo refresco, ambos tienen el mismo programa, la diferencia es el PIC y el carácter de inicio que para este es A y para el otro PIC es una B.

Código: CSS
  1. void main()
  2. {
  3.    set_tris_b(0xFF);
  4.    set_tris_a(0x00);
  5.    setup_wdt(WDT_36MS);
  6.    int count;
  7.    rx='z';
  8.  
  9. while(TRUE)
  10. {
  11.    if (kbhit())
  12.    {
  13.       restart_wdt();
  14.       rx=getch();
  15.    }
  16.    if (rx =='A')
  17.     {
  18.       restart_wdt();
  19.       count=input_b();
  20.       printf("%d",count);
  21.       delay_ms (10);
  22.       output_low(pin_c0);
  23.       rx='z';
  24.       restart_wdt();
  25.     }
  26.    }
  27. }
« Última modificación: 15 de Mayo de 2014, 16:42:55 por un Moderador, Razón: Modificado para añadir tag Geshi »

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5552
    • Picmania by Redraven
Re: Problema con red rs485
« Respuesta #21 en: 15 de Mayo de 2014, 16:46:16 »
¿El #INT_RDA está así, sólo, sin una función a continuación que atienda la interrupción? ¿Pero después lees la USART desde el Main()? ¿No da error o se queja el CCS al compilar? Eso puede ser fuente de problemas, seguro.  :shock:

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MGLSOFT

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 7918
Re: Problema con red rs485
« Respuesta #22 en: 15 de Mayo de 2014, 16:56:28 »
Tiene razon Diego, ese #int_rda le dice al compilador que arranca el codigo de la interrupcion por puerto serie.
Sacala o comenta esa linea y es muy posible se solucione.

Asi deberia quedarte:

Código: C
  1. #include <16F876a.h>
  2. #FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, WDT
  3. #use delay(clock=4M)
  4. #USE rs232(baud=9600, xmit= pin_c6, rcv=pin_c7, bits=7, parity=E, enable=pin_c0)
  5.  
  6. char rx;
  7.  
  8. //#int_rda
  9.  
  10.  
  11.  
  12. void main()
  13. {
  14.    set_tris_b(0xFF);
  15.    set_tris_a(0x00);
  16.    setup_wdt(WDT_36MS);
  17.    int count;
  18.    rx='z';
  19.  
  20. while(TRUE)
  21. {
  22.    if (kbhit())
  23.    {
  24.       restart_wdt();
  25.       rx=getch();
  26.    }
  27.    if (rx =='A')
  28.     {
  29.       restart_wdt();
  30.       count=input_b();
  31.       printf("%d",count);
  32.       delay_ms (10);
  33.     //  output_low(pin_c0);  // no es necesario, se encarga de esto el pin enable de #use_rs232
  34.       rx='z';
  35.       restart_wdt();
  36.     }
  37.    }
  38. }
« Última modificación: 15 de Mayo de 2014, 17:00:18 por MGLSOFT »
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado don_shaggy

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con red rs485
« Respuesta #23 en: 15 de Mayo de 2014, 17:22:25 »
Gracias a los dos, ya hice los cambios, ese #INI_RDA lo tenia cuando intente hacer el proyecto con interrupciones pero no me fue bien asi que borre eso y se me quedo ese, nunca me genero problemas en la compilacion, sin embargo es evidente que se trata de un error como ustedes me lo han echo ver.

El problema mejoro pero el problema persiste, me sigue pasando lo mismo, los dos pic por separado se comunican con el PC pero al unirlos ya no hacen comunicacion... no tengo claro si puede ser un problema del montaje electrónico o algo de la programación.

Este es el nuevo código después de las correcciones, sigue funcionando como se ve en el vídeo que monte en youtube... esto debería ser un proyecto muy sencillo, me da coraje que se complique tanto pero pues bueno, supongo que eso es la electrónica hermosa aunque a ratos incomprensible... sigo buscando solución y pendiente de sus comentarios.  :? :?

#include <16F873a.h>
#FUSES NOWDT, XT, NOPUT, NOPROTECT, NOBROWNOUT, NOLVP, NOCPD, NOWRT, NODEBUG, WDT
#use delay(clock=4000000)
#USE rs232(baud=9600, xmit= pin_c6, rcv=pin_c7, bits=7, parity=E, enable=pin_c0)
char rx;

void main()
{
   set_tris_b(0xFF);
   set_tris_a(0x00);
   setup_wdt(WDT_36MS);
   int count;
   rx='z';

while(TRUE)
{
   if (kbhit())
   {
      restart_wdt();
      rx=getch();
   }
   if (rx =='A')
    {
      restart_wdt();
      count=input_b();
      printf("%d",count);
      delay_ms (10);
      rx='z';
      restart_wdt();
    }
   }

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Problema con red rs485
« Respuesta #24 en: 15 de Mayo de 2014, 17:58:42 »
¿Me ha parecido ver un par de resistencias en el bus, o es que no veo bien?

Desconectado don_shaggy

  • PIC10
  • *
  • Mensajes: 10
Re: Problema con red rs485
« Respuesta #25 en: 15 de Mayo de 2014, 19:18:02 »
¿Me ha parecido ver un par de resistencias en el bus, o es que no veo bien?
Pin 6 del max485 a vcc con una resistencia de 680 ohm y pin 7 del max485 a gnd con otra resistencia del mismo valor, lo encontré en internet cuando recién empezaba a montar el circuito... te refieres a esas?

Desconectado alperez

  • PIC18
  • ****
  • Mensajes: 255
Re: Problema con red rs485
« Respuesta #26 en: 16 de Mayo de 2014, 15:13:04 »
Pin 6 del max485 a vcc con una resistencia de 680 ohm y pin 7 del max485 a gnd con otra resistencia del mismo valor, lo encontré en internet cuando recién empezaba a montar el circuito... te refieres a esas?

Los pines 6 y 7 son A y B respectivamente.
Vcc es el pin 8 y GND es el pin 5.

En el datasheet no veo esas resistencias, prueba primero a conectarlo como dice el fabricante, una vez que funcione haz las pruebas que te den la gana.


http://datasheets.maximintegrated.com/en/ds/MAX1487-MAX491.pdf

Desconectado dago2000

  • PIC10
  • *
  • Mensajes: 3
Re:Problema con red rs485
« Respuesta #27 en: 16 de Marzo de 2020, 11:11:45 »
Estimados lectores si funciona el sistema de rs485 lo que pasa es que el pic que utilizan no tinen intermamente un max232 y es que por eso deberien colocarle un max232 para tener el TX y RX ya que este funciona en NOINVERT si en caso que no tuvieran un max232 cambien la linea de comunicacion en la declaracion del #use rs232(baud=9600,xmit=PIN_B2,rcv=PIN_B1, INVERT)