TODOPIC

Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: ra2ven en 12 de Junio de 2009, 10:43:16

Título: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: ra2ven en 12 de Junio de 2009, 10:43:16
Hola, he estado intentando simular una comunicación por RS-485 entre PICs con malos resultados.
Si alguien pudiera ayudarme le estaría muy agradecido. Aqui adjunto mi esquema de simulación.

(http://www.todopic.com.ar/foros/imgtiny/fp82z5.jpg)

El programa es el mismo para los dos PICS
La simulación anterior es con los dos PICs en modo maestro (TXSTA.7=1) y comunicación síncrona (half-duplex).
Tal y como esta el programa se transmite algo ("x" en el virtual terminal) pero no puedo recibir nada ya que si habilito el bloque de código donde esta HSERIN los PICs no responden.

He intentado poner uno como maestro y el otro como esclavo, los dos esclavos... pero nada.
Tambien he intentado poner las lineas tx/rx de los PICs con "tris" a entradas o salidas pero lo único que consigo son conflictos lógicos como el de la imagen.

Un saludo y gracias de antemano.
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: MLO__ en 12 de Junio de 2009, 11:08:44
Segun el warm, hay un choque de logicas en los pines (donde esta el cuadro amarillo, indica una especie de corto) en la vida real hay un consumo alto de corriente. Veo ademas que los dos habilitadores estan a ceros, cuando uno de ellos debe estar en 1.

Antes de la transmision habilita al master para enviar y el slave tenlo siempre en recepcion.

Saludos
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: ra2ven en 12 de Junio de 2009, 11:42:31
Gracias por responder.

Haciendo pruebas me he dado cuenta de una cosa:

Yo en mi código sustituyo   "Define HSER_TXSTA 24H"   por   "TXSTA=%00100100"  pensando que eran equivalentes (24h es 00100100 en hexadecimal) pero he hecho una prueba simple de HSERIN asincrona en una nueva simulación y he visto que no causan la misma respuesta en el virtual terminal. (24H sale bien y con %00100100 sale un caracter raro).

Po lo tanto supongo que mis registros TXSTA y RCSTA están mal configurados. ¿Hay que configurarlos siempre en hexadecimal y con DEFINE?
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: MLO__ en 12 de Junio de 2009, 15:25:47
Hola.

En el terminal virtual vas a ver caracteres ASCII unicamente, si quieres puedes configurarlo en visualizacion de hexadecimales dandole click derecho al terminal virtual y seleccionado la opcion correspondiente.
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: ra2ven en 15 de Junio de 2009, 12:18:28

He intetado hacer una prueba alternativa sin los drivers RS-485 y no consigo nada, ni siquiera recibo nada por el virtual terminal. En modo asincrono funciona bien.
Quizas estoy poniendo mal las conexiones o nose, apenas he encontrado informacion sobre la forma de interconexion entre PICs de forma sincrona.
Entiendo que la linea Tx lleva la señal de reloj y la Rx lleva los datos.

Aqui esta el esquema:

(http://www.todopic.com.ar/foros/imgtiny/dtqag.jpg)

Un saludo.
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: ra2ven en 15 de Junio de 2009, 16:20:20
He probado el formato asíncrono con transmisión RS-485 y tampoco va bien, ya empiezo a creer que hay algun problema con este bus en proteus.....

La lógica en teoría es muy simple, pero no funciona. Aquí esta el esquema (el programa del pic derecho es igual que el del izquierdo mostrado pero transmitiendo "sl" y recepcionando "rp" (para descartar fallos por rebote del bus):

(http://www.todopic.com.ar/foros/imgtiny/2q3x85c.jpg)

Con permiso de los moderadores voy a pasar esta última respuesta a la sección Pic Basic porque quizá allí álguien sepa algo.
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: MLO__ en 15 de Junio de 2009, 21:23:39
Hola.

El RS485 funciona bien en proteus, mira AQUI (http://www.todopic.com.ar/foros/index.php?topic=23175.0).

Lo que dices sobre el modo sincrono de la comunicacion serial, no se si sea del todo cierto ... habrá que revisar mejor la teoria.

Saludos
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: ra2ven en 16 de Junio de 2009, 04:57:45
Hola, en ese esquema de proteus no veo los integrados para el bus 485 y es que precisamente el problema esta ahí, ya que si conecto directamente los pics me funcionan bien.

Un saludo.
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: stk500 en 16 de Junio de 2009, 05:09:38
Hola, en ese esquema de proteus no veo los integrados para el bus 485 y es que precisamente el problema esta ahí, ya que si conecto directamente los pics me funcionan bien.

Un saludo.

el integrado ese mismo no, pero otro si y con las misma caracteristica, mirar bien la Libreria, y te aconsejo que modere tus preguntas ya que temas de simulaciones no van aqui, y por favor no repita mensaje, gracias
Saludo
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: ra2ven en 16 de Junio de 2009, 06:13:47
Ok, pueden eliminar el post.

Disculpen las molestias.
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: AKENAFAB en 16 de Junio de 2009, 06:46:49

He intetado hacer una prueba alternativa sin los drivers RS-485 y no consigo nada, ni siquiera recibo nada por el virtual terminal. En modo asincrono funciona bien.
Quizas estoy poniendo mal las conexiones o nose, apenas he encontrado informacion sobre la forma de interconexion entre PICs de forma sincrona.
Entiendo que la linea Tx lleva la señal de reloj y la Rx lleva los datos.

Aqui esta el esquema:

(http://www.todopic.com.ar/foros/imgtiny/dtqag.jpg)

Un saludo.

No puedes conectar TX con TX porque creas corto y cuando tengan niveles diferentes bummm calientito tu circuito.

rx-tx
tx-rx
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: AKENAFAB en 16 de Junio de 2009, 06:55:40
En tu primer post tambien hay corto y una diferencia de niveles por eso el color amarillo.

Esta bien la conexión , pero lo más seguro es que en tu programa no tienes definido el pin RX como entrada.

Con eso deberia andar , xD segun mis intuiciones xD

bueno dejo las intuiciones y he pegado el ojo en el código que pones , veo el 'TRIsC = 1000 0000 comentado y abajo pones

TRISC = 0. <--- Aqui el error porque defines todo el puerto C como salida y RX lo estas usando como entrada o porlo menos le conectas ahi el TX del otro micro.

Lo tenías bien. trisc = 1000 0000



Saludos!

Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: ra2ven en 19 de Junio de 2009, 08:39:53
Ya probe la conexion rx-tx y viceversa pero no me responde el pic de la derecha segun lo que reciba HSERIN. Los datos a mi parecer se envian bien como se puede apreciar en el osciloscopio:

(http://www.todopic.com.ar/foros/imgtiny/vsozzr.jpg)

Creo que hay algo que configurar a mayores para la recepción sincrona que se me escapa.

Un saludo.
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: Dicxio en 19 de Junio de 2009, 16:56:32
Ya probe la conexion rx-tx y viceversa pero no me responde el pic de la derecha segun lo que reciba HSERIN. Los datos a mi parecer se envian bien como se puede apreciar en el osciloscopio:

Hola ra2ven:
             Creo que lo que te faltan son las resistencia a pull up en los TX del pic. En la practica tambien debes poner una resistencia de 120 ohm entre A y B como final de linea.

             Yo logré realizar la comunicación de un PIC con un PLC convirtiendo de RS232 a rs485 mediante el 76175. Si necesitas más información solo publícalo.

Saludos cordiales.
Ing. Rodrigo Ramirez
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: ra2ven en 22 de Junio de 2009, 06:46:11

Hola ra2ven:
             Creo que lo que te faltan son las resistencia a pull up en los TX del pic. En la practica tambien debes poner una resistencia de 120 ohm entre A y B como final de linea.

             Yo logré realizar la comunicación de un PIC con un PLC convirtiendo de RS232 a rs485 mediante el 76175. Si necesitas más información solo publícalo.

Saludos cordiales.
Ing. Rodrigo Ramirez


Hola, he intentado lo de las resistencias pull-up pero tampoco funciona. Yo creo que falta algo en el programa del pic de la derecha para recepción síncrona.

Asíncronamente funciona bien incluso a traves de una red RS-485.

Toda la información que tengas será bienvenida.

Un saludo.
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: Dicxio en 03 de Julio de 2009, 09:45:46
Hola Ra2ven:

          Disculpas las demoras en mi respuesta, si aún no has resuelto el conflicto, aqui te dejo un breve código que muestra como realizar la comunicación.

Pic 1
Código: [Seleccionar]
#include <16F876.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPUT                    //No Power Up Timer
#FUSES PROTECT                  //Code protected from reads
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

char r;


#int_RDA
void  RDA_isr(void)
{
  if(kbhit()){
    r=getch();
    }
}

void main()
{
   enable_interrupts(global);
   enable_interrupts(int_rda);   
   set_tris_A(0xF0);
   output_bit(pin_c0,0);
 
inicio:
if (input(Pin_A4))
   {
      output_bit(pin_c0,1);
      putc('d');
      delay_ms(1);
      output_bit(pin_c0,0);
   }
   delay_ms(500);
Goto inicio;
}

El código del Pic 2
Código: [Seleccionar]
#include <16F876.h>
#device adc=8

#FUSES NOWDT                    //No Watch Dog Timer
#FUSES HS                       //High speed Osc (> 4mhz)
#FUSES NOPUT                    //No Power Up Timer
#FUSES PROTECT                  //Code protected from reads
#FUSES NOBROWNOUT               //No brownout reset
#FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#FUSES NOCPD                    //No EE protection
#FUSES NOWRT                    //Program memory not write protected
#FUSES NODEBUG                  //No Debug mode for ICD

#use delay(clock=20000000)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

char r;

#int_RDA
void  RDA_isr(void)
{
  if(kbhit()){
    r=getch();
    }
}

void main()
{
   enable_interrupts(global);
   enable_interrupts(int_rda);
   output_bit(pin_c0,0);
   r='b';
   
inicio:

 if (r=='d')
   {
      output_bit(pin_c0,1);
      printf("L");
      delay_ms(1);
      output_bit(pin_c0,0);
      r='b';
   }
Goto inicio;
}

Y te adjunto el proyeco en el Proteus.

Cualquier duda sobre el código, solo consultalo.

Saludos cordiales
Ing. Rodrigo Ramirez
Título: Re: RS-485 problema de comunicación entre PICs (HSERIN,HSEROUT)
Publicado por: jansuini en 03 de Julio de 2009, 12:36:35
Hola:
No he estado conectado desde el principio con este tema ,pero hasta donde veo van un par de aclaraciones:
1 -al max 485 hay que habilitarlo para transmitir antes de "transmitir" y luego pasarlo a modo de recipción .
2 -En transmisiones sincronicas ,por un lado se transmiten datos y por otro se transmite el clock ,por eso es sincronica ,para transmiir con un solo 485 en cada pic ,se hace en modo asincrono.

Saludos
Jorge